html - 如何正确使用 `XPath` 定位器,例如`parent`、`child`、following-sibling`?
问题描述
我有一些形式:
<div class="form_item--2c8WB">
<label>
<span class="label--2VxxL required--2nkmI">
"Text"
::after
</span>
<br>
<input type="password" name="newPasswordRepeat" autocomplete="new-password"
aria-invalid="true" aria-required="true"
aria-errormessage="vee_Text2">
</label>
<div class="errors--qVgtm">
<div>Text3</div>
</div>
</div>
我需要找到Text3
文本元素的路径,但正是通过input
部分:
我的方式:
//input[@name='newPasswordRepeat']/../../div/div
路径是有效的,但是还有很长的路要走,我想用这个follow-sibling
命令。但我不能那样做
例如,我正在尝试使用parent::
路径:
//input[@name='newPasswordRepeat']/parent::
//input[@name='newPasswordRepeat']::parent::
//input[@name='newPasswordRepeat']::parent
//input[@name='newPasswordRepeat']/parent
//input[@name='newPasswordRepeat']/::parent
此订单中没有人不工作,只有
//input[@name='newPasswordRepeat']/..
我也不能使用following-sibling
,但在这种情况下,另一种方式 ( ..
, .
) 不存在。
- 如何正确使用, , following-sibling`
XPath
等定位器?parent
child
解决方案
它总是axis::node_test
(比较我解释各种 XPath 术语的这个答案)。
例如
parent::div
如果它是 a则选择父节点<div>
(即节点测试)。ancestor::div
选择所有 (!) 为 s 的祖先节点<div>
。following-sibling::div
选择所有 (!) 以下是<div>
s 的兄弟姐妹。
大多数情况下,不能保证只选择一个节点。因此,还有一些[predicate]
缩小选择范围以防止误报的方法是明智的——例如,我们可以验证@class
属性。
//input[@name='newPasswordRepeat']/parent::label/following-sibling::div[starts-with(@class, 'errors')]/div
如果我们不关心父元素是什么类型的元素,当然parent::label
可以缩短为。..
推荐阅读
- linux - sed 交替打印两个不同的单词
- android - 我可以构建自己的 libEGL.so 吗?
- android - 从自定义布局更改在列表视图中调整的文本视图颜色
- c# - 如何将 LLDB 附加到 C# .NET 进程并调试动态加载的 macOS 包?
- sql - 是否可以从同一最近日期查询多条记录
- ruby-on-rails - redirect_to 内部控制器操作不起作用
- filter - 在 Kotlin 中使用命名过滤器扩展集合
- c# - 实体框架上下文中的条件 ORDER BY 子句
- java - 使用 Class.forName() 在包中找不到类
- encryption - Redis Enterprise 如何保护其节点之间的在途内部通信?