未找到定位器'xpath = // * [@ id =“1”] /按钮'的元素

时间:2018-04-25 13:10:43

标签: robotframework selenium2library

我正在使用Selenium2 Library编写机器人框架测试,我无法访问按钮,一个页面上有许多相同的按钮,因此它没有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

但它找不到元素。我试过Click Button,结果相同。元素是:

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

任何人都可以帮助我,我做错了什么?

5 个答案:

答案 0 :(得分:3)

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

这有效:

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

答案 1 :(得分:1)

您是否可以提供错误详情?

机器人中最好的东西是你不需要提到Id,xpath的定位器类型

替换为以下

点击元素(//按钮[text()=&#34;添加课程&#34;])[1]

答案 2 :(得分:0)

你可以尝试一下。

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

很少有人提到,当您有更多具有相同类或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...