Selenium:我有一个网页,其中两个元素具有相同的Xpath,甚至索引也没有将它们分开

时间:2018-02-01 17:56:10

标签: javascript html selenium xpath

当索引为[1]时,它们都被识别,而索引[2]则无法识别。唯一区分它们的是第一个弹出窗口显示:none,另一个弹出窗口显示:block,但它们在决定这个特定字段时没有玩,因为Xpath,因为这些字段是从某个不同的源获取的,唉,即使这些div具有相同的元素,它们也有一个文档属性,因此,这些div的Xpath不是从这个div开始,而是在文档的一部分之后。我尽我所能地绞尽脑汁,我可以让你模糊地了解下面代码的样子。

感谢任何帮助。请不要忘记/说它是重复的,我找不到解决方案,因为我几乎搜索了硒的一角。

代码如下:

<div name='some-name' style="display:none;">
  ...
  <!document>
  <div id='some-id'>
    ....
    <button name='some-name-2'>some-button-name</button>
    ....
  </div>
  ...
</div>
<div name='some-name' style="display:block;">
  ...
  <!document>
  <div is='some-id'>
    ....
    <button name='some-name-2'>some-button-name</button>
    ....
  </div>
  ...
</div>

所以他们的Xpath看起来像: [ID =&#39;一些-ID&#39;] /...../按钮

给予([id =&#39; some-id&#39;] /...../按钮)[1]获取这两个元素。

给予([id =&#39; some-id&#39;] /...../按钮)[2]不提取任何内容。

我很难解决这个问题。 [编辑]:在这种情况下我有两个iframe,因为我不得不在它们之间切换,所以没有被检测到。谢谢,我修好了。

2 个答案:

答案 0 :(得分:0)

您的Xpath读取方式是找到id='some-id'的元素,然后找到其中的第一个或第二个按钮。如果您更改它以便[1][2]放在[id='some-id']之后而不是在路径末尾,您可以选择查找第一个或第二个[id='some-id'],然后是该元素中的按钮。

答案 1 :(得分:0)

除非这两个元素实际上是一个元素,否则将始终存在选择一个而不是另一个的XPath表达式。实际上,存在无数个这样的表达式。诀窍在于找到一个好的XPath表达式,这取决于页面内容的修复程度,以及变量的多少(如果数据完全修复,那么你甚至不需要读取它,因为你已经了解它的一切。)

我认为您推断下标[1]和[2]不起作用是不正确的。了解您实际使用的表达方式会很有用,因为您在帖子中写了什么:

([id='some-id']/...../button)[1]

根本不是有效的XPath表达式。