在Selenium Webdriver中,在性能Linktext或css方面哪个更好?
在Selenium
,最好使用Locator ID
定位元素。
最小的定位器是XPath
(如果我错了,请纠正我)。
那么一个人应该使用Locators来确定element
优先级或顺序是什么?
我只是从GK27在评论中提供的这个参考文章中写了一些要点。这里写的目的是要清楚,如果页面没有找到时间,用户可以从这里查看。
因此,更好的方法是定位元素,优先级应该在列表中[id, name, linkText, partialLinkText, tagName, className, cssSelector, xpath]
这里列表中的第一个值id
包含第一优先级,依此类推。
按ID查找元素:
在网页上定位元素的最有效方式和首选方法是按ID
。 ID
将是网页上唯一可以轻松识别的内容。 ID是最安全和最快的定位器选项,应始终是首选
按名称查找元素:
当没有Id可供使用时,下一个值得一看的是所需元素是否具有name属性。 但请确保名称不能始终唯一。 如果有多个名称,Selenium将始终对第一个匹配元素执行操作
通过LinkText定位元素:
查找包含链接文本的元素非常简单。 但请确保网页上只有一个唯一的链接。 如果有多个链接具有相同的链接文本(例如重复的页眉和页脚菜单链接),则在这种情况下,Selenium将对具有链接的第一个匹配元素执行操作。
通过部分LinkText定位元素:
与LinkText
, PartialLinkText
也以相同的模式工作,唯一的区别是它与部分文本的匹配链接意味着使用包含。
通过TagName定位元素:
TagName
可以与Group元素一起使用,例如Select和check-box / dropdown。
按类名定位元素:
可能有多个具有相同类名的元素,如果我们只使用findElementByClassName
,请确保它只有一个。 如果不是,则需要使用classname
及其子元素进行扩展。
CSS选择器:
CSS主要用于为网页提供样式规则,我们可以使用CSS来识别网页中的一个或多个元素。 如果你开始使用css选择器来识别元素,那么与XPath
相比,你会喜欢它的速度。 我们可以使用Css选择器来确保脚本在IE浏览器中以相同的速度运行。 CSS选择器始终是在页面中定位复杂元素的最佳方式。 如果您需要使用复杂选择器查找元素,我通常建议使用CSS选择器(如果可能)。 它不像XPath那么灵活,但会覆盖许多相同的情况,而不会在XP上表现出对XP的极端性能损失。
XPath选择器:
通过XPath
查找元素对于使用非常复杂的选择器查找元素很有用,并且是最灵活的选择策略,但它有可能非常慢,特别是在IE
。 在IE
6,7或8中,通过XPath
查找比在Firefox
执行相同操作要慢一个数量级。 IE
提供本机XPath-over-HTML
解决方案,因此项目必须使用JavaScript XPath
实现,而旧版IE
的JavaScript引擎确实要慢得多。
xpath有两种类型
- 原生Xpath,就像指导xpath以直接方式进行。 例如:
html/head/body/table/tr/td
这里指定原生路径的优点是,找到一个元素非常容易,因为我们提到直接路径。 但是如果路径有任何变化(如果添加/删除了某些东西)那么xpath就会中断。
- 相对Xpath。 在相对xpath中,我们将提供相对路径,就像我们将告诉xpath通过告诉它们之间的路径来找到一个元素。 这里的优点是,如果html中的任何更改都可以正常工作,那么除非特定路径发生了变化。 查找地址将非常困难,因为它需要检查每个节点以找到该路径。
以下是在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")