2015-09-03 105 views
0

我在選擇要在Selenium中讀取的表格時遇到問題。
我有一個表中'thead'裏面有兩個'tr'元素,我需要找到一種方法來忽略其中的第一個。
下面是代碼:Selenium XPath - 忽略表格中的元素

<table class="noselect"> 
    <thead> 
     <tr> 
     <th> </th> 
     <th class="number IOL">Interest Rates</th> 
     <th class="number IO"> 
     </tr> 
     <tr> 
     <th>Description</th> 
     <th class="number">Value</th> 
     <th class="number">Percentage</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
     <tr class=""> 
     <tr class=""> 
     <tr class=""> 
     <tr> 
     <tr> 
    </tbody> 
</table> 

使用Selenium我會要求它記錄了一定的行和列的值。然後,我們將查看我將給它的Table元素(希望使用可以在這種情況下工作的XPath),查看thead並記錄每列的標題。在這種情況下,我一直在努力,事實上,在這個表的頂部有一個額外的'tr'阻礙了這個過程。

這是這個元素如何目前使用:

[TableAlias("Detailed table")] 
protected virtual IWebElement DetailedTable() 
{ 
    return Driver.FindElement(By.XPath("//table[@class='noselect']")); 
} 

我已經嘗試了許多不同的方式,我不能去上班,但什麼已經去爲我的要點是:

//table[@class='noselect movements']/thead/tr/th[not(text()='Interest Rates')]/../../.. 

在這裏,我堅持去'tr'元素,告訴它不要使用它然後退出,但選擇它再次 - 甚至不會取消選擇整個'tr'元素。它似乎沒有幫助(對我),我試圖刪除的'tr'元素是空白的,沒有類或定義的功能。

除了'thead'中的第一個'tr'元素是否有一種方法可以選擇整個表作爲一個元素?

+0

你是什麼意思與「選擇整個表」?之後你想怎麼辦?這對於回答你的問題很重要,所以更好地描述你真正想要達到的目標(以及你已經嘗試過的xpath在哪裏?) – drkthng

+0

使用Selenium我會要求它記錄某一行和列的值。然後,我們將查看我將給它的Table元素(希望使用可以在這種情況下工作的XPath),查看thead並記錄每列的標題。在這種情況下,我一直在努力,事實上,在這個表的頂部有一個額外的'tr'阻礙了這個過程。我將添加這個和我已經嘗試使用的XPath的 – StevieBruce

回答

1

結合兩個xpthes。沒有第一TR處理該THEAD標籤一號的XPath採取THEAD和第二TBODY

//table/thead/tr[not(position()=1)] | //table/tbody 
+0

這樣做的工作,它選擇我需要的所有東西,但不幸的是它被看作是兩個單獨的元素,所以當Selenium使用它時,它只會結束看到這兩個XPath中的第一個。如果我能找到一種讓Selenium結合這兩種元素的方法,這將是完美的 – StevieBruce

+0

@StevieBruce不幸的是,我對硒一無所知。但它在xpath測試器中工作正常 – splash58

0

在你的函數,得到的TR S中的集合,並與開始[1](跳過[0])和處理休息。

+0

好主意,我覺得這可能是最好的方法。問題是有很多測試已經使用這個函數,並且這樣做會阻止那些工作,但我可以複製該代碼並專門爲此問題創建一個新進程。謝謝 – StevieBruce

+0

我還沒有看到該功能,但如果有很多共享代碼,我會嘗試將兩者合併,如果可能的話,儘量減少共享代碼。 – JeffC