Selenium Java如何获取双引号包裹的第二个文本及XPath定位问题
失效根因
你最初写的XPath无法匹配的核心原因是:XPath 1.0中text()会返回当前节点下所有直接子文本节点的集合,而contains()函数接收第一个参数为节点集合时,只会取集合内第一个节点的字符串值做判断。你给出的div下第一个文本节点是 对应的空白内容,自然匹配不到第二个文本节点里的interface关键词。
推荐解决方案
方案1:全节点文本匹配(兼容性最高,最常用)
直接用当前节点的字符串值做匹配,会自动拼接当前节点下所有后代文本内容做判断,完全不用关心文本节点的数量和顺序:
//div[contains(., 'interface')]
如果需要完全匹配整个文本内容,还可以搭配normalize-space方法自动忽略前后多余的空白、换行、 :
//div[normalize-space(.) = 'Network interface updated successfully']
方案2:仅匹配直接子文本节点
如果你只想检查div的直接子文本节点,不包含后代嵌套节点的文本,可以明确指定遍历所有直接子文本节点做判断,只要任意一个符合条件就匹配,不会受文本节点顺序变化的影响,比你之前用索引硬编码的//div/text()[2]稳定性高很多:
//div[text()[contains(., 'interface')]]
内容的提问来源于stack exchange,提问作者deokyong song
相关产品推荐
相关产品推荐

