2016-07-14 63 views
1

我有以下結構,我嘗試單擊Test1旁邊的第二個垃圾按鈕圖標。Selenium python單擊某個文本旁邊的圖標

<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是//[email protected]="glyphicon glyphicon-trash",做索引與給定的搜索結果。 但是,我發現退出效率低下,尤其是給定的結果理論上可能很多,我必須遍歷結果列表。

我還以下行嘗試:

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

不工作(因爲垃圾桶圖標是不實際的Test1的兄弟

我如何能實現這以更好的方式(即我想用Test1作爲錨點並點擊旁邊的垃圾桶按鈕,而不是旁邊的Test0)?

+0

嘗試一次'// span [text()='Test1']/following :: button'並讓我知道... –

+0

@SaurabhGaur不,它不起作用。 – heike

回答

0

向該行選擇按鈕具有文本:

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

爲了在電池4具有在小區3的文本的行中選擇按鈕:

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

要選擇小區有文本,然後在下面的單元格中的按鈕:

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

我不是很清楚你是否想要按鈕或圖標... 這裏是我的標記

嘗試

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

PS還要注意的是:

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

是不同的。

+0

文本前後沒有空格,我更新了描述 – heike