2017-04-13 44 views
0

我有一個帶有標題(th)元素的表格。 th可以包含文本,但很可能th的子元素將包含文本。問題是子元素並不總是相同的標籤或相同的深度。例如使用Java和Selen獲取元素的子文本

<table> 
<thead> 
<tr> 
    <th> 
    <span>Here is some text</span> 
    </th> 
    <th> 
    <a>This is some text</a> 
    </th> 
    <th> 
    <span><a>Lower Level</a></span> 
    </th> 
    .. 
</tr> 
</thead> 
</table> 

所以我的find.elements XPath是 「// DIV [@id = 'gridClaimListing']/DIV [1] // //表THEAD/TR [2] // TH」(該表位於該div下)。

因此,對於每個元素,我想我可以做另一個發現像「.// [@text]」或者「.// [text()]」,但這可能是一種痛苦。有沒有辦法從元素中獲取文本,即使本身在其級別中沒有文本?我相信element.getText()可能只是獲取元素級別的文本和沒有子級別。

+1

你在最後的上試過'.getText()'嗎?它回來了什麼?請閱讀[預計需要多少研究工作?](https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users)請提供代碼你已經嘗試過,並且執行結果包括任何錯誤信息等。 – JeffC

回答

0

假設<th>不包含你所需要的文字,只有子元素具有文字,你可以trysomething這樣的:

List<WebElement> parentElems = driver.findElements(By.xpath("//div[@id = 'gridClaimListing']/div[1]//table//thead/tr[2]//th")); 

for(WebElement parent: parentElems) { 
    // for each parent element (th), fetch all it's children 
    List<WebElement> childElements = parent.findElements(By.xpath(".//*")); 

    // display text of all child elements 
    for(WebElement descendant: childElements) { 
     System.out.println(descendant.getText()); 
    } 
} 

在這裏,我們充分利用XPATH ".//*"獲取元素的所有子元素。

+0

我會說內部for循環是無關緊要的;因爲'parentElems'正在識別所有三個'' – kushal

+0

@kushal。內部for循環子元素?我這樣做,所以它適用於''標籤有一個以上子女 –

+0

oh .. ..這是很好的想法 – kushal