gpt4 book ai didi

java - Selenium , java 。需要通过 Xpath 选择表内的祖先元素

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:07:13 25 4
gpt4 key购买 nike

我有一个包含以下代码的 HTML 页面:

<table class="report" style="width:100%">
<tbody>
<tr>
<th/>
<th>Position Open
<br>
<span class="timestamp">27/7/2016 16:12:12</span>
</br>
</th>
<th>Position closed
<br>
<span class="timestamp">27/7/2016 16:12:42</span>
</br>
</th>
</tr>
<tr>
<td>
<span dir="ltr">EURJPY</span>
</td>
<td>116.098</td>
<td>116.156</td>
</tr>
</tbody>
</table>

在此页面上,我有另一个具有相同类属性“report”的表格,但只有此表格包含文本“Position Open”和“Position Closed”。我需要选择包含“EURJPY”、“116.098”和“116.156”数据的元素。这些元素的内容正在发生变化,即可能会出现“EURUSD”或“GBPCAD”等而不是“EURJPY”。我尝试了以下代码:

driver.findElement(By.xpath("//span[text()='Position Open']/ancestor::table[@class='report'](//tr)[2]/td/span")).getAttribute("textContent");  

获取第一个必填字段文本但出现无效选择器错误。

最佳答案

您的 XPath 很接近,但有几个问题。

//span[text()='Position Open']/ancestor::table[@class='report'](//tr)[2]/td/span
  1. 您正在搜索包含文本“Position Open”的 SPAN,而实际上它是包含该文本的 TH

    //th[text()='Position Open']/ancestor::table[@class='report'](//tr)[2]/td/span
  2. (//tr) 应更正为 //tr

    //th[text()='Position Open']/ancestor::table[@class='report']//tr[2]/td/span
  3. 您想要的是 TD 中包含的文本,而不是 SPAN。如果从 TD 中提取文本,您可以从所有三个元素中获取所需的文本。如果您拉取 SPAN,那么您还需要拉取最后两个 TD。这种方式更简单。

  4. ...最后,TH 包含的不仅仅是您要查找的文本。使用 .contains() 进行匹配。

    //th[text()='Position Open']/ancestor::table[@class='report']//tr[2]/td

所以我们采用该 XPath 并将其放入 Java 代码中,我们得到以下内容。

List<WebElement> tds = driver.findElements(By.xpath("//th[contains(text(),'Position Open')]/ancestor::table[@class='report']//tr[2]/td"));
for (WebElement td : tds)
{
System.out.println(td.getText());
}

关于java - Selenium , java 。需要通过 Xpath 选择表内的祖先元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38619617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com