UI自动化测试
环境搭建
浏览器与驱动的版本需要对应,版本号的前三段需要严格对应,但最后一段可能找不到对应的版本号,但需要尽量缩小差距范围
查看浏览器版本号:Chrome右上角三个点 --> 帮助 --> 关于Goods Chrome

配置:
解压压缩包,找到chromedriver.exe复制到chrome的安装目录(其实也可以随便放一个文件夹)。复制chromedriver.exe文件的路径并加入到电脑的环境变量中去。具体的:

进入环境变量编辑界面,添加到用户变量即可,双击PATH,将你的文件位置(C:\Program Files (x86)\Google\Chrome\Application\)添加到后面。

完成后在cmd下输入chromedriver验证是否安装成功:

未配置环境也可以,例如:
from selenium import webdriver import time def main(): chrome_driver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe' #chromedriver的文件位置 b = webdriver.Chrome(executable_path = chrome_driver) b.get('https://www.google.com') time.sleep(5) b.quit() if __name__ == '__main__': main()
已配置环境变量时
from selenium import webdriver import time def main(): b = webdriver.Chrome() b.get('https://www.baidu.com') time.sleep(5) b.quit() if __name__ == '__main__': main()
如果运行时提示

很可能是chromedriver的版本不对
UI自动化测试
针对于页面上的操作,来让程序自动的按照一定的规则跑起来
- web端的UI自动化
- app端的UI自动化
市场上对自动化的需求
接口自动化(60%)
unittest:写用例,做断言 requests:发送http请求的
pymysql:查询数据库校验数据正确的
wEb端自动化(30%)
oselenuim:帮助你去操作页面的元素的(操作HTML)
移动端自动化(10%)
appium-client-python:写代码的 appium:编辑adb命令 adb:去操作手机
自动化解决了什么问题?
1.解决-回归测试
2.解决-压力测试
3.解决-兼容性测试
4.提高测试效率,保证产品质量
回归测试:项目在发新版本之后对项目之前的功能进行验证
压力测试:可以理解多用户同时去操作软件,统计软件服务器处理多用户请求的能力
兼容性测试:不同浏览器(IE、Firefox、Chrome)等等
自动化测试的优点
1.较少的时间内运行更多的测试用例;
2.自动化脚本可重每运行;
3.减少人为的错误;
4.克服手工测试的局限性
自动化到试的误区
1.自动化测试可以完全替代手工测试:
2.自动化测试一定比手工测试厉害;
3.自动化测试可以发掘更多的BUG;
4.自动化测试话用于所有功能:
自动化测试分类
1.Web-自动化测试(本阶段学习)
2.移动-自动化测试(本阶段学习)
3.接口-自动化测试
4.单元测试
id,class,name,tagname定位
from selenium import webdriver import time # 连接浏览器驱动文件 # 未配置环境变量括号里必须写 browser = webdriver.Chrome('./chromedriver.exe') # 配置环境变量的情况下,括号里不用写 # browser = webdriver.Chrome() # 请求的网站 browser.get('file:///C:/Users/huozhiming/Desktop/chromedriver/pagetest/%E6%B3%A8%E5%86%8CA.html') # # browser.find_element_by_id('userA').send_keys('hzm') # # time.sleep(2) # # browser.find_element_by_class_name('telA').send_keys('15702680814') # # time.sleep(2) # # 模糊匹配文本找到超链接打开网页 click意思是点击事件 # # browser.find_element_by_partial_link_text('访问').click() # # time.sleep(5) # # 先定位超链接 再定位 超链接里的文本 # # 通过文本找到新浪的超链接 并点击 # browser.find_element_by_link_text('新浪').click() # time.sleep(5) # # 关闭网页 # browser.quit()
Xpath定位
''' Xpath定位 ''' # 1.绝对路径定位 # browser.find_element_by_xpath('/html/body/div/fieldset/form/p[2]/input').send_keys('123456789') # 延时时间戳 # time.sleep(3) # 2.相对路径定位 # browser.find_element_by_xpath('//form/p[1]/input').send_keys('hhhh') # time.sleep(3) # 3.元素属性定位 # browser.find_element_by_xpath('//*[@placeholder="请输入用户名"]').send_keys('123') # time.sleep(3)
css定位
''' css定位 ''' from selenium.webdriver.common.by import By # 1.id选择器 #id名称 # # By 是新写法 # browser.find_element(By.ID, 'userA').send_keys('admin') # time.sleep(3) # 2.class选择器 .class名 # browser.find_element_by_css_selector('.emailA').send_keys('123@qq.com') # 3.元素选择器 # browser.find_element_by_css_selector("input").send_keys('哈哈哈') # time.sleep(2) # 4.属性选择器(单属性) # browser.find_element_by_css_selector("[name='user']").send_keys('666') # time.sleep(5) # 属性选择器(多属性) # browser.find_element_by_css_selector("[name='user'][class='login-test']").send_keys('123/<>') # time.sleep(5)
By用法:By是新用法(比较常用)

层级选择器
''' 层级选择器 ''' # 1.父子层级关系选择器 # browser.find_element_by_css_selector("#pa>#userA").send_keys('qwe') # time.sleep(5) # 2.隔代层级关系选择器 # browser.find_element_by_css_selector('.zc #userA').send_keys('1312135')
选择器异常捕获
try: # 隔代层级关系选择器 browser.find_element_by_css_selector('.zc #userA').send_keys('1312135') time.sleep(5) # 异常捕获 except Exception as e: raise e # 无论如何都会执行,错误或者正常 网页都会关闭 finally: time.sleep(3) browser.quit()
浙公网安备 33010602011771号