使用XPath为Selenium WebDriver定位元素时为何返回两个相同元素?
UI测试元素定位重复匹配的问题与解决办法
我一直有个疑问,之前没深究过。做UI测试映射元素时,偶尔会遇到定位表达式返回两个完全相同的元素的情况。
之前的解决办法是用find_elements然后取索引[1]来定位,但我始终搞不懂——明明页面上只能看到一个目标元素,为什么会匹配到两个?
举个例子,就拿用户名输入框来说,我用XPath表达式:
//input[@name='username']
原本预期只会返回一个元素,但用Chropath工具能看到实际匹配出了两个元素。这两个元素看起来完全一样,也没有隐藏,但用find_element定位时会报元素不可交互的错误,推测是驱动没法确定该用哪一个,或者元素之间存在遮挡。
之前一直用的代码是:
return self.browser.find_elements(by=By.XPATH, value="//input[@name='username']")[1]
理论上我应该可以直接用:
return self.browser.find_element(by=By.XPATH, value="//input[@name='username']")
这到底是为什么?
经过分析,我现在搞清楚了问题根源,改用以下代码来定位:
for e in self.browser.find_elements(by=By.XPATH, value="//input[@name='username']"): if e.is_displayed(): return e
这个方法目前对我来说有效。
内容的提问来源于stack exchange,提问作者Brian Mitchell
相关产品推荐
相关产品推荐

