Selenium python单击某个文本旁边的图标

时间:2016-07-14 12:46:16

标签: python selenium xpath

我有以下结构,我试图点击第二个垃圾桶图标,这是Test1旁边的按钮。

<tr class=“ng-scope”>
  <td class=“ng-scope”></td>
  <td class=“ng-scope”></td>
  <td class=“ng-scope”>
     <span class=“ng-binding”>Test0</span>
   </td>
  <td class=“ng-scope”>
     <button class=“bin btn-xs”>
       <i class="glyphicon glyphicon-trash"></i>
     </button>
  </td>
</tr>
<tr class=“ng-scope”>
  <td class=“ng-scope”></td>
  <td class=“ng-scope”></td>
  <td class=“ng-scope”>
     <span class=“ng-binding”>Test1</span>
   </td>
  <td class=“ng-scope”>
     <button class=“bin btn-xs”>
       <i class="glyphicon glyphicon-trash"></i>
     </button>
  </td>
</tr>

目前我正在实现的是find_element_by_xpath,其中xpath是//i@class="glyphicon glyphicon-trash"并使用给定的结果进行索引搜索。 然而,我觉得退出效率低,特别是给定的结果在理论上可能很多,我必须遍历结果列表。

我还尝试了以下几行:

 myxpath = "//*[contains(text(), 'Test1')]/following-sibling::tr/button[@class='glyphicon glyphicon-trash']" 
 driver.find_by_xpath(myxpath)

不起作用(因为垃圾桶图标实际上不是Test1的兄弟。

如何以更好的方式实现这一点(即我想使用Test1作为锚点并点击它旁边的垃圾按钮,而不是在Test0旁边?)

2 个答案:

答案 0 :(得分:0)

我不清楚你是否想要按钮或图标...... 这里是i标签

尝试

//i[@class='glyphicon glyphicon-trash' and ../../../td/span/text() = "Test1"]

ps还注意到:

<span class="ng-binding">Test1</span>

<span class="ng-binding"> Test1 </span>

是不同的。

答案 1 :(得分:0)

选择包含文字的行中的按钮:

//tr[.//text()='Test1']//button

要选择单元格3中具有文本的行中单元格4中的按钮:

//tr[td[3]//text()='Test1']/td[4]//button

要选择包含文本的单元格,然后选择以下单元格中的按钮:

//td[.//text()='Test1']/following-sibling::td[1]//button"