自动化测试之二:WebDriver API(1)
1. 定位元素
自动化测试要做的就是模拟鼠标和键盘来操作元素,比如单击,输入,鼠标悬停等。
WebDriver提供了8中定位方法,在python中,对应方法如下:
id定位:find_element_by_id()
name定位:find_element_by_name()
tag定位:find_element_by_tag_name()
class定位:find_element_by_class_name()
link_text:find_element_by_link_text()
partial link定位:find_element_by_partial_link_text()
Xpath定位:find_element_by_xpath()
CSS_selector定位:find_element_by_css_selector()
1.1 id定位:Html规定,id在Hhtml中必须是唯一的,WebDriver提供的id定位方法是通过元素的id来查找元素的
find_element_by_id("kw")
1.2 name定位:Html规定,name指定元素的名称
find_element_by_name("wd")
1.3 class定位:Html规定,class来指定元素的类名
find_element_by_class_name("s_ipt")
1.4 tag定位:Html通过tag来定义不同页面的元素
find_element_by_tag_name("input")
1.5 link定位:link定位与前面几种定位方法有所不同,它专门用来定位文本链接
其是通过元素标签对之间的文字信息来定位元素的
例如:
<a calss="mnav" href="http://news.baidu.com">新闻</a>
find_element_by_link_text("新闻")
1.6 partial link定位:是对link定位的一种补充,有些文字链接比较长,这个时候我们可以取文字链接的部分文字进行定位,只要这部分文字可以唯一标识这个链接即可
其是通过元素标签对之间的部分文字定位元素的
例如:
<a calss="mnav" href="#">这是一个很长的文字链接</a>
find_element_by_partial_link_text("很长")
1.7 Xpath定位:在XML中,Xpath是移动定位元素的语言,因为Html可以看做XML的一种实现,所以WebDriver提供了这种在Web应用中定位元素的方法
1 绝对路径定位
find_element_by_xpath("/html/body/div/div[2]/a")
2 利用元素属性定位
find_element_by_xpath("//input[@id='kw']")
find_element_by_xpath("//*[@id='kw']") 如果不想指定标签名,可以使用*来代替
3 层级与属性结合
如果一个元素本身没有可以唯一标识这个元素的属性值,可以查找其上一级元素
find_element_by_xpath("//span[@class='bg']/input")
4 使用逻辑运算符 (and表示必须满足两个条件来定位元素)
如果一个属性不能唯一区分一个元素,我们可以使用逻辑运算符连接多个属性来查找元素
find_element_by_xpath("//input[@id='kw' and @class='s']")
5 使用contains方法
contains方法用于匹配一个属性中包含的字符串
find_element_by_xpath("//span[contains(@class, 'first')]/input")
6 使用text()方法
text()方法用于匹配显示文本信息
find_element_by_xpath("//a[text(), '新闻']")
1.8 CSS定位
CSS是一种语言,描述Html和Xml的表现,Css使用选择器为页面元素绑定属性
Css选择器可以较为灵活的选择控件的任意属性,一般情况下,Css定位速度比Xpath定位速度快。
1 通过class定位 点(.)表示通过class来定位,后面直接加类名
find_element_by_css_selector(".s_pit")
2 通过id定位 井号(#)表示通过id定位, 后面直接加id名
find_element_by_css_selector("#kw")
3 通过标签名定位 使用标签名定位元素时不需要任何符号标识,直接使用标签名即可
find_element_by_css_selector("input")
4 通过标签层级关系定位
find_element_by_css_selector("span > input")
这种写法标识有父元素,父元素标签名为span。查找span中所有标签名为input的子元素
5 通过属性定位 在css中可以使用元素的任意属性定位,只要该属性能唯一标识这个元素,对于属性值来说,可以加引号,也可以不加
find_element_by_css_selector("[name='kw']")
6 组合定位
find_element_by_css_selector("form.fm > span > input.s_ipt")
这种写法表示查找input,其由class属性为s_ipt,并且它有一个父元素,标签名span,span还有一个父元素,标签名为form,其class属性为fm
7 根据属性包含某字符串定位
find_element_by_css_selector("[class*=s_ipt_wr]")
表示 查找class属性包含s_ipt_wr字符串的元素
8 根据属性以某字符串开头定位
find_element_by_css_selector("[class^=bg]")
表示 查找class属性以bg开头的元素
9 根据属性以某字符串结尾定位
find_element_by_css_selector("[class$=wrap]")
表示查找class属性以wrap结尾的元素
10 以下标定位
find_element_by_css_selector("form > input:nth-child(2)")
表示查找form标签下第二个input标签的元素
1.9 用By定位元素
针对前面8中定位元素的方法,WebDriver还提供了另外一套写法,同一调用find_element()方法,通过By来声明定位,并传入对应定位方法的定位参数,如下
需要单独导入才可以使用By
from selenium.webdriver.common.by import By
find_element()需要两个参数,第一个参数时定位的类型,由By提供,第二个参数时定位的值
————————————————————————————————————————————————————————————————————————————————————
find_element(By.ID, "kw")
find_element(By.NAME, "kw")
find_element(By.CLASS_NAME, "s_ipt")
find_element(By.TAG_NAME, "input")
find_element(By.LINK_TEXT, "新闻")
find_element(By.PARTIAL_LINK_TEXT, "很长")
find_element(By.XPATH, "//span[@class='test']/a")
find_element(By.CSS_SELECTOR, "form.fm > span")
上一篇: PHP之数组遍历