如何在Selenium中匹配属性名前缀为_ngcontent-且后缀为-63的元素以提取目标td?
如何在Selenium中匹配属性名前缀为_ngcontent-且后缀为-63的元素以提取目标td?
你遇到的这个问题在Angular应用里挺常见的——框架自动生成的_ngcontent-xxx-xx这类属性,中间的随机字符确实会给元素定位添不少麻烦。你之前的XPath思路方向是对的,但确实搞错了匹配对象:你需要匹配的是属性名的前缀和后缀,而不是属性值,所以之前的写法自然匹配不到。
给你两个可行的解决方案:
方案一:匹配符合规则的属性名
用XPath遍历元素的所有属性,判断属性名是否满足前缀为_ngcontent-、后缀为-63的规则,对应的代码如下:
By.xpath("//td[@*[starts-with(name(), '_ngcontent-') and ends-with(name(), '-63')]]");
这里的逻辑拆解一下:
//td:先筛选出页面上所有的td元素@*:遍历当前td元素的所有属性starts-with(name(), '_ngcontent-'):检查属性名是否以_ngcontent-开头ends-with(name(), '-63'):同时检查属性名是否以-63结尾- 整个表达式的作用就是:找到所有拥有符合该属性名规则的td元素
方案二:基于业务标识定位(更推荐)
其实依赖Angular生成的这类框架属性并不是最佳实践,因为它们会随着构建版本、组件结构变化而改变。如果你的目标td有固定的业务特征(比如文本内容、自定义class),直接用这些特征定位会更稳定:
- 定位包含文本
1的目标td:
By.xpath("//td[span/text()='1']");
- 定位包含
CKH HOLDINGS且子元素span带有noBr类的td:
By.xpath("//td[span[@class='noBr' and text()='CKH HOLDINGS']]");
备注:内容来源于stack exchange,提问作者pebble unit
相关产品推荐
相关产品推荐

