XPath ends-with表达式失效求助:starts-with可用但ends-with无法工作
为什么XPath的ends-with()无法定位目标元素?
你的问题核心原因大概率是XPath版本兼容性:
starts-with()是XPath 1.0就支持的内置函数,而ends-with()是XPath 2.0及以上才新增的语法。很多自动化测试工具(比如Selenium默认使用的XPath引擎)只支持XPath 1.0,直接用ends-with()会因为语法不被识别而失效。
如果只能用XPath 1.0,你可以用字符串截取的方式模拟结尾匹配,针对目标元素的写法如下:
//div[substring(@id, string-length(@id) - string-length('listbox') + 1) = 'listbox']
原理是通过string-length()计算id属性和目标字符串的长度,截取id属性最后与目标字符串长度一致的部分,再和listbox做等值对比,实现和ends-with()相同的效果。
另外可以额外确认:页面中是否存在其他id以listbox结尾的div元素,避免定位到非目标元素,但这不是ends-with()失效的直接原因。
内容的提问来源于stack exchange,提问作者Karol Odwald
相关产品推荐
相关产品推荐

