使用Selenium WebDriver查找任何给定元素的下一个兄弟

我正在尝试创建一个给定WebElement查找并返回下一个元素的方法。 我已经找到了很多关于使用带有“follow”或“follow-sibling”的XPath应该工作的例子,但是我无法让它工作。 为了这个问题的目的,我将展示html,但是元素类型与我需要的东西无关,因为我想要一个给定任何类型的任何元素的通用方法(a / ul / div / whatever)它将返回下一个兄弟姐妹,不论其类型。

"My Label" 
  • ...
  • ...

我的错误调试代码:

 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()做的事情

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

在xpath中你不需要双斜杠,这实际上意味着当前上下文的任何后代(这不是你想要的)。 您可以通过不执行任何操作来指定当前上下文

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

我看到的最好的,也可能是唯一的解决方案是使用我在问题末尾提到的javascript( element.nextSibling; )。 我甚至从未考虑过我可以使用IJavaScriptExecutor返回IWebElement直到找到它: https : IWebElement

同样,我不想提供关于兄弟姐妹的任何信息,例如它是什么类型或类或任何东西。 js nextSibling正是我想要的。