这不是一个编码问题,而是一个关于我接下来应该选择哪些选项的问题。我大约一个星期前刚刚开始使用硒,并开始掌握其大部分功能。
我正在开展一个工作项目以登录各种网站,直到我遇到一个问题,当我试图找到密码字段时出现此错误
线程中的异常" main" org.openqa.selenium.ElementNotVisibleException:元素不可见
我继续前进并仔细检查了名称& id,但我无法使用.id,name和xpath等定位器找到该字段。我用Firebug检查了xpath,发现它返回了两个结果,而不是一个。
当前Xpath
看起来像这样
.//*[@id='password']
我想知道在处理类似的事情时是否有人能指出我的正确方向。
答案 0 :(得分:1)
在这种情况下,您需要使用另一个与您要查找的元素连接的唯一DOM元素(父元素,祖先元素,兄弟元素,子元素)。例如,在那些html代码段中
<div id='a'>
<div id='password'></div>
</div>
和
<div id='b'>
<div id='password'></div>
</div>
.//*[@id='password']
将有两个结果
然而
.//*[@id='b']/[@id='password']
只有一个结果
答案 1 :(得分:1)
通常情况下,id
属性应该是唯一值,但在某些情况下,前端开发人员只是隐藏DOM
的一部分,创建类似内容并忘记删除隐藏的内容。
在这种情况下,您可以(如果可能)要求开发人员摆脱冗余代码或使用索引
"(.//*[@id='password'])[2]"
答案 2 :(得分:0)
让我尝试逐一回答您的问题:
error when I tried to find the password field
:这是因为您提到的id / name / css / xpath属性不正确。
ElementNotVisibleException
:我怀疑它是否适用于password_field。这背后的原因是,通常是登录字段&amp;密码字段保留在同一容器中。这些都驻留在HTML DOM上(一旦页面加载完成就会完全加载),或者它们可能位于frame / iFrame中(还有其他措施来处理它们,我没有在这里讨论)。但这两个元素保留在同一个容器中。因此,如果您找到了login_field元素,则password_field只需一步之遥。
inspected the xpath with Firebug and noticed that it returned two results
:这是因为您使用的xpath不识别唯一元素。 HTML DOM上可以有多个元素,并将相同的id
属性设置为“password”。但是,这些元素的xpath
肯定会有所不同和独特。
你应该怎么做?
我会建议你:
一个。尝试按顺序依据属性识别网页上的每个元素:id,name,visibleText,css,xpath。
湾尝试使用HTML标记中定义的元素的其他属性为元素标识唯一的逻辑 xpath。通过Firebug / Firepath交叉检查你的xpath。还有一些其他方便的xpath检查器。借此帮助。
如果这回答了你的问题,请告诉我。