Selenium中含软连字符的XPath文本定位失效,求适配方案
解决软连字符导致的XPath定位问题
你可以试试以下几种调整后的XPath语句,解决软连字符(U+00AD)干扰文本匹配的问题:
方案1:用Unicode编码匹配软连字符(支持XPath 2.0的环境)
利用codepoints-to-string函数将软连字符的Unicode编码(173)转为字符,再通过translate移除:
/div[contains(translate(string(.), codepoints-to-string(173), ""), "Inverter")]
这里用string(.)代替text(),是为了获取节点下所有文本内容(包括子节点中的文本),避免因文本拆分在多个子节点导致匹配失败。
方案2:直接使用软连字符原生字符
如果你的环境不支持XPath 2.0函数,可以直接复制目标文本中的软连字符,放到translate的替换参数里:
/div[contains(translate(string(.), "", ""), "Inverter")]
(注:第二个参数里的字符是软连字符,不是普通减号)
方案3:匹配所有连字符类字符(XPath 2.0+)
如果存在多种连字符变体,可利用正则匹配所有连字符类字符:
/div[contains(replace(string(.), "\p{Pd}", ""), "Inverter")]
为什么之前的写法无效?
"\u00AD":XPath 1.0不支持这种Unicode转义写法,无法识别为软连字符"­":这是HTML实体,DOM解析后已转为软连字符原生字符,XPath中无法通过实体字符串匹配"-":普通减号和软连字符是不同的Unicode字符,替换无效
内容的提问来源于stack exchange,提问作者Lagencie
相关产品推荐
相关产品推荐

