2016-04-21 89 views
0

我有这样的结构:查找元素的硒兄弟姐妹的webdriver

<div> 
    <div> 
     <span class="">TextA</span> 
    </div> 
    <div> 
     <span class="">TextB</span> 
    </div> 
</div> 

我能找到TEXTA元素跨度,并从那里,我想找到TEXTB跨度,然后点击它(这是不能单独找到它)。所以我用这样的xpath:

webDriver.findElement(By.xpath("//span[contains(.,'TextA')]/following-sibling::span")).click(); 

我收到了异常元素未找到。我认为这些跨度是兄弟姐妹?!任何人都可以在这种情况下帮助我。谢谢

回答

0

<span>的不是兄弟姐妹。如果<span>是兄弟姐妹,他们必须相邻。

例如:

<div> 
    <div> 
     <span class="">TextA</span> 
     <span class="">TextB</span> 
    </div> 
</div> 

在这种情况下,他们是兄弟,你的选择会工作。

实际上是兄弟姐妹的元素是<div> s。

,可以为你工作中的XPath,将是:

//span[contains(.,'TextA')]/../following-sibling::div/span 
+0

我试过你的建议,但我仍然有异常:无法找到元素... – Ragnarsson

0

我有例外元素是找不到的。我认为这些跨度是兄弟姐妹?

这两个跨度不是同级 - 他们是不同元素的孩子,不能兄弟姐妹。

相反的following-sibling,您可以使用following轴:

//span[contains(.,'TextA')]/following::span 

或者,你可能会得到一个包含spanTextA文本,然后div元素得到它的下面的兄弟:

//div[contains(span, 'TextA')]/following-sibling::div/span 
+0

我试过你的建议,但我仍然得到异常:无法找到元素... – Ragnarsson

+0

@LouisT好吧,那么还有一些我们错过了。这个元素是否在iframe中? – alecxe

+0

它不在iframe中,只是纯粹的HTML和很多div标签。尽管我没有使用xpath,但是我做了一个解决方法,它完成了这项工作。但是,当然,我想知道为什么它不适用于xpath和后续兄弟。谢谢你的帮助。 – Ragnarsson