XPath 1.0中用contains(text())定位button失败,如何正确定位特定文本按钮
问题根源
你使用的//button[contains(text(),"Project Association")]无法生效,核心原因是XPath 1.0中text()会返回当前节点下的所有文本节点集合,而contains()仅会检查集合里的第一个文本节点。你的button元素下,第一个文本节点是<i>标签前后的空白内容,自然匹配不到目标文本。
有效定位表达式
以下几种方式均可正确定位目标button:
1. 标准化文本后匹配
normalize-space()会自动去除文本首尾空白,并将中间连续空白替换为单个空格,适配你的文本带换行、缩进的场景:
//button[contains(normalize-space(text()),"Project Association")]
若要精准匹配完整文本,可直接写:
//button[normalize-space(text())="Project Association"]
2. 匹配元素的全部文本内容
用string(.)获取button元素的所有文本内容(包含子节点文本),再标准化后匹配:
//button[contains(normalize-space(string(.)),"Project Association")]
3. 定位到目标文本节点再取父元素
直接找到包含目标文本的那个文本节点,再向上取父button元素:
//button/text()[contains(normalize-space(.),"Project Association")]/parent::button
额外优化方案
如果页面中button的图标有唯一标识(比如associate类),可以结合该属性定位,稳定性更强:
//button[i[@class="aui-svg associate"]]
内容的提问来源于stack exchange,提问作者xyzXyz
相关产品推荐
相关产品推荐

