2016-02-23 55 views
-3

我面臨一個問題,其中一個特定單元格(td)在webtable中的值取決於另一個單元格TD)..Selenium WebDriver WebTable getData:如何獲得「td」的值,如果它取決於另一個「td」

例子:

  1. 使用http://www.espncricinfo.com/new-zealand-v-australia-2015-16/engine/match/914239.html並點擊滿分...

  2. 現在我希望得到一個板球運動員的名字誰是不敗(極品 「不出來」 擊球手來自新西蘭第一局。在這種情況下,「TA Boult」)

  3. 但是「TA Boult」和「Not out」是同一個「tr」的2個不同的td。

有人可以請指導我如何做到這一點?

+0

提供您嘗試到目前爲止和錯誤,你面對的代碼。不要求一個完整的解決方案! – Andersson

+0

我無法複製/粘貼我的代碼,所以無法添加我寫的代碼。 –

回答

0

以下XPath將解決這個問題爲您:

//table[contains(@class,"batting-table")][1]//td/a[.="TA Boult"]/../../td[@class="dismissal-info" and contains(text(), "not out")] 

您可能想爲頂級表中選擇一個更具體一點,但實質上這個XPath是做了以下內容:

  1. 查找包含類名「擊球表」
  2. 獲得此表中的所有元素td第一臺
  3. 找人l td元素中的a元素
  4. 指定a元素的文本必須是您正在搜索的玩家形式,在本例中爲TA Boult。
  5. 使用/../..來選擇具有文本「TA Boult」的a元素的父級的父級。因此,如果a標記的父代爲td,則td標記的父代爲tr
  6. 現在我們在包含任何匹配的a標籤的行中,我們可以在此行中搜索td標籤,其中包含文本「not out」的「dismissal-info」類。

從那裏你可以再次使用/../..作爲XPath的結果返回整行。

所以基本上,您正在搜索一個行,然後搜索一個孩子,然後搜索父母,然後搜索另一個孩子,然後返回一個正確的行。

希望有幫助!

0

好了,所以......

//all tr elements. 

IList<IWebElement> tableTRCollection = driver.FindElement(By.Xpath("//table[@class='batting-table innings']")).FindElements(By.TagName("tr")) 

//in every tr all td elements will be: 

IList<IWebElement> tableTDCollection; 

foreach(IWebElement tr in tableTRCollection) 
{ 
tableTDCollection = tr.FindElements(By.TagName("td")); 
} 

//in td collection take all td 

foreach(IWebElement td in tableTDCollection) 
{ 
string tdText = td.Text; 
} 

等等...

你得到所有集合之後就可以搞定一切。

0

謝謝大家的回答..經過很多努力,我找到了答案,但發現解決方案几乎和Ben建議的一樣。

我沒有嘗試,雖然其他建議的解決方案..

下面是代碼...

WebElement name = driver.findElement(By.xpath(".//*[@id='full-scorecard']/div[2]/div/table[1]//td[@class='dismissal-info'][contains(text(),'not out')]/ancestor::tr/td[@class='batsman-name']")); 
相關問題