Selenium中如何基于特定子元素条件定位同级tr下的a标签
结论先行
该需求无法通过CSS选择器实现,但可以通过XPath实现。
原因说明
1. CSS选择器为什么做不到
CSS目前没有提供基于元素内部文本筛选的选择器,也不支持向上查找父节点、向前查找前置同级节点的能力,你要满足的两个核心条件CSS都不支持:
- 无法通过
span的文本内容MySpan2定位到对应的tr - 无法从找到的
tr,再选中它后面的同级tr里的后代a元素
注:CSS Level 4新增的
:has()选择器目前支持部分父级/前置关系查询,但依然没有内置文本匹配的能力,所以还是无法实现基于文本内容的筛选逻辑。
2. XPath的实现方案
可以直接用如下XPath表达式定位目标元素:
//tr[td/span/text()='MySpan2']/following-sibling::tr[1]//a[@title='my_title2']
表达式拆解:
//tr[td/span/text()='MySpan2']:先找到内部td下的span文本等于MySpan2的tr节点/following-sibling::tr[1]:找到上述tr节点后面紧邻的第一个同级tr节点//a[@title='my_title2']:在这个相邻tr的后代节点里,找到title属性等于my_title2的a元素
内容的提问来源于stack exchange,提问作者Viorel Casapu
相关产品推荐
相关产品推荐

