【发布时间】:2016-07-22 21:12:56
【问题描述】:
使用 webdriver 查找元素的最佳和最快方法是什么? By.XPath 或 By.ID 还是其他?为什么?
我在很多地方都读到 XPath 是合适的候选者,但找不到准确的理由。
【问题讨论】:
使用 webdriver 查找元素的最佳和最快方法是什么? By.XPath 或 By.ID 还是其他?为什么?
我在很多地方都读到 XPath 是合适的候选者,但找不到准确的理由。
【问题讨论】:
通过 ID 查找元素通常是最快的选择,因为从根本上讲,它最终会调用到 document.getElementById(),这已被许多浏览器优化。
通过 XPath 查找元素对于使用非常复杂的选择器查找元素很有用,并且是最灵活的选择策略,但它可能会非常慢,尤其是在 IE 中。在 IE 6、7 或 8 中,通过 XPath 查找可能比在 Firefox 中查找要慢一个数量级。 IE 没有提供原生 XPath-over-HTML 解决方案,因此项目必须使用 JavaScript XPath 实现,而旧版 IE 中的 JavaScript 引擎确实慢得多。
如果您需要使用复杂的选择器查找元素,我通常建议尽可能使用 CSS 选择器。它不如 XPath 灵活,但可以涵盖许多相同的情况,而不会像 XPath 那样在 IE 上表现出极端的性能损失。
【讨论】:
By.id("brandlogo") 或 By.xpath("//*[@id='brandLogo']"),哪个快。两个都是直接找id='brandlogo'
显然By.id() 比By.xpath() 更快,因为By.id() 可以快速访问。但是,在By.xpath(),遍历是需要时间的。
结论:By.id() 比 By.xpath() 更快
【讨论】:
使用 By.id() 显然更快,但您也可以使用 By.name(),它也具有与 By.id() 相同的速度。并且 cssSelector 也使用 id, name 所以它等同于搜索 By.id() 和 By.name() 。使用 xpath 的主要原因是,每个 web 元素都有唯一的路径分配给它,所以当两个元素共享相同的 id、name 和 classname 时,xpath 是选项,作为唯一的解决方案。
【讨论】: