selenium之find_element_by_xpath定位元素
一 方法
selenium为定位元素提供了较多方法,大致分为单元素定位和多元素定位.
# 查找单个元素:
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
# 查找多个元素
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
# 两个私有方法
find_element
find_elements
二 用法
2.1 find_element和find_elements用法
from selenium.webdriver.common.by import By driver.find_element(By.XPATH, '//button[text()="Some text"]') driver.find_elements(By.XPATH, '//button')
按各种分类的属性如下:
XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT = "partial link text" NAME = "name" TAG_NAME = "tag name" CLASS_NAME = "class name" CSS_SELECTOR = "css selector"
2.2 按IP定位
login_form = driver.find_element_by_id('loginForm')
使用此策略,将返回id属性值与位置匹配的第一个元素。如果没有元素具有匹配的id属性,NoSuchElementException
则将引发a。
2.3 按name定位
username = driver.find_element_by_name('username') password = driver.find_element_by_name('password')
使用此策略,将返回name属性值与位置匹配的第一个元素。如果没有元素具有匹配的name属性,NoSuchElementException
则将引发a。
2.4 通过XPath定位
使用XPath的主要原因之一是,当您没有想要查找的元素的合适的id或name属性时。您可以使用XPath以绝对术语(不建议使用)定位元素,也可以相对于具有id或name属性的元素定位。XPath定位器还可用于通过id和name以外的属性指定元素。
绝对XPath包含来自根(html)的所有元素的位置,因此,仅对应用程序进行一点点调整就可能导致失败。通过找到具有id或name属性的附近元素(最好是父元素),您可以根据关系找到目标元素。这种更改的可能性要小得多,并且可以使您的测试更可靠。
<html> <body> <form id="loginForm"> <input name="username" type="text" /> <input name="password" type="password" /> <input name="continue" type="submit" value="Login" /> <input name="continue" type="button" value="Clear" /> </form> </body> <html>
如下定位:
# 绝对路径(如果仅对HTML进行少许更改,则会中断) login_form = driver.find_element_by_xpath("/html/body/form[1]") # HTML中的第一个表单元素 login_form = driver.find_element_by_xpath("//form[1]") # 具有名为id的属性和值为loginForm的表单元素 login_form = driver.find_element_by_xpath("//form[@id='loginForm']")
2.4.1 绝对路径(如果仅对HTML进行少许更改,则会中断)
login_form = driver.find_element_by_xpath("/html/body/form[1]")
2.4.2 元素及其属性定位
查找具体的元素,必须在前面输入标准开头//,表示从当前节点寻找所有的后代元素
//div/* div下面的所有的元素 //div//p 先在整个文档里查找div,再在div里查找p节点(只要在内部,不限定是否紧跟) ;等价于 css_selector里的('div p') //div/p p是div的直接子节点; 等价于 css_selector里的('div > p') //*[@style] 查找所有包含style的所有元素,所有的属性要加@; 等价于 css_selector里的('*[style]') //p[@spec='len'] 必须要加引号;等价于 css_selector里的("p[spec='len']") //p[@id='kw'] xpath中对于id,class与其他元素一视同仁,没有其他的方法
2.4.3 选择节点位置
//div/p[2] 选择div下的第二个p节点 ;等价于css_selector里的div>p:nth-of-type(2) 符合p类型的第二个节点 //div/*[2] 选择div下第二个元素 //div/p[position()=2] position()=2 指定第二个位置; 等价于上面的 //div/p[2] position()>=2 位置大于等于2 position()<2 位置小于2 position()!=2 位置不等于2 //div/p[last()] 选择div下的倒数第一个p节点; last()倒数第一个 //div/p[last()-1] 选择div下的倒数第二个p节点; //div/p[position()=last()] 倒数第一个 //div/p[position()=last()-1] 倒数第二个 //div/p[position()>=last()-2]倒数第一个,第二个,第三个
2.4.4 组合定位
//p | //button 选择所有的p和button,等价于css_selector里的 p, button //input[@id='kw' and @class='su'] 选择id=kw 并且 class=su的input元素
2.4.5 兄弟节点
相邻后面的兄弟节点的选择:following-sibling:: 两个冒号 //div/following-sibling::p 选择div里相邻的p节点 相邻前面的兄弟节点的选择:preceding-sibling:: 此方法在css_selector中没有 //div/preceding-sibling::p[2] 选择div里前面相邻的第二个节点,不加[2]选择的是前面的所有的p节点
2.4.6 父节点
//p[@spec='len']/.. 选择p节点的上层节点 此方法在css_selector中没有 //p[@spec='len']/../.. 上层节点的上层节点
2.5 通过链接文本找超链接
<html> <body> <p>Are you sure you want to do this?</p> <a href="continue.html">Continue</a> <a href="cancel.html">Cancel</a> </body> <html>
continue_link = driver.find_element_by_link_text('Continue') continue_link = driver.find_element_by_partial_link_text('Conti')
使用此策略,将返回链接文本值与位置匹配的第一个元素。如果没有元素具有匹配的链接文本属性,NoSuchElementException
则将引发a。
2.6 通过标签名称定位
<html> <body> <h1>Welcome</h1> <p>Site content goes here.</p> </body> <html>
heading1 = driver.find_element_by_tag_name('h1')
使用此策略,将返回具有给定标签名称的第一个元素。如果没有元素具有匹配的标签名称,NoSuchElementException
则将引发a。
2.7 通过class定位
<body> <p class="content">Site content goes here.</p> </body> <html>
content = driver.find_element_by_class_name('content')
使用此策略,将返回具有匹配类属性名称的第一个元素。如果没有元素具有匹配的类属性名称,NoSuchElementException
则将引发a。
2.8 通过CSS选择器定位
<html> <body> <p class="content">Site content goes here.</p> </body> <html>
content = driver.find_element_by_css_selector('p.content')
使用此策略,将返回具有匹配CSS选择器的第一个元素。如果没有元素具有匹配的CSS选择器,NoSuchElementException
则将引发a。
结束!
相关文章
- 自动化测试之路 —— Appium元素定位
- supergo任我行纵行指南针TT硕点YY考勤打卡定位下载及安装教程
- 多个激光雷达同时校准、定位和建图的框架
- 基于单目和低成本GPS的车道定位方法
- VKD233HH是低功耗单键/1路单通道触摸触控IC,电流小 灵敏度高,带16S复位防呆功能,多用于CPS定位手环/手表/台灯等
- 了解元素定位css-selector 、Python库BeautifulSoup 等
- 盘点Python网络爬虫过程中xpath的联合查询定位一个案例
- 【解疑】ConcurrentHashMap 在JDK1.7时候put或get时候,怎么定位到数据的?
- 软件测试|iOS自动化测试——元素定位
- App自动化测试|dom结构和元素定位方式
- App自动化测试|原生app元素定位方法
- CSS 定位网页元素
- 微信企业号开发:微信考勤百度地图定位二详解手机开发
- Python3.x:Selenium中的webdriver进行页面元素定位详解编程语言
- 刷新ALV定位到当前记录行详解编程语言
- Linux神器端口号匹配进程,快速定位网络问题(linux端口号对应进程)
- Oracle SQL跟踪工具:精准定位SQL性能瓶颈(oracle跟踪sql工具)
- Redis空间位置变更实时定位变化(redis频繁更新位置)
- Oracle TX锁 定位分析及解决方案(oracle tx锁原因)
- 利用腾讯的ip地址库做ip物理地址定位
- jquery元素相对定位代码
- 一款双向无缝+按钮定位的焦点图实现代码
- C#词法分析器之输入缓冲和代码定位的应用分析
- jquery的相对父元素和相对文档定位示例代码