阶段目标
-
能对web项目实施自动化测试
-
能对app项目实施自动化测试
-
项目中实施web和app自动化
今日目标
-
自动化测试理论知识(前置)
-
web自动化环境的搭建(独立实现)
-
使用代码实现web元素的定位(id\name\tag_name)
UI自动化测试
一、UI自动化测试介绍
学习目标
能判断软件项目是否适合实施UI自动化测试
理解UI自动化测试的作用
1. 认识UI自动化测试
为什么要进行UI自动化测试
-
大量的版本回归
-
手工回归效率低
-
测试工程师价值得不到体现
体现价值:测试人员需要从重复的回归测试中抽离出来,投入更重要的功能模块测试中
工作效率: 提高测试效率
什么是UI自动化测试
-
UI:User Interface,简称UI,用户界面是系统和用户之间进行交互和信息交换的媒介
-
UI自动化测试:使用程序、脚本对系统界面体现的功能和数据信息展示等进行的测试技术
2. 实施UI自动化测试前置条件
不满足的条件:
-
自动化脚本需要进行重新编写
-
不能及时解决回归测试效率
-
自动化测试价值得不到体现
满足的前置条件:
-
项目需要回归测试:比如自营项目
-
项目需要实现自动化的功能模块需求变更不频繁
-
一般只实现核心功能模块
-
页面功能也展示信息变更
-
-
项目周期要长
-
Time: 功能测试:UI自动化测试 = 1:3
-
3. UI自动化执行的时机
-
一般情况下在手工测试完成之后
-
版本或项目功能趋于稳定
-
-
以下情况不满足执行的时机:
-
项目UI界面还没有
-
项目刚提测
-
功能不稳定,问题多
-
无法执行脚本调试
-
注意:
部分公司存在独立的自动化测试小组,可能在项目开始时就已经同步启动UI自动化测试工作,例如:环境部署,计划制定等……
4. UI自动化测试核心作用和劣势
互联网项目现状
-
快速迭代
-
文档缺失
UI自动化测试优势
-
节省人力成本:回归测试工作由脚本代替人去执行
-
提高回归测试效率:脚本执行测试速度更快
-
提高测试质量:一旦自动化脚本库完善后测试执行过程更标准和准确
-
将构建测试数据
-
作为项目文档辅助
UI自动化测试劣势
-
对测试人员要求提高
-
前期投入成本大
-
对项目要求高
思考
-
下面几个常见的软件产品是否适合实施UI自动化测试:
A: 京东商城 ✅ B:淘宝网 ✅
C: 滴滴打车web端 ✅ D: 推广广告宣传静态页面 ❌
-
UI自动化测试说法正确的是:
A:完全可以代替手工回归测试 ❌
B:一定可以册数所有的软件缺陷 ❌
C:可以执行核心功能模块的回归测试,减少测试人员的重复回归测试工作 ✅
D:提高项目质量的保障 ✅
-
下面那些节点适合实施UI自动化测试代码编写:
A:开发集成后端代码模块时 ❌
B:项目开始执行冒烟测试 ❌
C:项目提交产品验收阶段 ❌
D:新版本上线后 ✅
二、Selenium-基础API之元素定位
1. 认识Web自动化测试工具-Selenium
-
常见的自动化测试工具
-
QTP: 是一个商业化的功能测试工具,收费,支持web,桌面自动化测试。
-
Robot Framework: 是一个基于Python可扩展地关键字驱动的测试自动化框架
-
Selenium: 是一个开源的web自动化测试工具,免费,主要做功能测试。主流
-
-
Selenium特点
-
开源软件
-
跨平台
-
支持多种浏览器
-
支持多种语言
-
功能强大,成熟稳定
-
-
Selenium核心组件
-
Selenium-IDE
-
Firefox 火狐插件,录制脚本工具。支持脚本回放和导出。可以导出Python和Java等类型的单元测试脚本
-
-
Selenium-Grid
-
分布式执行自动化测试用例工具,用于大批量测试用例的
-
-
Selenium-WebDriver
-
脚本编写核心工具,提供模拟手工操作的常用方法
-
-
三、Selenium-环境搭建
web自动化测试环境搭建步骤
-
Python开发环境: Python解释器,pycharm编码工具
-
安装Selenium: Selenium提供自动化实现的常用方法
-
安装浏览器: 脚本结果直接体现,有Chrome,Firefox等
-
安装浏览器驱动:保证能够程序驱动浏览器,实现自动化测试
安装Selenium
-
安装包
pip install selenium
-
查看包
pip show selenium
-
卸载包
pip uninstall selenium
安装浏览器驱动
-
Chrome:https://registry.npmmirror.com/binary.html?path=chromedriver/
提示:浏览器驱动大版本必须和浏览器版本一致
-
使用:
windows: 1、解压下载的驱动,获取到chromedriver.exe 2、将chromedriver.exe复制到python.exe所在⽬录即可(避免再次将chromedrver.exe 添加path变量) mac: 1、解压下载的驱动,获取到chromedriver 2、将chromedriver复制到/usr/local/bin⽬录即可。
四、Selenium-元素定位
学习目标:
能够运用8中元素定位方法找到界面元素
1. 认识元素定位
-
什么是元素定位?
-
通过代码调用的方法查找元素
-
-
元素定位方法
-
id
-
name
-
class
-
tag_name
-
link_text
-
partial_link_text
-
xpath
-
css
-
-
步骤
1. 打开谷歌浏览器 2. 输入url 3. 找元素及操作 4. 关闭浏览器
from time import sleep # 导包 from selenium import webdriver # 打开浏览器(实例化浏览器对象) driver = webdriver.Chrome() # 输入url driver.get("<https://www.baidu.com>") # 找元素及操作 sleep(3) # 关闭浏览器 driver.quit()
2. Selenium 元素定位API
2.1 id定位
-
方法: driver.find_element(By.ID, 'id值').send_keys('内容')
-
前置:标签必须有id属性
-
输入方法:元素.send_keys(’内容’)
-
示例:
from time import sleep # 导包定位元素方法 from selenium.webdriver.common.by import By # 导包 webdriver from selenium import webdriver # 1.获取浏览器 driver = webdriver.Chrome() # 2. 打开URL driver.get('file:///C:/Users/xiehaiyang/PycharmProjects/UIAutoTest/HTML/%E6%B3%A8%E5%86%8CA.html') # 3.查找操作元素 driver.find_element(By.ID, 'userA').send_keys('admin') driver.find_element(By.ID, 'passwordA').send_keys('123456') # 4.暂停3秒 sleep(3) # 5.关闭浏览器 driver.quit()
2.2 name定位
-
方法: driver.find_element(By.NAME, 'NAME值').send_keys('内容')
-
前置:标签必须有NAME属性
-
特点:当前页面可以重复
-
提示:由于name属性可以重复,所以使用时需要查看是否唯一
-
输入方法:元素.send_keys(’内容’)
-
示例:
# 需求: # 打开注册A.html页面,完成以下操作 # 1).使用name定位,输入用户名:admin # 2).使用name定位,输入密码:123456 # 3).3秒后关闭浏览器窗口 from time import sleep from selenium.webdriver.common.by import By from selenium import webdriver driver = webdriver.Chrome() driver.get('file:///C:/Users/xiehaiyang/PycharmProjects/UIAutoTest/HTML/%E6%B3%A8%E5%86%8CA.html') driver.find_element(By.NAME, 'userA').send_keys('admin') driver.find_element(By.NAME, 'passwordA').send_keys('123456') sleep(3) driver.quit()
2.3 class定位
-
方法: driver.find_element(By.CLASS, 'CLASS值').send_keys('内容')
-
前置:标签必须有CLASS属性
-
特点:class属性可以多个值
-
输入方法:元素.send_keys(’内容’)
-
示例:
# 需求:
# 打开注册A.html页面,完成以下操作
# 1).使用name定位,输入用户名:admin
# 2).使用name定位,输入密码:123456
# 3).通过class_name定位电话号码A,并输入:18611111111
# 4).通过class_name定位电子邮箱A,并输入:123@qq.com3).3秒后关闭浏览器窗口
# 5).3秒后关闭浏览器窗口
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
drive = webdriver.Chrome()
drive.get('file:///C:/Users/xiehaiyang/PycharmProjects/UIAutoTest/HTML/%E6%B3%A8%E5%86%8CA.html')
drive.find_element(By.ID, 'userA').send_keys('admin')
drive.find_element(By.ID, 'passwordA').send_keys('123456')
drive.find_element(By.CLASS_NAME, 'telA').send_keys('18611111111')
drive.find_element(By.CLASS_NAME, 'c1').send_keys('123@qq.com')
sleep(3)
drive.quit()
说明:如果标签有多个class值,使用任何一个都可以。如:c1
2.4 tag_name定位
-
方法: driver.find_element(By.TAG_NAME, 'TAG_NAME值').send_keys('内容')
-
说明:根据标签名进行定位
-
特点:相同的标签名有很多个
-
提示:如果页面存在多个相同标签,默认返回第一个
-
输入方法:元素.send_keys(’内容’)
-
示例:
# 需求: # 打开注册A.html页面,完成以下操作 # 1).使用tag_name定位用户名输入框,并输入:admin # 2).3秒后关闭浏览器窗口 from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('file:///C:/Users/xiehaiyang/PycharmProjects/UIAutoTest/HTML/%E6%B3%A8%E5%86%8CA.html') driver.find_element(By.TAG_NAME, 'input').send_keys('admin') sleep(3) driver.quit()
2.5 link_text定位
-
方法: driver.find_element(By.LINK_TEXT, 'LINK_TEXT值').click()
-
说明:根据链接文本(a标签)定位
-
特点:传入的链接文本,必须全部匹配,不能模糊匹配
-
输入方法:元素.click()
-
示例:
# 需求: # 打开注册A.html页面,完成以下操作 # 1).使用link_text定位(访问 新浪 网站)超链接,并点击 # 2).3秒后关闭浏览器窗口 from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('file:///C:/Users/xiehaiyang/PycharmProjects/UIAutoTest/HTML/%E6%B3%A8%E5%86%8CA.html') driver.find_element(By.LINK_TEXT, '访问 新浪 网站').click() sleep(3) driver.quit()
2.6 partial_link_text定位
-
方法: driver.find_element(By.PARTIAL_LINK_TEXT, 'LINK_TEXT值').click()
-
说明:根据链接文本(a标签)定位
-
特点:传入的文本,支持模糊匹配(传入局部文字)
-
输入方法:元素.click()
-
示例:
# 需求: # 打开注册A.html页面,完成以下操作 # 1).使用partial_link_text定位(访问 新浪 网站)超链接,并点击 # 2).3秒后关闭浏览器窗口 from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('file:///C:/Users/xiehaiyang/PycharmProjects/UIAutoTest/HTML/%E6%B3%A8%E5%86%8CA.html') driver.find_element(By.PARTIAL_LINK_TEXT, '新浪').click() sleep(3) driver.quit()
2.6 扩展:查找一组元素
-
方法: driver.find_elements(By.XXXXX, 'XXXX值')
-
说明:定位返回的是列表格式,可以进行遍历或添加下标的方式操作这个列表
-
提示:八大元素定位方法,都可以使用查找一组元素,如果没有搜索到符合的标签,返回空列表;相反,查找一个元素的时候,没有搜索到,那么就会报错
-
示例:
# 需求: #打开注册A.html页面,完成以下操作 # 1).使用定位一组元素(标签名)定位密码输入框,并输入:123456 # 2).3秒后关闭浏览器窗口 from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('file:///C:/Users/xiehaiyang/PycharmProjects/UIAutoTest/HTML/%E6%B3%A8%E5%86%8CA.html') inputs = driver.find_elements(By.TAG_NAME, 'input') inputs[1].send_keys('123456') sleep(3) driver.quit()