在具有指定文本的元素旁边查找元素

时间:2015-12-23 17:23:29

标签: python selenium xpath selenium-webdriver

上下文

我正在为一个应用程序编写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? */")

2 个答案:

答案 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