找不到定位器 'xpath=//*[@id="1"]/button' 的元素

Element with locator 'xpath=//*[@id="1"]/button' not found

我正在用 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>

谁能帮我看看我做错了什么?

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

robot 中最好的一点是您无需为 Id、xpath 提及定位器类型

替换为下面

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

你能试试这个吗

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

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

这个有效:

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

如果您对 "add-to-cart" 元素感兴趣,您可以按 class 的所有元素进行过滤,然后 select 感兴趣的元素(如数组)。

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

正如很少有人提到的那样,当您有更多具有相同 class 或 id 的元素时,您应该使用

来区分它们
(//button[@data-id='1'])[1] 
(//button[@data-id='1'])[2] 

等等,但是在Robot framework中记得要在前面使用xpath=这样framework才能识别xpath

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

如果计时有问题并且您的组件没有足够快地渲染,我发现使用下面的代码比等待页面包含元素更有用,根据我的经验,它更快,更成功

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