检索具有多个xpath的元素

时间:2017-03-30 04:23:16

标签: selenium xpath selenium-webdriver

这不是一个编码问题,而是一个关于我接下来应该选择哪些选项的问题。我大约一个星期前刚刚开始使用硒,并开始掌握其大部分功能。

我正在开展一个工作项目以登录各种网站,直到我遇到一个问题,当我试图找到密码字段时出现此错误

  

线程中的异常" main" org.openqa.selenium.ElementNotVisibleException:元素不可见

我继续前进并仔细检查了名称& id,但我无法使用.id,name和xpath等定位器找到该字段。我用Firebug检查了xpath,发现它返回了两个结果,而不是一个。

当前Xpath看起来像这样

.//*[@id='password']

我想知道在处理类似的事情时是否有人能指出我的正确方向。

3 个答案:

答案 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)

让我尝试逐一回答您的问题:

  1. error when I tried to find the password field:这是因为您提到的id / name / css / xpath属性不正确。

  2. ElementNotVisibleException:我怀疑它是否适用于password_field。这背后的原因是,通常是登录字段&amp;密码字段保留在同一容器中。这些都驻留在HTML DOM上(一旦页面加载完成就会完全加载),或者它们可能位于frame / iFrame中(还有其他措施来处理它们,我没有在这里讨论)。但这两个元素保留在同一个容器中。因此,如果您找到了login_field元素,则password_field只需一步之遥。

  3. inspected the xpath with Firebug and noticed that it returned two results:这是因为您使用的xpath不识别唯一元素。 HTML DOM上可以有多个元素,并将相同的id属性设置为“password”。但是,这些元素的xpath肯定会有所不同和独特。

  4. 你应该怎么做?

    我会建议你:

    一个。尝试按顺序依据属性识别网页上的每个元素:id,name,visibleText,css,xpath。

    湾尝试使用HTML标记中定义的元素的其他属性为元素标识唯一的逻辑 xpath。通过Firebug / Firepath交叉检查你的xpath。还有一些其他方便的xpath检查器。借此帮助。

  5. 如果这回答了你的问题,请告诉我。