如何使用Selenium C#WebDriver查找所有父元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Selenium C#WebDriver查找所有父元素?相关的知识,希望对你有一定的参考价值。

我有一个By类的变量。我希望调用FindElements返回相应的元素以及此By的所有父元素。我该怎么做呢?

答案

如果我正确理解你的问题,你想找到By元素,然后父母直到根。

您可以使用XPath获取父元素,直到到达页面根目录。所以像这样:

public ReadOnlyCollection<IWebElement> FindElementTree(By by)
{
    List<IWebElement> tree = new List<IWebElement>();

    try
    {
        IWebElement element = this.driver.FindElement(by);
        tree.Add(element); //starting element

        do
        {
            element = element.FindElement(By.XPath("./parent::*")); //parent relative to current element
            tree.Add(element);

        } while (element.TagName != "html");
    }
    catch (NoSuchElementException)
    {
    }

    return new ReadOnlyCollection<IWebElement>(tree);
}

您可以选择停在body元素而不是html元素。

另请注意,这是相当慢的,特别是如果它是一个深层嵌套的元素。更快的替代方法是使用ExecuteScript运行使用相同逻辑的javascript片段,然后立即返回所有元素。

另一答案

我创建了WebElement扩展,希望对你有用。

public static IWebElement GetElementParentByClass(this IWebElement element, string ClassName)
{
    try
    {
        IWebElement parent = element;
        do
        {
            parent = parent.FindElement(By.XPath("./parent::*")); //parent relative to current element

        } while (!parent.GetAttribute("class").Equals(ClassName));

        return parent;
    }
    catch (Exception ex)
    {
        return null;
    }
}

以上是关于如何使用Selenium C#WebDriver查找所有父元素?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何使用Selenium Webdriver C#从URL获取特定值?

如何使用selenium从WebDriver获取cookie值?

如何使用 Selenium WebDriver 处理登录弹出窗口?

如何使用 Selenium WebDriver 获取 Inspect Element 代码

Python Selenium.WebDriver 浏览器启动参数设置『Edge如何使用启动参数』

如何在 Selenium Webdriver Python 3 中使用 Chrome 配置文件