上下文
我正在为一个应用程序编写Selenium测试,该应用程序允许用户在表单上提交数据并将其显示在表格中。该表通过Javascript / AJAX进行乐观更新,其条目按字母顺序显示,因此无法保证新创建的元素的位置。因此,测试识别哪个元素的唯一方法是使用类似waitForText
的文字搜索。
带有标识文本的元素位于其自己的td
元素中。兄弟td
元素包含一个我希望测试点击的菜单按钮。菜单选项特定于新创建的元素,因此我需要确保测试单击它刚刚创建的元素旁边的元素,而不是表格中其他元素旁边的任何其他菜单按钮
守则
<table>
<tr>
<td>Element 1 name</td>
<td>Element 1 extra-data</td>
<td>Element 1 more-data</td>
<td onClick='/* display menu for Element 1 */'>Element 1 menu</td>
</tr>
<tr>
<td>Element 2 name</td>
<td>Element 2 extra-data</td>
<td>Element 2 more-data</td>
<td onClick='/* display menu for Element 2 */'>Element 2 menu</td>
</tr>
<tr>
<td>Element 3 name</td>
<td>Element 3 extra-data</td>
<td>Element 3 more-data</td>
<td onClick='/* display menu for Element 3 */'>Element 3 menu</td>
</tr>
<tr>
<td>New element name</td>
<td>New element extra-data</td>
<td>New element more-data</td>
<td onClick='/* display menu for New element */'>New element menu</td>
</tr>
</table>
我理解如果我可以将ID或类附加到包含新元素的tr
会更好;但是,这是不可能的,因为这个ID最好是创建的元素的内部数据库ID,这是我的测试无法访问的。我特别需要测试能够识别它创建的元素,并且所有测试都知道它在点击提交之前在表单中键入的内容。
如何编写一个专门选择该菜单按钮的选择器?例如,find_elements_by_xpath("//tr/td[@text='New element']/ /* how do you specify a sibling and not a child here? */")
答案 0 :(得分:2)
@ Javitronxo的回答稍有改进:
driver.find_element_by_xpath("//tr/td[@text='New element']/following-sibling::td[@onclick]")
使用find_element_by_xpath()
找到单个元素,只获取可点击的所需td
元素 - 具有onclick
属性。
答案 1 :(得分:1)
您可以使用以下命令指定XPath中的兄弟:
find_elements_by_xpath("//tr/td[@text='New element']/following-sibling::td[1]")
您可以详细了解here。