使用Java和Selenium获取元素的子文本

时间:2017-04-13 20:33:56

标签: java selenium xpath

我有一个包含标题(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()可能只是获取元素级文本而没有子级别。

1 个答案:

答案 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 ".//*"来获取元素的所有子元素。