自动化测试
- 借助工具实现
- 借助代码写脚本实现
什么是自动化?
由机器代替人工自动完成指定目标的过程
自动化的有点?
- 减少人工劳动力
- 提高效率
- 产品规格统一
- 规模化
什么是自动化测试?
使用工具或者代码代替手工完成测试的过程【让程序代替人工去验证系统功能得过程】
自动化测试能解决什么问题?/自动化能用来干什么?
1.解决-回归测试 【重复性高、执行频率高】
2.解决-压力测试 【多用户/手工测试不好实现】
3.解决-兼容性测试【测试条件多/手工测试效果差】
4.提高测试效率,保证产品质量【自动化测试作用】
回归测试:项目在发新版本之后对项目之前的功能进行验证
压力测试:可以理解多用户同时去操作软件,统计软件服务器处理多用户请求的能力
兼容性测试:不同浏览器(IE、Firefox、Chrome)等等
自动化测试优点缺点
优点
- 较少的时间内运行更多的测试用例
- 自动化脚本可重复运行
- 减少人为错误
- 克服手工测试的局限性
缺点
- 自动化测试可以完全替代手工测试【自动化测试实现步骤要依赖手工测试】
- 自动化测试一定比手工测试厉害【只是存在高薪和入门得原因】
- 自动化测试可以挖掘更多bug【UI布局一类的问题自动化测试无法解决】
- 自动化测试适用于所有功能【功能测试逻辑复杂的/涉及第三方交互的都不太适合自动化测试实现】
误区
- 自动化测试可以完全替代手工测试
- 自动化测试一定比手工测试厉害
- 自动化测试可以挖掘更多bug
- 自动化测试适用于所有功能
自动化测试的分类
- 接口自动化
- 性能自动化
- UI自动化(web项目/APP项目)
- 单元测试自动化
什么是UI自动化测试?
UI:(User Interface,简称UI,用户界面)是系统和用户之间进行交互和信息交换的媒介
web自动化测试和移动自动化测试都属于UI自动化测试通过软件或者工具对项目界面进行测试的过程叫做UI自动化测试
包含web自动化和APP自动化
什么项目适合UI自动化测试?
- 需求变动不频繁
- 项目周期长
- 需要做大量回归测试的项目
UI自动化测试在什么时候开始?
功能测试完毕(手工测试)
可以与功能测试同步实现【1、公司具备自动化测试组,2、部署自动化测试环境/分析需求/编写自动化测试用例】
UI自动化测试所属分类?
1.黑盒测试(功能测试)
2.白盒测试(单元测试)
3.灰盒测试(接口测试)
UI自动化测试属于黑盒测试(功能测试)
主流的自动化测试工具
1. QTP
QTP是一个商业化的功能测试工具,收费,支持web,桌面自动化测试。
2.Selenium(本阶段学习)
Selenium是一个开源的web自动化测试工具,免费,主要做功能测试。
3. Robot framework
Robot Framework是一个基于Python可扩展地关键字驱动的测试自动化框架
什么是selenium
Selenium是一个用于Web应用程序的自动化测试工具
selenium特点
- 开源软件:源代码开放可以根据需要来增加工具的某些功能
- 跨平台:linux、windows、mac
- 支持多种浏览器:Firefox、Chrome、IE、Edge、0pera、Safari等
- 支持移种语言:Python、Java、C#、JavaScript、Ruby、PHP等
- 成熟稳定:目前已经被google、百度、腾讯等公司广泛使用
- 功能强大:能够实现类似商业工具的大部分功能,因为开源性,可实现定制化功能
什么是驱动
你可以把它理解为操作系统和硬件设备之间的“翻译官”或“桥梁”。
环境搭建
1.Python 开发环境 Python解析器/Python IDE(Pycharm)
2.安装selenium包pip install selenium3.安装浏览器 推荐使用谷歌/火狐浏览器(兼容性好),web 自动化不针对浏览器类型
4.安装浏览器驱动--保证能够用程序驱动浏览器,实现自动化测试 【保证能够用程序驱动浏览器,实现自动化测试(需要对应浏览器品牌和版本)】
Selenium 包安装步骤
1.安装:pip install selenium
2.卸载:pip uninstall selenium
扩展:安装速度过慢,需要使用镜像源地址
浏览器驱动的安装
chrome下载地址:https://www.google.com/chrome/
谷歌驱动下载地址:
https://googlechromelabs.github.io/chrome-for-testing/
驱动版本号要和浏览器版本号对应(至少大版本)否则无效
使用stable稳定版
chromedriver把解压后的exe文件放入pycham关闭自动更新(防止更新导致驱动失效)
开始内搜services.msc找到Google更新组件全部禁用,【右键--属性--禁用】


基本代码
"""
web自动化基本代码
"""
from time import sleep
"""
1、导入包
from selenium import webdriver
2、实例化浏览器对象:类名()
driver=webdriver.Chrome()
3、打开网页 传参url;协议+域名
driver.get('')
4、观察效果
5、关闭网页
driver.close()
"""
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from time import sleep
# 指定 ChromeDriver 路径
service = Service(r"C:\Users\ZT-xcc\Desktop\Web_basic\chromedriver.exe") # 替换为你的实际路径
driver = webdriver.Chrome(service=service)
driver.get('https://www.baidu.com')
sleep(5)
driver.close()
基本代码编写注意事项
- 在实例化浏览器对象时务必记得带()->类名()
- 通过代码生成的浏览器与系统中自己使用的浏览器不是同一个,代码执行结束后会被销毁
- 如果中无法正常导入Selenium 框架包,需要在 PyCharm 中重新管理 Python 解释器
元素定位方式
Selenium提供了八种定位元素方式
1. id
2. name
3.class name
4. tag_name
5. link text
6. partial link text
7.XPath
8.CSS
id定位
说明:id定位就是通过元素的id属性来定位元素,HTML规定id属性在整个HTML文档中必须是唯一的;
前提:元素有id属性
id定位方法
element = driver.find element by id(id)
需求:打开注册网易页面,完成以下操作
1).使用id定位,输入用户名:admin
2).使用id定位,输入密码:123456
3).3秒后关闭浏览器窗口
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from time import sleep
from selenium.webdriver.common.by import By
service = Service(r"C:\Users\ZT-xcc\Desktop\Web_basic\chromedriver.exe")
driver = webdriver.Chrome(service=service)
driver.get('https://mail.163.com/register/index.htm?from=163mail&utm_source=163mail#/pn')
sleep(3)
# 使用显示等待
account = driver.find_element(By.XPATH, '//*[@id="root"]/table/tbody/tr[3]/td/table/tbody/tr/td[3]/table/tbody/tr/td/div[3]/div[1]/div/div[1]/input')
password = driver.find_element(By.XPATH, '//*[@id="root"]/table/tbody/tr[3]/td/table/tbody/tr/td[3]/table/tbody/tr/td/div[3]/div[2]/div/div[1]/input')
account.send_keys("18790020022")
password.send_keys('123456')
login = driver.find_element(By.XPATH, '//*[@id="root"]/table/tbody/tr[3]/td/table/tbody/tr/td[3]/table/tbody/tr/td/div[3]/div[3]/button/span[1]')
login.click()
sleep(6)
driver.close()
注意事项:由于时间比较短,Dom元素需要时间加载生成,可能在查找元素时,DOM元素还未生成,所以需要设置等待时间,
找一组元素
#元素定位方法如果带有 5,则执行结果返回的是列表类型数据,里面的数据是多个元素对象
logins = driver.find_elements(By.CLASS_NAME,'mail-input-inner')
print("&&&&&&&&",logins)
#说明:可以通过列表的下标(索引)获取对应的目标元素对象,再执行操作.
logins = driver.find_elements(By.CLASS_NAME,'mail-input-inner')
print("&&&&&&&&",logins)
logins[1].send_keys('1234567')
说明:
1.XPath 即为 XML Path 的简称,它是一门在 XML 文档中查找元素信息的语言
2.HTML 可以看做是 XL 的一种实现,所以 Selenium 用户可以使用这种强大的语言在 Web 应用中
定位元素
注意:无论使用哪一种 XPath 策略(方法),定位方法都是同一个,不同策略只决定方法的参数的写法
方法:find element(By.XPATH,'XPATH路径')
路径定位(绝对路径、相对路径)
绝对路径:从最外层元素到指定元素之间所有经过元素层级的路径
1).绝对路径以/html根节点开始,使用/来分隔元素层级:
如:/html/body/div/fieldset/p[1]/input
2).绝对路径对页面结构要求比较严格,不建议使用
相对路径:匹配任意层级的元素,不限制元素的位置
1).相对路径以开始
2).格式://input 或者 //*
1.CSS(Cascading style Sheets)是一种语言,它用来描述HTML元素的显示样式;
2.在CSS中,选择器是一种模式,用于选择需要添加样式的元素;
在Selenium中也可以使用这种选择器来定位元素。
提示:
在selenium中推荐使用CSS定位,因为它比XPath定位速度要快
css选择器语法非常强大,在这里我们只学习在测试中常用的几个
element = driver.find element by css selector(css selector)
CSS定位常用策略(方式)
1.id选择器
2.class选择器
3.元素选择器
4.属性选择器
5.层级选择器
CSS 定位方法
说明:通过CSS 的选择器语法定位元素
注意:Selenium 框架官方推荐使用CSS,
因为其定位效率远高于 XPath方法:find_element by_css_selector('css策略')
说明:根据元素id属性来选择
格式:#id
例如:#userA<选择id属性值为userA的元素>
class选择器
说明:根据元素c1ass属性来选择
格式:.class
例如:.telA<选择class属性值为telA的所有元素>
元素选择器
说明:根据元素的标签名选择
格式:element
例如:input<选择所有input元素>
属性选择器
说明:根据元素的属性名和值来选择
格式:[attribute=valuel
element[attribute=value]
例如:[type="password"]<选择type属性值为password的元素>
层级选择器
说明:根据元素的父子关系来选择
格式1:element1>element2
通过element1来定位element2,并且element2必须为element1的直接子
元素
例如1:p[id='p1']>input
格式2:element1 element
例如2:p[id='p1'] input
<定位指定p元素下的直接子元素input>
通过element1来定位element2,并Helement2为element1的后代元素
<定位指定p元素下的后代元素input>
动态模板添加与移除


1.元素操作
为什么要学习操作元素的方法?
- 需要让脚本模拟用户给指定元素输入值
- 需要让脚本模拟人为删除元素的内容
- 需要让脚本模拟点击操作

操作浏览器常用方法
1.maximize window()
2.set window size(width,height)
3.set window position(x,y)
4.back()
5.forward()
6. refresh()
7.close()
8.quit()
9.title
10.current url
最大化浏览器窗口-->模拟浏览器最大化按钮
设置浏览器窗口大小-->设置浏览器宽、高(像素点)
设置浏览器窗口位置-->设置浏览器位置
后退-->模拟浏览器后退按钮
前进-->模拟浏览器前进按钮
刷新-->模拟浏览器F5刷新
关闭当前窗口-->模拟点击浏览器关闭按钮
关闭浏览器驱动对象-->关闭所有程序启动的窗口
获取页面title
获取当前页面URL





获取元素信息的常用方法
1. size
2. text
返回元素大小
获取元素的文本
3. get_attribute("xxx”)
获取属性值,传造的参数为元素的属性名
4. is_displayed()
5. is_enabled()
6.is selected()
判断元素是否可见
判断元素是否可用
判断元素是否选中,用来检查复选框或单选按钮
地示:
1.size、text:为属性,调用时无括号:如:xxx.size




鼠标操作的方法
说明:在Selenium中将操作鼠标的方法封装在ActionChains类中
实例化对象:
action =Actionchains(driver)
方法:
1. context click(element)右击 -->模拟鼠标右键点击效果
2. double click(element)双击 -->模拟鼠标双击效果
3.drag_and_drop(source, target)拖动-->模拟鼠标拖动效果
4. move_to_element(element)悬停 -->模拟鼠标悬停效果
5. perform()执行-->此方法用来执行以上所有鼠标操作
为了更好的学习其他方法,我们先学习perform()执行方法,因为所有的方法都需要执行才能生效
打开百度网页,右键
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service
from time import sleep
from selenium.webdriver.common.by import By
service = Service(r"C:\Users\ZT-xcc\Desktop\Web_basic\chromedriver.exe")
driver = webdriver.Chrome(service = service)
driver.get('https://www.baidu.com')
sleep(6)
# 定位目标元素
inputElement = driver.find_element(By.XPATH,'//*[@id="chat-input-main"]/div[4]/div[1]')
# 1、实例化鼠标对象(关联浏览器对象)
# 2、调用鼠标方法
# 3、执行方法
action = ActionChains(driver)
action.context_click(inputElement)
action.perform()
sleep(3)
driver.close()
鼠标双击-double click()
说明:模拟双击鼠标左键操作
练习
需求:打开163注册页面,输入用户名admin,暂停3秒钟后,双击鼠标左键,选中admin
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service
from time import sleep
from selenium.webdriver.common.by import By
service = Service(r"C:\Users\ZT-xcc\Desktop\Web_basic\chromedriver.exe")
driver = webdriver.Chrome(service = service)
driver.get('https://mail.163.com/register/index.htm?from=163mail&utm_source=163mail#/pn')
sleep(6)
username = driver.find_element(By.NAME,"phone")
username.send_keys('admin')
action = ActionChains(driver)
action.double_click(username)
action.perform()
sleep(6)
driver.close()
鼠标拖动-drag_and_drop()
说明:模拟鼠标拖动动作,选定拖动源元素释放到目标元素
拖动关键点分析
源元素source =driver,find element by id(xxx)
目标元素 target= driver.find_element by_id(xxx)
调用方法 action.drag and drop(source,target).perform()
练习
需求:打开'drag.htm1'页面,把红色框拖拽到蓝色方框上

鼠标悬停-move to_element()
说明:模拟鼠标悬停在指定的的元素上
练习
需求:打开百度页面,模拟鼠标悬停在'设置’按钮上
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service(r"C:\Users\ZT-xcc\Desktop\Web_basic\chromedriver.exe")
driver = webdriver.Chrome(service = service)
driver.get('https://www.baidu.com')
driver.maximize_window()
sleep(3)
setElement = driver.find_element(By.ID,'s-usersetting-top')
action = ActionChains(driver)
action.move_to_element(setElement)
action.perform()
sleep(4)
driver.close()


键盘操作
思考:如何实现复制、粘贴的操作?
说明:
1)。模拟键盘上一些按键或者组合键的输入如:Ctrl+C、Ctrl+V;
2).Selenium中把键盘的按键都封装在Keys类中
常用的键盘操作
1. send keys(Keys.BACK SPACE)删除键(BackSpace)
2. send keys(Keys.SPACE)空格键(Space)
3.send keys(Keys.TAB)制表键(Tab)
4. send keys(Keys.ESCAPE)回退键(ESc)
5.send keys(Keys.ENTER)回车键(Enter)
6.send keys(Keys.CONTROL,'a')全选(Ctrl+A)
7. send keys(Keys.CONTROL,'c')复制(Ctrl+C)
需求:打开163邮箱页面,完成以下操作
1).输入用户名:admin1,暂停2秒,删除1
2),全选用户名:admin,暂停2秒
3).复制用户名:admin,暂停2秒
4).粘贴到密码框

from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
service = Service(r'C:\Users\ZT-xcc\Desktop\Web_basic\chromedriver.exe')
driver = webdriver.Chrome(service =service)
driver.get('https://mail.163.com/register/index.htm?from=163mail&utm_source=163mail#/pn')
sleep(4)
username = driver.find_element(By.NAME,'phone')
username.send_keys('admin1')
sleep(2)
username.send_keys(Keys.BACKSPACE)
username.send_keys(Keys.CONTROL,'a')
sleep(2)
username.send_keys(Keys.CONTROL,'c')
sleep(2)
password = driver.find_element(By.NAME,'password')
password.send_keys(Keys.CONTROL,'v')
sleep(3)
driver.close()

1301

被折叠的 条评论
为什么被折叠?



