自动化测试之二: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")

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值