2012-12-03 59 views
2

鑑於這種HTML:的XPath - 如何找到信息

<tr class="even" id="district_22"> 
    <td class="name">Virginia Beach City Public Schools</td> 
    <td class=""><a href="/admin/districts/22" class="member_link delete_link" data-confirm="Sure?" data-method="delete" rel="nofollow">Delete</a></td> 
</tr> 
<tr class="even" id="district_23"> 
    <td class="name">Virginia City City Public Schools</td> 
    <td class=""><a href="/admin/districts/23" class="member_link delete_link" data-confirm="Sure?" data-method="delete" rel="nofollow">Delete</a></td> 
</tr> 
<tr class="even" id="district_24"> 
    <td class="name">Virginia Town City Public Schools</td> 
    <td class=""><a href="/admin/districts/24" class="member_link delete_link" data-confirm="Sure?" data-method="delete" rel="nofollow">Delete</a></td> 
</tr> 

我試圖使用Selenium和XPath它。 我在嘗試選擇屬於'Virginia Beach City Public Sc​​hools'的'刪除'鏈接時遇到了問題。 我是xpath新手。

我想:

xpath=(//td[text()='Beach')]/@class.contains('delete')) 

但沒有找到的元素。

注意:我不能使用ID,因爲這些是重複測試,ID每次都會更改。

回答

4

試試這個:

​​
+0

只是爲了解釋這是怎麼回事...中的XPath的第一位選擇包含'沙灘'的td。然後,它選擇td的父節點,然後從中選擇包含具有包含'delete_link'類的鏈接的任何td。希望能夠說清楚! –

1

tr[@id="district_22"]//a[contains(@class,'delete_link')]會好很多。
這是不好的看文本。畢竟它可能會以其他方式進行本地化和編輯。然而,身份證是不變的,不會重複。

+0

對不起,不適合我。我正在運行自動化測試並在其中使用xpath。我每次都設置並拆除(即刪除)我的對象。數據庫序列繼續增加,儘管如此,我實際上需要一種方法來完成它的名稱,而不用引用每次運行時ID會發生變化的方法。 –

+1

@MichaelDurrant,我明白了。無論如何,既然你創建了這個項目並且你知道了全名,那麼就得到全名:'td [text()='弗吉尼亞海灘城公立學校')]/...'否則你可能會得到多個'Beach'結果 –

+0

+1。好信息。謝謝 –

-1

我想你想執行的循環中的自動化腳本,如果是這種情況,那麼你可以試試下面的代碼:

for(i=1,dist=22; i<-count; i++,dist++) 
{ 
    .... 
    .... 
    driver..findElement(By.xpath("//*[@id=District_"+dist+"]/...")) 
}