Ind*_*it 6 java selenium-ide selenium-webdriver
在Selenium这始终是更好地去定位与定位的元素ID.
最低定位器是XPath(如果我错了,请纠正我).
那么,是否有任何人应该使用Locators来识别的优先顺序或顺序element?
Flo*_* B. 10
以下是在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")
Run Code Online (Sandbox Code Playgroud)
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")
Run Code Online (Sandbox Code Playgroud)
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")
Run Code Online (Sandbox Code Playgroud)
我只是从写一些点,这其中已经被GK27在给予参考,这里写的目的是要清楚,如果页面没有找到一段时间后,用户可以从这里查看。
所以定位元素的更好方法,优先级应该在列表中,[id, name, linkText, partialLinkText, tagName, className, cssSelector, xpath]这里id列表中的第一个值包含第一优先级等等。
通过 ID 定位元素:
在网页上定位元素的最有效方式和首选方式是 By ID。ID将是可轻松识别的唯一网页。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 选择器:
查找元素 byXPath对于使用非常复杂的选择器查找元素很有用,并且是最灵活的选择策略,但它有可能非常慢,尤其是在IE. 在IE6、7 或 8 中,找到 byXPath可能比在 中执行相同操作慢一个数量级Firefox。IE没有提供原生XPath-over-HTML解决方案,因此项目必须使用 JavaScriptXPath实现,而遗留版本中的 JavaScript 引擎IE确实要慢得多。
xpath有两种类型
html/head/body/table/tr/td这里指定本地路径的优点是,查找元素非常容易,因为我们提到了直接路径。但是如果路径有任何变化(如果添加/删除了某些东西),那么 xpath 就会中断。