You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:06:26