XPath无法排除hidden类型input元素,该如何修复?
修复你的XPath定位问题
首先咱们来拆解下原XPath失效的原因:
你写的XPath是从input的属性节点入手,判断属性值是否包含指定关键词且不包含"hidden",再取父元素。但第一个隐藏input的value属性值是error.password.invalid——里面包含了"password",且这个属性值本身不含"hidden",所以它的父元素(也就是那个隐藏input)被错误匹配到了。
正确的思路应该是先直接排除所有type="hidden"的input元素,再筛选符合属性关键词条件的元素。试试这两个方案:
方案一:通用匹配(保留你的关键词判断逻辑)
.//input[not(@type='hidden') and (@*[contains(., "otp") or contains(., "ode") or contains(., "assword") or contains(., "numeric")])]
方案二:精准匹配(结合目标元素的inputmode="numeric"特征)
如果你的目标元素固定带有inputmode="numeric"属性,也可以直接写得更简洁:
.//input[not(@type='hidden') and @inputmode='numeric']
这两种写法都会精准选中你需要的第二个input元素,不会再匹配到隐藏的那个了。
内容的提问来源于stack exchange,提问作者Ivan Yakushenko
相关产品推荐
相关产品推荐

