【问题标题】:How to get all descendants of an element using webdriver?如何使用 webdriver 获取元素的所有后代?
【发布时间】:2012-12-12 16:58:05
【问题描述】:

有这个元素有子元素,那些子元素又有子元素等等。我想获取所有元素的后代元素。谢谢。

【问题讨论】:

    标签: java collections selenium webdriver


    【解决方案1】:

    试试这个:

    (Java)

    List<WebElement> childs = rootWebElement.findElements(By.xpath(".//*"));
    

    (C#)

    IReadOnlyList<IWebElement> childs = rootWebElement.FindElements(By.XPath(".//*"));
    

    【讨论】:

    • 有没有办法使用 CSS 实现同样的效果?
    • By.cssSelector("*") - 这应该与By.xpath(".//*") 的工作方式相同,但不能 100% 确定它不会搜索所有文档 (w3.org/TR/CSS2/selector.html)。为什么 XPath 解决方案不适合您?
    • 我正在使用的应用程序仅与 IE 兼容。使用 CSS 优于 XPath,因为与 IE 中的 CSS 相比,XPath 的执行速度较慢。
    • rootWebElementWebElement 类的一个实例。 WebElement 类实现了SearchContext 接口以及WebDriver 类。所以搜索是在某个特定元素内完成的,而不是在整个页面内。
    • 如果您只想要特定元素的顶级子元素,只需删除其中一个斜线:List&lt;WebElement&gt; topLevelChildren = rootWebElement.findElements(By.xpath("./*"));
    【解决方案2】:

    试试这个

    List<WebElement> allDescendantsChilds = rootWebElement.findElements(By.xpath("//tr[@class='parent']//*"));
    

    以上内容将为您提供 parent tr

    的所有后代子元素(不仅是直接子元素)

    【讨论】:

    • tr 到底在做什么?该元素不必是表格。
    • 例如我提到的像tr。在 tr 地方,你用具有 child > child 的父标签替换(例如:tr > td > div > input )在这种情况下它将给出 td,div,input 元素
    • 假设有一个表有 10 个 trs,每行有 10 个 tds,每个 td 有 10 个跨度。如果元素是表格,我期望得到的是 10trs、100tds 和 1000spans 但你的代码只给出 1tr 10tds 100 spans?
    • NO ..它会给出(我也验证过)所有 trs (10), tds (100) , spans (1000) 。 ................. 这种格式会给出..检查一下。
    • 好的,rootWebElement 持有哪个elmeent?它拥有父元素?我必须用父元素的第一个子元素替换 tr 吗?抱歉,我是 XPath 的新手,你能多解释一下你的代码吗?
    【解决方案3】:

    试试这个:

    List<WebElement> childs = rootWebElement.findElements(By.tagName(".//*"));
    

    【讨论】:

    • 这是第一个答案的副本。
    猜你喜欢
    • 2013-03-09
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 2013-05-22
    • 1970-01-01
    • 2012-05-11
    相关资源
    最近更新 更多