selenium 用By定位元素
使Wbe自动化来说,学会元素定位相当于自动化已经学习会了一半。
一、浏览器的常用操作
元素定位
1、web自动化测试就是通过代码对网页进行测试,在对网页进行测试之前,必须掌握如何定位元素
2、基于xpath定位
# 通过绝对路径定位,一般都是定位工具所获取的。
# 通过绝对路径定位(不建议用) 定位元素不稳定,考虑脚本的稳定 通过/从页面开始标签一直导航到目标标签
el1=driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[5]/div/di v/form/span[1]/input")
# 通过相对路径定位 //开头 经常用到的方法
el2=driver.find_element_by_xpath("//form/span/input")
# 标签+索引=唯一定位目标标签
el3=driver.find_element_by_xpath("//form/span[1]/input")
# 唯一定位标签+属性
el4=driver.find_element_by_xpath("//form[@id='form']/span[1]/input[@id
='kw']")
# 唯一定位标签+多个属性
el5=driver.find_element_by_xpath("//form[@id='form'and @name='f']/span [1]/input[@id='kw']")
# 标签+部分属性定位 s_ipt
el6=driver.find_element_by_xpath("//form/span[1]/input[substring(@class, 3)='ipt']")
substring(@属性,n)=部分属性值 # n指的是开始截取的下标,substring属性值从第3个字符到最后的值 = 'ipt':
xpath匹配到多个元素如何选择指定的元素定位
xpath定位到统计标签的最后一个
//span[@id='example']/a[last()]
xpath定位同级标签的倒数第二个
//span[@id='example']/a[last()-1]
xpath通过属性值 模糊匹配 定位元素
xpath模糊匹配的函数有两种: starts-with和contains
starts-with://label[starts‐with(@class,'btn')]
1 driver.find_element_by_xpath("//label[starts‐with(@class,'btn')]")
2 driver.find_element(By.XPATH, "//label[starts‐with(@class,'btn')]")
contains://label[contains(@class,'btn')]
1 driver.find_element_by_xpath("//label[contains(@class,'btn')]")
2 driver.find_element(By.XPATH, "//label[contains(@class,'btn')]")
xpath通过文本定位元素
文本内容的定位是利用html的text字段进行定位的方法,//span[text()='下一步'],由于“下一步”这几个字是浏览器界面就可以看到的,“所见即所得”,这种特征的可能性非常小,优先推荐使用,与属性值类似,文本内容也支持starts-with和contains模糊匹配。
1 driver.find_element_by_xpath("//span[text()='下一步']")
2 driver.find_element(By.XPATH, "//span[text()='下一步']")
3 driver.find_element(By.XPATH, "//span[starts‐with(text(),'下一步')]")
4 driver.find_element(By.XPATH, "//span[contains(text(),'下一步')]")
通过之前的学习了解到,XPath和 CSS都提供了非常强大的灵活定位方法,相比较而言CSS比较简单,使用难度大一点。两种方式学会一种可以觉得大部分定位问题。
针对于定位方法WbeDriver提供了一套方法,统一调用find_element()方法,通过By声明定位。
from selenium.webdriver.common.by import By
find_element()方法只用为定位,需要填写两个参数,一个是:定位参数的类型,另一个是定位参数的:元素值:
id属性定位 find_element(By.ID,"id")
name属性定 find_element(By.NAME,"name")
classname属性定find_element(By.CLASS_NAME,"claname")
a标签文本属性定位 find_element(By.LINK_TEXT,"text")
a标签部分文本属性定位find_element(By.PARTIAL_LINK_TEXT,"partailtext")
标签名定位·find_elemnt(By.TAG_NAME,"input")