【python-selenium】-web⾃动化测试学习系列(⼀)
web⾃动化测试
此⽂较长,是对本⼈学习 selenium 的⼀个整合,省的七零⼋落的,⾸先会介绍⼀下web⾃动化测试,接着会从介绍Selenium 如何使⽤,到unittest框架。
第⼀部分⾃动化测试(UI⾃动化篇)
什么时候做⾃动化测试
1.时间够
2. 界⾯稳定
3. 适⽤于 冒烟测试(主业务流程)、回归测试、完成⼿动测试⽆法完成的⼯作下班后⽆⼈值守测试
框架
python3 + selenium webdriver3 + pytest/ Unittest(⽤来验证)+ log⽇志系统 + 错误截图收集 + HTML report + jenkins
⾃动化测试策略
1. 让⾃动化测试⼯作有产出
1. ⾃动化会⽤到分布式,⽬的释放⼈⼒,⽐如枯燥的回归测试⼯作(冒烟测试)
2. 最佳实践时⽤最短的时间做出最有价值意义的业务脚本
2. 可以把重复的⼯作替代掉,让⼿⼯测试⼈员有更多的时间去做深层次的基于业务的探索式测试
3. 做⾃动化测试的时:① 先写测试⽤例,设计AT Case(⾃动化测试⽤例)② 在设计的是,将具体的测试数据列出来
⾃动化测试⽤例
⾃动化测试不仅仅是写代码,更重要的是测试思路的引⼊,同样,我们在开始写代码前,需要先设计AT Case(即:⾃动化测试⽤例)AT Case的设计基本上和普通的测试⽤例⼀致,但有两个不同点
1. 如果不需要检查,则⽆需写预期结果
2. 在设计时,将具体的测试数据列出来
第⼆部分⼯具:Selenium
是什么?
Selenium 就是代替⼿⼯模拟界⾯操作。
⼯作的⼤致原理:代码其实并不知道浏览器是怎么⼯作的,但是driver知道,在selenium启动以后,driver其实充当了服务器的⾓⾊,当代码和浏览器通信,代码根据webdriver协议发送请求给driver,driver解析请求,并在浏览器上执⾏相应的操作,并把执⾏结果返回给代码
环境搭建
①Python
② selenium:检查电脑有没有:打开cmd,pip list, 如果没有安装,pip install selenium
③ drivers 浏览器驱动,根据不同浏览器下载
要跟chrome⼀样(在浏览器的设置⾥⾯),放在Python安装⽬录下即可
重点:测试脚本怎么写
1. 定位:在写脚本之前,要先把所有要⽤到的元素定位到
如何定位 → F12,到该元素右键copy成xpath,然后优化⼀下,得该元素的Xpath
‘ctrl F’ 可以验证写的xpath是否唯⼀指定selenium怎么使用
定位的⽅法有很多: 以百度页⾯的【搜索输⼊框】为例, input 标签, id="kw" name="wd" class="s_ipt" value="" maxlength="255"
autocomplete="off"
可以⽤ id="kw" , name="wd" 等⽅式去定位这个元素,分别对应的就是
search_inputbox=driver.find_element_by_id('kw')
search_inputbox=driver.find_element_by_name('wd')
但是这些⽅法定位出来可能不唯⼀,定位元素的⽬的就是到他的唯⼀性
(element和elements都有这8种,共16种)
因为每个元素可能有的属性不⼀样(有时⽤by_id,有时⽤by_name等等),所以为了代码统⼀,⽤常⽤的8种⽅式结合X path 来写: xpath怎么写
1. //(相对位置)+标签+[@属性=’’] → //input[@id=" "]
2. //input[contains(@id,“s”)] → 这个是模糊匹配,匹配id中有s的
3. 对于超链接,⽐如下图,应该写 //a[text()='新闻'],好过写 //a[@href=“url”]
(更多的我写在这篇了)
在代码⾥规范写法
from selenium.webdrivermon.by import By
news_loc='//input[@id="kw"]'# Xpath格式
element=driver.find_element(By.XPATH, news_loc)# 使⽤find_element()⽅法,⽽不是.find_element_by_id()
⾯试时可以表⽰,善于调优xpath, How?
使⽤xpath定位的时候,⽐如说//*[@id="kw"],这个星号会搜索所有标签,如果页⾯⽐较复杂,那么搜索速度肯定会慢的,所以要写上标
签//input[@id="kw"]
2. 再写脚本,如下
from selenium import webdriver
1.实例化,初始化浏览器会话
path='D:\'# 在哪⾥
driver = webdriver.Chrome(path)
2.打开浏览器并进⼊指定的⽹站
<(url)
3.具体各种操作
driver.maximize_window()
locate_input_box=driver.find_element(By.XPATH, news_loc)#定位
locate_input_box.sen d_keys('hardy ')# 在搜索框输⼊搜索关键字
time.sleep(2)
driver.find_element_by_xpath(CLICK_BTN_LOC).click()#点击搜索
time.sleep(4)
4.关闭浏览器窗⼝(所有页⾯)并结束浏览器进程
driver.quit()
重点:常⽤⽅法
设置窗⼝⼤⼩
driver.maximize_window()
driver.set_window_size(800,600)#⾃定义浏览器窗⼝⼤⼩
element.send_keys() → 在已经定位到的element上键⼊⽂字
element.clear()→ 清空已经定位到的element的内容
element.click() → 左键单击已经定位到的element
<→ 返回定位元素的显⽰⽂本⽂字
<_property(property_name) → 该定位元素的属性值
<_attribute(attribute_name)同上,都可以⽤
⼩练习
实例化driver -> 定位到搜索框 -> 输⼊关键字 -> 点击“百度⼀下”搜索 -> 出现搜索结果 -> 关闭⽹页
【登录】→ 【账号登录】→【⽤户名/⼿机号/邮箱】→【密码】→【登录】→并验证是否登陆成功 → 【退出】→ 验证退出 →清理⾃动化测试环境
⾯试题:在你们公司中,怎么在登录⽹站时搞定图形验证码和⼿机验证码的问题?
=====进阶=====
模拟⿏标和键盘事件
下拉框
单选框
练习题:
多选框
is_selected(), 返回当前的checkbox选项 是否有被勾选
因为选项框可能有很多个,不能⼀个个去定位太慢了,使⽤find
xpath 应该怎么写?
共性,⽐如 下⾯这个例⼦都有type,xpath = //input[@type=“checkbox”]
from selenium import webdriver
from time import sleep
import os
以⼀个静态页⾯为例⼦,该html与python⽂件放在同⼀⽬录下,所以url要拼接
cwd = os.getcwd()# 获取当前⼯作⽬录
url ='file://%s%scheckbox.htm'%(cwd,'\\')
driver = webdriver.Chrome()
<(url)
driver.maximize_window()
checkboxes_loc ='//input[@type="checkbox"]'
checkboxes = driver.find_elements_by_xpath(checkboxes_loc)
print(checkboxes)# 是⼀个[<>,<>,<>...]
#除了第三个外都选上,在实际使⽤中,可能并不知道是第⼏个,所以借助标签,value=?
for checkbox in checkboxes:
value = _attribute('value')
if not checkbox.is_selected()and value !="cbv3":
checkbox.click()
sleep(3)
driver.quit()
三种切换
对于⼀些窗⼝跳转与弹框,在这种的时候如果不进⾏切换的话,继续执⾏脚本必然会报错,所以我们就需要⽤到切换窗⼝的⽅法。selenium中主要是三种窗⼝:①Windows窗⼝、②iframe、③alert窗⼝
窗⼝切换 - ⽤句柄切换
driver.quit() 关闭全部页⾯,相当于在浏览器按 X
driver.close() 只会关闭当前所激活的句柄的那个页⾯,就是单独关那个页⾯,进程还在哦
练习:【跳转页⾯操作】
iframe
alert
三种等待:显式等待(智能等待)、隐式等待、强制等待
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论