【问题标题】:In Selenium Webdriver which is better in terms of performance Linktext or css?在 Selenium Webdriver 中,Linktext 或 css 性能哪个更好?
【发布时间】:2016-12-07 13:26:36
【问题描述】:

Selenium 中,最好使用定位器ID 定位元素。

最小定位器是XPath(如果我错了,请纠正我)。

那么,一个人应该使用定位器来识别element是否有任何优先级或顺序?

【问题讨论】:

  • 查看 here 以更深入地了解 css 与 xpath 定位器。 “对于初学者来说,XPath 和 CSS 之间的性能没有显着差异”;)

标签: java selenium-webdriver selenium-ide


【解决方案1】:

以下是在 https://stackoverflow.com/questions 上定位元素的不同方法的小基准:

Chrome 52,驱动程序 2.22

15 ms for execute_script("return [].find.call(document.getElementsByTagName('a'), function(e){return e.textContent.trim() == 'Physics'});")
15 ms for find_element_by_css_selector("#footer-sites > table > tbody > tr:nth-child(2) > td:nth-child(7) > ol > li:nth-child(2) > a")
15 ms for find_element_by_css_selector("[title='go to page 2']")
15 ms for find_element_by_xpath("//*[@id='footer-sites']/table/tbody/tr[2]/td[7]/ol/li[3]/a")
16 ms for find_element_by_class_name("top-footer-links")
16 ms for find_element_by_css_selector("a[href$='math.stackexchange.com']")
16 ms for find_element_by_id("footer-sites")
16 ms for find_element_by_name("q")
16 ms for find_element_by_xpath("//a[text()='Ask Ubuntu']")
31 ms for find_element_by_xpath("//*[normalize-space(.)='Game Development']")
311 ms for find_element_by_link_text("Area 51")
343 ms for find_element_by_partial_link_text("Stack Apps")

Firefox 2.47,驱动程序 2.53.0

16 ms for find_element_by_class_name("top-footer-links")
16 ms for find_element_by_css_selector("#footer-sites > table > tbody > tr:nth-child(2) > td:nth-child(7) > ol > li:nth-child(2) > a")
16 ms for find_element_by_css_selector("a[href$='math.stackexchange.com']")
16 ms for find_element_by_id("footer-sites")
16 ms for find_element_by_name("q")
23 ms for execute_script("return [].find.call(document.getElementsByTagName('a'), function(e){return e.textContent.trim() == 'Physics'});")
23 ms for find_element_by_css_selector("[title='go to page 2']")
47 ms for find_element_by_xpath("//*[@id='footer-sites']/table/tbody/tr[2]/td[7]/ol/li[3]/a")
47 ms for find_element_by_xpath("//a[text()='Ask Ubuntu']")
62 ms for find_element_by_xpath("//*[normalize-space(.)='Game Development']")
1625 ms for find_element_by_link_text("Area 51")
1726 ms for find_element_by_partial_link_text("Stack Apps")

Internet Explorer 11,驱动程序 2.53.1

77 ms for find_element_by_name("q")
78 ms for execute_script("return [].find.call(document.getElementsByTagName('a'), function(e){return e.textContent.trim() == 'Physics'});")
78 ms for find_element_by_class_name("top-footer-links")
78 ms for find_element_by_id("footer-sites")
93 ms for find_element_by_xpath("//*[@id='footer-sites']/table/tbody/tr[2]/td[7]/ol/li[3]/a")
108 ms for find_element_by_xpath("//a[text()='Ask Ubuntu']")
109 ms for find_element_by_css_selector("#footer-sites > table > tbody > tr:nth-child(2) > td:nth-child(7) > ol > li:nth-child(2) > a")
125 ms for find_element_by_css_selector("[title='go to page 2']")
125 ms for find_element_by_css_selector("a[href$='math.stackexchange.com']")
140 ms for find_element_by_xpath("//*[normalize-space(.)='Game Development']")
801 ms for find_element_by_link_text("Area 51")
812 ms for find_element_by_partial_link_text("Stack Apps")

【讨论】:

  • 伟大的工作。我可以了解一些关于您编写​​的脚本的详细信息吗?谢谢
【解决方案2】:

我只是从this参考中写一些点,这些参考已经由GK27在cmets中提供,这里写的目的是为了清楚如果页面没有找到一段时间,用户可以从这里查看。

所以定位元素的更好方法,优先级应该在列表中 [id, name, linkText, partialLinkText, tagName, className, cssSelector, xpath] 这里列表中的第一个值 id 包含第一优先级,依此类推。

按 ID 定位元素:

在网页上定位元素的最有效方式和首选方式是 By IDID 将是网页上唯一可以轻松识别的。 ID 是最安全、最快的定位器选项,应该始终是首选

按名称定位元素:

当没有Id可以使用的时候,下一个值得一看的元素是否有name属性。但要确保那里的名称不能一直是唯一的。如果有多个名称,Selenium 将始终对第一个匹配的元素执行操作

通过 LinkText 定位元素:

查找带有链接文本的元素非常简单。但请确保网页上只有一个唯一链接。如果有多个链接具有相同的链接文本(例如重复的页眉和页脚菜单链接),在这种情况下,Selenium 将对第一个与链接匹配的元素执行操作。

通过部分链接文本定位元素:

LinkText一样,PartialLinkText也可以在相同的模式下工作,唯一的区别是它与部分文本的匹配链接意味着使用包含。

按标签名定位元素:

TagName 可以与 Group 元素一起使用,例如,选择和复选框/下拉列表。

按类名定位元素:

可能有多个具有相同类名的元素,如果我们只使用findElementByClassName,请确保它只有一个。如果不是,您需要使用classname 及其子元素进行扩展。

CSS 选择器:

CSS 主要用于为网页提供样式规则,我们可以使用 css 来识别网页中的一个或多个元素。 如果您开始使用 css 选择器来识别元素,与XPath 相比,您会喜欢它的速度。 我们可以使用 Css 选择器来确保脚本在 IE 浏览器中以相同的速度运行。 CSS 选择器始终是在页面中定位复杂元素的最佳方式。 如果您需要使用复杂的选择器查找元素,我通常建议尽可能使用 CSS 选择器。它不如 XPath 灵活,但可以涵盖许多相同的情况,而不会像 XPath 那样对 IE 表现出极端的性能损失。

XPath 选择器:

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

xpath 有两种类型

  1. Native Xpath,就像是直接引导 xpath 走。喜欢 例子: html/head/body/table/tr/td

这里指定本地路径的好处是,找到一个元素非常容易,因为我们提到了直接路径。但是如果路径有任何变化(如果添加/删除了某些东西),那么 xpath 就会中断。

  1. 相对 Xpath。 在相对 xpath 中,我们将提供相对路径,就像我们通过告诉 xpath 之间的路径来告诉 xpath 查找元素一样。 这里的优势是,如果 html 中有任何可以正常工作的更改,除非该特定路径已更改。查找地址将非常困难,因为它需要检查每个节点以找到该路径。

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 2013-04-22
    • 2012-07-20
    • 1970-01-01
    • 2010-11-16
    • 2018-11-05
    • 2011-06-13
    • 2013-11-28
    相关资源
    最近更新 更多