html - 如何为最近的祖先提供 XPath?
问题描述
免责声明:我知道这个问题非常类似于XPath 来查找包含具有特定值属性的元素的最近祖先元素。不幸的是,我不太明白如何选择最近/最近的祖先?
这是我的场景。我正在为显示多个数据“表”的网页构建自动化测试。每个“表”都需要通过其<label>
内容而不是id
“表”上的正常属性来识别(这种id
情况不存在)。
这张图片说明了我正在使用的结构(来自 chrome 浏览器窗口的快照):
这是相应伪 html 的要点:
<root>
...
<div class="gridBox"> <!-- 1 -->
<div class="gridBox"> <!-- 2 -->
<div class="gridBox"> ... </div>
<div class="gridBox">
<label>In Progress and Rejected</label> <!-- I want to start here -->
</div>
<div class="gridBox">
<div class="gridBox">
<div class="table"> <!-- I want to identify this element -->
<div class="row">
<div class="header">
<div class="column">...</div>
</div>
...
</div>
<div class="row">
<div class="cell">Value 1</div>
<div class="cell">Value 2</div>
...
</div>
</div>
</div>
</div>
</div>
<div class="gridBox">
...
<div class="gridBox">
<label>Await approval</label>
</div>
...
</div>
<div class="gridBox">
...
<div class="gridBox">
<label>Approved</label>
</div>
...
</div>
</div>
...
<root>
方法
我想<label>In Progress and Rejected</label>
成为起点。接下来我要做的就是爬上这个祖先节点:<div class="gridBox"> <!-- 2 -->
. 最后,我想找到包含的后代子节点<div class="table">
。一个简单的任务?
问题
如何识别<div class="gridBox"> <!-- 2 -->
从//label[contains(.,"In Progress and Rejected") ]/ancestor::div
?
解决方案
我会使用following::
轴而不是ancestor::
轴。
这个 XPath,
//label[normalize-space()="In Progress and Rejected"]
/following::div[@class="table"][1]
选择其空间标准化字符串值等于目标文本的<div class="table">
之后的第一个元素。label
推荐阅读
- animation - 如果从 defs 链接,SVG SMIL 动画在 Firefox 中不起作用
- data-science - 通过原点的线性回归
- php - Laravel 5.7:参数 1 传递给
- c# - 计划和取消任务列表
- perl - 在打开一个新的之前检查数据库连接
- cmake - 如何将 LLVM clang++ 命令行转换为 cmake 配置?
- excel - 如何从Excel中的特定行开始进行摘要
- node.js - 尽管所有尝试忽略它,Atom 仍然显示 node_modules 文件夹
- excel - Excel 2016 VBA 从工作表复制图片并自动调整到另一工作表的文本框中
- tesseract - Tess4j 在特定位置搜索图像中的文本