【问题标题】:Element with locator 'xpath=//*[@id="1"]/button' not found找不到带有定位器'xpath=//*[@id="1"]/button'的元素
【发布时间】:2018-10-05 23:47:03
【问题描述】:

我正在使用 Selenium2 库编写机器人框架测试,但我无法访问按钮,一页上有很多相同的按钮,所以它没有 id。我尝试访问元素的那些方式:

Click Element   xpath=//*[@id="1"]/button
Click Button    xpath=//*[@id="1"]/button
Click Element   name=add
Click Button    name=add
Click Element   add
Click Button    add

但它没有找到元素。我试过点击按钮,同样的结果。元素是:

<button class="add-to-cart" name="add" data-id="1">Add Course</button>

谁能帮我做错什么?

【问题讨论】:

    标签: robotframework selenium2library


    【解决方案1】:

    如果有错误,您能否提供详细信息?

    机器人中最好的事情是您不需要为 Id、xpath 提及定位器类型

    替换为下面

    点击元素 (//button[text()="Add Course"])[1]

    【讨论】:

    • 错误总是相同的“未找到带有定位器的元素'(//button[text()="Add Course"])[1]'。仅此而已
    • 您能否在应用程序中检查和验证上述定位器,以便您可以相应地修改索引/名称。
    • 这是元素,我从检查员那里直接复制它 跨度>
    • 请验证提供的定位器正在识别应用程序中的元素。第 1 步:在 chrome 中打开应用程序并转到页面。第 2 步:在开发人员控制台中单击 F12 第 3 步:单击元素选项卡第 4 步:在元素选项卡中按 CTRL + F 第 5 步:复制并粘贴我提供的 xpath 请验证以黄色突出显示的元素是您所指的元素跨度>
    • 如果您的回答是“是”,请同时确认您所指的定位器不存在于 iFrame 中。执行时需要切换到框架并点击元素
    【解决方案2】:

    你可以试试这个。

    xpath=//button[@data-id="1"]
    

    【讨论】:

      【解决方案3】:

      问题是您正在测试的页面使用 javascript 填充该页面,但您的测试试图在该 javascript 完成运行之前单击该按钮。您需要等待该元素才能点击它。

      这行得通:

      wait until page contains element  //button[@data-id='1']
      click element  //button[@data-id='1']
      

      【讨论】:

      • 哇!太感谢了!我花了很多时间来找出问题所在
      • @Seiggailion:我看到你已经问了几个问题并得到了答案,但还没有接受任何一个。我建议你阅读What should I do when someone answers my question?
      • 哦,抱歉,我不知道。谢谢你,现在我会一直这样做的
      【解决方案4】:

      如果您对“添加到购物车”元素感兴趣,您可以按类的所有元素进行过滤,然后选择感兴趣的元素(如数组)。

      Click Button    xpath=(//button[@class="add-to-cart"])[1]
      ...
      Click Button    xpath=(//button[@class="add-to-cart"])[n]
      

      【讨论】:

        【解决方案5】:

        正如很少有人提到的那样,当您有更多具有相同类或 id 的元素时,您应该区分它们

        (//button[@data-id='1'])[1] 
        (//button[@data-id='1'])[2] 
        

        等等,但在Robot框架中记得使用xpath=,这样框架才能识别xpath

        Click Element   xpath=(//button[@data-id='1'])[1]
        

        如果出现时间问题并且您的组件未能尽快渲染,我发现使用下面的代码而不是等待直到页面包含元素更有用,根据我的经验,它更快更成功

        Wait Until Keyword Succeeds     3x   2 seconds
        ...                             Element Should Not Be Visible       xpath=//div...
        

        【讨论】:

          猜你喜欢
          • 2022-06-25
          • 1970-01-01
          • 2020-10-16
          • 1970-01-01
          • 1970-01-01
          • 2018-12-04
          • 2020-03-14
          • 2018-04-01
          • 2018-06-16
          相关资源
          最近更新 更多