我有一个包含标题(th)元素的表。 th可能包含文本,但很可能th的子元素将包含文本。问题是子元素不能始终是相同的标签或相同的深度。例如
<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是 &#34; // div [@id =&#39; gridClaimListing&#39;] / div [1] // table // thead / tr [2] // th&#34; (该表位于该div下面。)
所以对于每个元素,我想我可以做另一个发现像&#34; .// [@ text]&#34;或者&#34; .// [text()]&#34;但这可能是一种痛苦。有没有办法可以从 th 元素中获取该文本,即使 th 本身在其级别没有文本?我相信 element.getText()可能只是获取元素级文本而没有子级别。
答案 0 :(得分:0)
假设<th>
不包含您需要的文本且只有子元素包含文本,您可以尝试这样的东西:
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 ".//*"
来获取元素的所有子元素。