当前位置: 首页 > 面试题库 >

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

吕承望
2023-03-14
问题内容

我有一个By类的变量。我希望调用FindElements以返回相应的元素以及this的所有父元素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代码段,然后一次返回所有元素。



 类似资料:
  • 问题内容: python + selenium是否有任何方法可以找到父元素,兄弟元素或子元素,就像 或 或 ? 例如: 我已经尝试过如下操作,但是失败了: 如何 获取输入元素的父级, 然后最终 选择选项 ? 问题答案: 您可以使用xpath 找到一个父元素: 为获得选择的选项制作一个单独的xpath怎么样,像这样:

  • 我试图找到一种方法来获取div的值,但是我无法通过Xpath或CSSSelector找到元素。在这两种情况下(Xpath和cssSelector),Eclipse控制台都会显示错误消息: org.openqa.selenium.nosuchelementException:没有这样的元素:找不到元素:{“method”:“XPath”,“selector”:“//b[text()='protoco

  • 问题内容: 在Python Selenium模块中,一旦有了对象,我可以使用以下命令获取其任何属性的值: 如果命名的属性不存在,则返回。 我的问题是,如何获取元素具有的所有属性的列表?似乎没有或方法。 我正在为Python使用Selenium模块的2.44.0版本。 问题答案: 这是 不可能的 使用硒webdriver的API,但你可以_执行JavaScript代码_来获取所有属性: 演示: 为了

  • 问题内容: 有一个具有子元素的元素,那些子元素又具有子元素,依此类推。我想获取所有作为该元素后代的元素。谢谢。 问题答案: 试试这个: (Java) (C#)

  • 问题内容: 我需要在我的xpath表达式中使用撇号(’),这需要使用webdriver查找元素 我需要使用下面的Xpath表达式 在查找元素功能中使用上述表达式时,我用单引号替换了双引号 问题答案: 使用如下所示的xpath: 希望这可以帮助。

  • 问题内容: 我有3个div。 像这样: 他们将充满文字。我不确定多少。问题是,所有高度都必须相等。 我如何使用jQuery(或CSS)查找DIV最高的并将其他两个设置为相同的高度,从而创建3个相等高度的DIV。 这可能吗? 问题答案: 您不能轻松地通过高度选择或在CSS中进行比较,但是jQuery和一些迭代应该可以轻松解决此问题。我们将遍历每个元素并跟踪最高的元素,然后再次遍历并将每个元素的高度设