欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自动化测试之二:WebDriver API(1)

程序员文章站 2022-04-11 12:48:24
...

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")