【问题标题】:Find next sibling of any given element with Selenium WebDriver使用 Selenium WebDriver 查找任何给定元素的下一个兄弟
【发布时间】:2017-06-02 02:01:19
【问题描述】:

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

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

【问题讨论】:

    标签: c# selenium selenium-webdriver


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我通常不使用xpath。这让我克服了问题的第一部分。
    • 即使您失败了也在这里发布您的解决方案,以便我们帮助您解决这个问题。 :)
    • 完美~!谢谢,它帮助了我。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我看到的最好的,可能也是唯一的解决方案是只使用我在问题末尾提到的 javascript (element.nextSibling;)。我什至从未考虑过我可以使用IJavaScriptExecutor 来返回IWebElement,直到我发现:https://stackoverflow.com/a/11320472/2246511

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

      【讨论】:

        【解决方案4】:

        如果您使用 label,请使用“for”链接来输入“id”。 所以,你可以试试这个:

        string nextElementId = driver.FindElement(By.Id("blah")).GetAttribute("for");
        IWebElement nextElement = driver.FindElement(By.Id(nextElementId));
        

        【讨论】:

          猜你喜欢
          • 2016-08-14
          • 1970-01-01
          • 2014-07-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-15
          • 1970-01-01
          • 2015-08-05
          相关资源
          最近更新 更多