java - Xpath 不返回此类元素异常
问题描述
我正在尝试自动化页面,基本上任务是从不同的行中提取值。所有表的表名都相同,而且表中的左侧值也相同,我需要获取相应的右侧值,所以我尝试使用 xpath。下面是几个表格的 html,但我在页面中还有 4 个表格,它们都有相同的表格 ID。
<table cellspacing="1" cellpadding="1" border="1" width="90%" bgcolor="Silver" align="center">
<tbody><tr>
<td colspan="3">
<b>Amos Status
<a href=</a>
</b>
</td>
</tr>
<tr>
<th>Flow</th>
<th>Last Processed Message</th>
<th>Status</th>
</tr>
<tr>
<td>Loopback</td>
<td>-</td>
<td>
<b>On</b>
</td>
</tr>
<tr>
<td>SWIFT</td>
<td>-</td>
<td>
<b>On</b>
</td>
</tr>
<tr>
<td>CDSX</td>
<td>-</td>
<td>
<b>On</b>
</td>
</tr>
<tr>
<td>LVTS</td>
<td>-</td>
<td>
<b>On</b>
</td>
</tr>
<tr>
<td>RDMS</td>
<td>-</td>
<td>
<b>On</b>
</td>
</tr>
</tbody></table>
<table cellspacing="1" cellpadding="1" border="1" width="90%" bgcolor="Silver" align="center">
<tbody><tr>
<td colspan="3">
<b>Amos Status
<a href="test">Show details</a>
</b>
</td>
</tr>
<tr>
<th>Flow</th>
<th>Last Processed Message</th>
<th>Status</th>
</tr>
<tr>
<td>Loopback</td>
<td>-</td>
<td>
<b>On</b>
</td>
</tr>
<tr>
<td>SWIFT</td>
<td>21-02-14 08:28:04</td>
<td>
<b>On</b>
</td>
</tr>
<tr>
<td>CDSX</td>
<td>-</td>
<td>
<b>On</b>
</td>
</tr>
<tr>
<td>LVTS</td>
<td>-</td>
<td>
<b>On</b>
</td>
</tr>
<tr>
<td>RDMS</td>
<td>-</td>
<td>
<b>On</b>
</td>
</tr>
</tbody></table>
我需要从 td 标签中获取值。以下一行适用于第一个标签,例如对于 Swift 我能够检索 "-" 的值,现在我想从第二个 SWIFT td 标签(日期)中获取值,但我得到了一个否这样的元素异常消息。
WebElement getData = driver.findElement(
By.xpath("//tr[td='SWIFT'][1]/td[2]"));
WebElement getData1 = driver.findElement(
By.xpath("//tr//td[contains(text(),'SWIFT')]/following-sibling::td[2]"));
上面两个语句给了我一个正确的“-”值,但是一旦我将它更改为以下,为了获取日期值,我得到一个没有此类元素异常错误。
WebElement getData = driver.findElement(
By.xpath("//tr[td='SWIFT'][2]/td[2]"));
WebElement getData1 = driver.findElement(
By.xpath("//tr//td[contains(text(),'SWIFT')][2]/following-sibling::td[2]"));
解决方案
通过使用以下语句解决了它。
By.xpath("//td[contains(text(), 'SWIFT')]/following-sibling::td")
使用以下方法将 Swift 的后续兄弟的所有值保存在一个数组中。
List<WebElement> getNextRowData = _getDriver()
.findElements(By.xpath("//td[contains(text(), 'SWIFT')]/following-sibling::td"));
List<String> depths = new ArrayList<>();
for (WebElement rowData : getNextRowData) {
depths.add(rowData.getText());
}
推荐阅读
- python - Kivy 将数据从一个屏幕传递到另一个屏幕并直接传递到另一个类
- javascript - 使用引导程序将输入重点放在按钮单击上
- nvd3.js - 默认情况下取消选择nvd3图表上的线条时如何删除复选标记
- javascript - 如何将默认值设置为元素,用 Cleave.js 格式化?
- python - PermissionError:[Errno 13] 权限被拒绝:PosixPath('...')
- r - 将数据合并在一起并无意中从 R 中的数据集中丢失行
- html - 将阴影应用于滚动条拇指
- sql - Oracle 将行转为列
- c# - 在 C# 中反序列化具有不同类型名称的 XML 元素
- javascript - JavaScript, ES6 导入自