什么时候可以做UI自动化测试?
- 业务流程不频繁改动
- UI元素不频繁的改动
- 需要频繁回归的场景
- 核心场景等等
selenium简介
官方网站:https://www.selenium.dev/
适用于web浏览器测试的工具
支持的浏览器包括:IE Firefox safari chrome edge等
使用简单,可使用java,python等多种语言编写
主要有三个工具构成:Webdriver IDE Grid
chromedriver的下载
地址:http://chromedriver.storage.googleapis.com/index.html
查看自己chrome版本号
在上面的地址里面找到自己的压缩包点击进行下载
然后对zip文件进行解压缩
之后,配置环境变量,将解压缩后的文件地址配置到path环境变量即可
自动化测试用例结构分析
标准用例结构:
用例标题
前提条件
用例步骤
预期结果
实际结果
我们可以统称为五大要素,功能要素这几个可以满足测试了,那么自动化测试的用例结构呢
我们可以这样总结:
用例标题:测试包、文件、类、方法名称 用例的唯一标识
前提条件:setup、setup_class(Pytest);BeforeEach、BeforeAll;测试用例前的准备动作,比如读取数据或者driver的初始化
用例步骤:测试方法内的代码逻辑,测试用例具体的步骤行为
预期结果:assert实际结果预期结果; 断言,印证用例是否执行成功
实际结果:assert实际结果预期结果; 断言,印证用例是否执行成功
后置动作: teardown、teardown_class @AfterEach、@AfterAll(JUnit);脏数据清理、关闭driver进程
web 浏览器控制
打开网页
刷新
回退
浏览器最大化
浏览器最小化
from selenium import webdriver
import time
driver = webdriver.Chrome()
class TestWindow:
def test_window():
#打开网站
driver.get("https://www.baidu.com/")
time.sleep(2)
#刷新浏览器
driver.refresh()
time.sleep(2)
#退回
driver.back()
time.sleep(2)
#最大化
driver.maximize_window()
time.sleep(2)
#最小化
driver.minimize_window()
time.sleep(2)
if __name__ == '__main__':
TestWindow.test_window()
自动化定位策略
先看定位方式包含
通用场景:通用Web定位方式,js定位
特殊场景:弹框、日期控件、文件上传、其他场景等等
通用的Web定位方式
选择定位器通用原则
1、与研发约定的属性优先
2、身份属性id,name
3、复杂场景使用组合定位,比如xpath,css,父子定位等等
4、js定位
浏览器复用
在docs命令中开启调试,在此之前,需要把chrome关掉,使用命令
chrome --remote-debugging -port=9222
报:
C:\Users\jinlai>chrome --remote-debugging -port=9222
‘chrome’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。
需要配置环境变量或者也不用配置
找到桌面快捷方式,右键,点击打开文件所在位置,在下图位置处输入 cmd 然后回车
出来dos窗口,输入chrome --remote-debugging -port=9222,系统会自动启动一个浏览器窗口
最后直接上一串代码加深理解和记忆
import time
import allure
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
class TestGXLiuCheng:
#执行测试用例之前的操作,有多少测试用例就执行多少次
def setup_method(self, method):
options = Options()
# 和浏览器打开的调试窗口进行通信
# 浏览器要使用Chrome
options.debugger_address = "localhost:9333"
self.driver = webdriver.Chrome(options = options)
def test_login(self):
"""
测试步骤
1、打开对应网址
2、点击cas登录
3、点击用户名输入框,输入用户名
4、点击密码输入框,输入密码
5、点击登录
6、断言
:return:
"""
# 配置隐式等待时间,在查找元素的过程中,如果出现noSuchElementException,不会直接报错,而是轮询继续查找,直到超时5s为止,隐式等待是全局的
self.driver.implicitly_wait(10)
self.driver.get("这里输入对应网址即可)
#浏览器最大化
self.driver.maximize_window()
#点击cas登录
self.driver.find_element(By.XPATH, "//*[text()='Cas登录']").click()
#点击用户名输入框
self.driver.find_element(By.CSS_SELECTOR, ".ant-input").send_keys("1234567")
#点击输入密码输入框
self.driver.find_element(By.XPATH, "//input[@type='password']").send_keys("9876543210")
#点击登录
self.driver.find_element(By.CSS_SELECTOR, ".ant-btn").click()
#断言获取对象
res_text = self.driver.find_element(By.CSS_SELECTOR, ".name").text
print(res_text)
assert "供需流程系统" in res_text