【问题标题】:Which is the best and fastest way to find the element using webdriver? By.XPath or By.ID or anything else? And why? [closed]使用 webdriver 查找元素的最佳和最快方法是什么? By.XPath 或 By.ID 还是其他?为什么? [关闭]
【发布时间】:2016-07-22 21:12:56
【问题描述】:

使用 webdriver 查找元素的最佳和最快方法是什么? By.XPath 或 By.ID 还是其他?为什么?

我在很多地方都读到 XPath 是合适的候选者,但找不到准确的理由。

【问题讨论】:

    标签: selenium webdriver


    【解决方案1】:

    通过 ID 查找元素通常是最快的选择,因为从根本上讲,它最终会调用到 document.getElementById(),这已被许多浏览器优化。

    通过 XPath 查找元素对于使用非常复杂的选择器查找元素很有用,并且是最灵活的选择策略,但它可能会非常慢,尤其是在 IE 中。在 IE 6、7 或 8 中,通过 XPath 查找可能比在 Firefox 中查找要慢一个数量级。 IE 没有提供原生 XPath-over-HTML 解决方案,因此项目必须使用 JavaScript XPath 实现,而旧版 IE 中的 JavaScript 引擎确实慢得多。

    如果您需要使用复杂的选择器查找元素,我通常建议尽可能使用 CSS 选择器。它不如 XPath 灵活,但可以涵盖许多相同的情况,而不会像 XPath 那样在 IE 上表现出极端的性能损失。

    【讨论】:

    • 有趣。我不知道 CSS 选择器比 IE 上的 XPath 更快(众所周知,IE 上的 XPath 很糟糕)。你能引用一些参考资料吗?我有兴趣进一步了解这一点。这个观察是 IE 特有的吗?
    • 这不是特定于 IE 的,浏览器通常非常快地解析 CSS 选择器以便能够相应地设置 HTML 样式。
    • By.id("brandlogo")By.xpath("//*[@id='brandLogo']"),哪个快。两个都是直接找id='brandlogo'
    • @AshwinPrabhu 在 Unmesh Gundecha(2012 版)的“Selenium Testing Tools Cookbook”一书中,它指出 css 选择器通常比 xpath 快,因为 xpath 选择器是双向的,这意味着它们可以找到父级基于子级,而 css 选择器不能。
    • @MentallyRecursive 谢谢!
    【解决方案2】:

    显然By.id()By.xpath() 更快,因为By.id() 可以快速访问。但是,在By.xpath(),遍历是需要时间的。

    结论:By.id()By.xpath() 更快

    【讨论】:

    • 你能确认一下 By.id() 和 By.cssSelector() 中哪个是最快的吗?
    【解决方案3】:

    使用 By.id() 显然更快,但您也可以使用 By.name(),它也具有与 By.id() 相同的速度。并且 cssSelector 也使用 id, name 所以它等同于搜索 By.id() 和 By.name() 。使用 xpath 的主要原因是,每个 web 元素都有唯一的路径分配给它,所以当两个元素共享相同的 id、name 和 classname 时,xpath 是选项,作为唯一的解决方案。

    【讨论】:

    • 两个元素不能有相同的ID。
    • 实际上两个或多个元素可以具有相同的 id,但从 html-spec 的角度来看,它是无效的,因此不会通过 w3c 验证。
    猜你喜欢
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2012-01-28
    • 1970-01-01
    • 2020-01-17
    相关资源
    最近更新 更多