2017-01-17 57 views
2

我想创建一个给定WebElement的方法找到并返回下一个元素。我发现了很多使用XPath和“follow”或“after-sibling”工作的示例,但是我无法使其工作。为了这个问题的目的,我将显示html,但是元素类型与我所需要的无关,因为我想要一个给定任何类型元素(a/ul/div/whatever)的泛型方法,它将返回下一个无论何种类型的兄弟姐妹。查找任何给定元素的下一个同胞Selenium WebDriver

<a id="blah" href="#" class="stuff">"My Label"</a> 
<ul class="some-class"> 
    <li>...</li> 
    <li>...</li> 
</ul> 

我的车调试代码:

IWebElement element = driver.FindElement(By.Id("blah")); 
IWebElement nextElement = element.FindElement(By.XPath("//following-sibling::ul[@class='some-class']")); 

我怀疑我的XPath语法是错误的......,我坦率地无言以对。 “//”是指相对于元素还是DOM本身?有没有办法做到这一点,而不知道下一个元素的标签是什么?我只想得到下一个元素,不管它是什么类型。我只想找出最简单,最普通的方法来做到这一点。我想有:

public IWebElement NextSibling(IWebElement element) 
{ 
    IWebElement nextSibling = element.FindElement(By.?("magical string to find next sibling")); 
    return nextSibling; 
} 

...这正是你已经可以做到在JavaScript与element.nextSibling()

回答

3

在你的XPath与.//尝试,因为这是相对路径,您使用绝对路径所以它没有按照你的预期工作。

+0

谢谢!我通常不使用xpath。这让我度过了问题的第一部分。 – jibbs

+0

即使您失败了,您也可以在此发布解决方案,以便我们可以帮助您解决此问题。 :) – acikojevic

2

在xpath中,你不需要双斜杠,实际上它意味着当前上下文的任何后代(这不是你想要的)。你可以什么都不做,即

following-sibling::ul[@class='some-class'] 
1

最好指定当前背景下,可能只,解决方案,我看到的是只使用JavaScript(element.nextSibling;),因为我在我的问题的末尾提到。我从来没有想过,我可以用IJavaScriptExecutor返回一个IWebElement,直到我发现这一点:https://stackoverflow.com/a/11320472/2246511

同样,我不希望有提供关于喜欢什么类型它是同级或类或任何东西。 js nextSibling正是我想要的。

+0

这是一个很好的方法,对我来说效果很好。 –

相关问题