UI自动化测试

元素定位大法

UI自动化测试过程中,想要对UI页面中元素进行点击,输入文本等操作,首先就要知道如何去定位到她即获取她芳心的几大法则,然后才能操作她!如果都不知她的人在那,我该向谁表白呢?在这里插入图片描述


前言

上篇文章介绍了UI测试的大致过程,可流程原理还未说明,所谓知己知彼,百战不殆,想要追她,怎能不知她的内心呢?在这里插入图片描述

selenium原理简介

上文所说Selenium 是一个用于 Web 测试的工具,测试运行在浏览器中,就像真正的用户在手工操作一样。支持所有主流浏览器,而我们写的代码,他怎么就能驱动浏览器,按照我们的要求供我们玩耍呢?没错,就是因为Selenium 中有个WebDriver模块,WebDriver 就是对浏览器提供的原生API进行封装,使其成为一套更加面向对象的Selenium 。使用这套API就可以操控浏览器的开启、关闭,打开网页,操作界面元素,控制Cookie,还可以操作浏览器截屏、安装插件、设置代理、配置证书等。所以WebDriver就像是我们的媒人,把我们想的内容,告诉她,然后由她转给我们的心爱的她-浏览器。当然这当中还包括更具体的细节,协议等,有兴趣可具体探索!


正式修炼定位大法

tips:修炼大法前,对于html,css等基础知识自行脑补获取,本篇不做赘述,后期在做奉上观看,获取时F12,小箭头指向你要获取的元素点击,即可列出它的树结构信息

通过css属性获取

(1)根据 id 属性进行定位, 只返回找到的第一个元素,记住只返回从上往下搜索找到的第一个,但一般在web中id都是唯一的,所以这个问题基本不存在,因为她具有唯一性,所以在定位时,利用id是首选,没有id在退而求其次!除了id属性,其他属性几乎都不唯一。id在结构中长什么样,来宝贝,上图:
在这里插入图片描述
知道了长什么样,宝贝再来上方法:find_element_by_id,是的就是通过这个方法可以跟id相互勾结。注意element是单数,所以只能一个,聪明如我立马想到要获取所有多个,加个s不就完事了,是的,没错!比如下面的这个方法:find_elements_by_name,他就返回所有匹配到的元素列表。以下各方法同理!

(2)通过name属性查找,记住name属性不唯一,所以利用她查找时一定是没办法的办法,先从大范围即从她的祖父,父亲然后一层一层确认她,固定她!来上图看看长啥样:
在这里插入图片描述
方法是find_element_by_name,同样单数只返回匹配到的一个元素

(3)根据 class 名称进行定位, 只返回找到的第一个元素。方法为find_element_by_class_name,也不唯一哦!使用时大范围到小范围锁定哦,可能她的父亲,祖父有id属性,这不就抓住她的了嘛!!
在这里插入图片描述
(4)通过CSS选择器进行匹配查找,方法为 find_element_by_css_selector
(5)通过标签名称进行匹配查找,方法为 find_element_by_tag_name,这些就是标签啦!
在这里插入图片描述

(6)通过链接内容进行匹配查找,方法为 find_element_by_link_text
在这里插入图片描述

(7)通过xpath进行匹配查找,方法为 find_element_by_xpath,xpath也是我常用的定位方法,因其较为复杂,下篇文章专门介绍下她的庐山真面目!知道基本理论7大法宝,下面开始上刺刀,准备开整!
在这里插入图片描述

万事具备,开始实操

代码如下(示例):

from selenium import webdriver     #导入上文原理所说的媒人

# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("D:\\tool\selenium\chromedriver.exe")
# 访问想要的网址
driver.get("https://www.baidu.com/")

# 根据 id 属性进行定位, 只返回找到的第一个元素
ele = driver.find_element_by_id("abc")
# 获取元素的文本值并打印出来
print(ele.text)

# 根据 name 属性定位, 只返回找到的第一个元素
ele = driver.find_element_by_name("abd")
print(ele.text)

# 根据链接文本进行定位, 只返回找到的第一个元素
ele = driver.find_element_by_link_text("点击进入百度")
ele.click()

# 根据链接文本进行定位, 模糊定位, 只返回找到的第一个元素
ele = driver.find_element_by_partial_link_text("点击进入")
ele.click()

# 根据 tag_name 进行定位, 只返回找到的第一个元素
ele = driver.find_element_by_tag_name("span")
print(ele.text)

# 根据 class 属性进行定位, 只返回找到的第一个元素
ele = driver.find_element_by_class_name("hello")
print(ele.text)

# 根据 xpath 进行定位, 只返回找到的第一个元素
ele = driver.find_element_by_xpath("/html/body/div/ul/li[2]")
print(ele.text)

# 匹配元素列表,返回所有能匹配到的元素,存在一个列表里边
ele = driver.find_element_by_css_selector("html > body > div > ul > li:nth-child(2)")
print(ele.text)

临别嘱托

元素定位注意事项(一定注意,并牢记,不然摸错其他姑娘可就误了大事)
1、当你想要操作某个确定的元素的时候,一定保持自己的表达式唯一定位,记住唯一
2、当你需要操作一组元素的时候,你必须保证自己的表达式
a.能匹配到所有想要操作的元素
b.不会匹配到任何其他不想操作的元素

selenium没有给我们提供判断元素是否存在的方法,所以我们可以用匹配元素列表的方式判断。先将它装入列表中,然后判断列表是否为空,若列表为空,则元素不存在,若列表不为空,则元素存在。在进行元素定位的时候,有时会遇到一些特别难以定位的元素,此时你可以使用下边这种模式,分步骤定位,一步步缩小定位范围。

ele = driver.find_elements_by_xpath("//div[@id='category-block']//ol/li")
b = ele.find_elements_by_xpath('.//li[@class=\'subcate-item\']//span')

总结

本篇文章介绍了获取女神的7大基本方法,即定位元素的方法,有了这些套路工具,我们才能知道如何套路迎娶女神,所以既有她的规律也有她的方法,掌握这些方法,就能势如破竹。下篇文章继续研讨定位其他高级用法!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值