用例录制
- seleniumIDE 用例录制使用场景
- 刚开始入门UI自动化测试
- 团队代码基础较差
- 技术成长之后学习价值不高
seleniumIDE 下载与安装
- 官网:https://www.selenium.dev/
- Chrome插件:https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd
- Firefox插件: https://addons.mozilla.org/en-US/frefox/addon/selenium-ide/
- github release:https://github.com/SeleniumHO/selenium-ide/releases
- 其他版本: https://addons.mozilla.org/en-GB/frefox/addon/selenium-ide/versions/
- 注意:Chrome插件在国内无法下载,Firefox可以直接下载。
- chrome 国内直接下载ide:谷歌浏览器安装Selenium IDE插件_谷歌selenium ide插件下载-CSDN博客
- 下载完成后,打开浏览器扩展程序管理,拖拽下载好的ide插件文件进入即可,
- 点击打开固定到工具栏,页面上可显示此插件
启动
- 安装完成后,通过在浏览器的菜单栏中点击它的图标来启动
- 如果没有看到图标,先确保是否安装了seleniumIDE扩展插件
- 通过以下链接访问所有插件
- Chrome:chrome://extensions
- Firefox:about:addons
seleniumIDE 常用功能
-
- 新建、保存、打开
-
- 开始和停止录制
-
- 运行8中的所有的实例
-
- 运行单个实例
-
- 调式模式
-
- 调试案例的运行速度
-
- 要录制的网址
-
- 实例列表
-
- 动作、目标、值
-
- 对单条命令的解释
-
- 运行日志
用例录制
-
- 点击打开插件seleniumIDE
-
- 点击 vreate a new project 进行新脚本录制
-
- 输入新脚本的名称,点击ok
-
- 点击右上角的按钮 REC,开始录制
-
- 输入要打开网页地址,点击 start recording开始录制
-
- 自动打开网页后,开始网页操作
-
- 操作完成后,点击stop recording停止录制,输入脚本名称保存,即可在左侧列表中看到录制成功的脚本
-
- 点击倒三角的回放按钮,即可打开网页自动回放该脚本
-
- 录制了多个用例后,点击倒三角的 run all可执行所有已成功录制的脚本
-
- 点击脚本后的三个点,点击export可导出脚本,选择对应语言即可
-
- 将导出的py文件放pycharm,即可查看脚本内容
-
- 选择 test suites,然后把录制好的多个脚本都添加到 default suite中,然后可以一起导出
-
- 插件中可以给脚本中插入等待等操作,command
用例分析
用例结构
- 结构
- 用例标题
- 前提条件
- 用例步骤
- 预期结果
- 实际结果
用例标题 | 类型 | 前提条件 | 用例步骤 | 预期结果 | 实际结果 |
---|---|---|---|---|---|
搜狗搜索功能 | 正例 | 进入搜狗页面 | 1. 输入搜索关键词 2. 按下回车键 |
1. 搜索成功 2. 搜索结果列表包含关键字 |
- 用例结构对比
用例结构 | 自动化测试用例 | 作用 |
---|---|---|
用例标题 | 测试包、文件、类、方法名称 | 用例的唯一标识 |
前提条件 | setup、setup_class (Pytest); BeforeEach、BeforeAll (JUnit) |
测试用例前的准备动作, 比如读取数据或者driver的初始化 |
用例步骤 | 测试方法内的代码逻辑 | 测试用例具体的步骤行为 |
预期结果 | assert 实际结果 = 预期结果 | 断言,印证用例是否执行成功 |
实际结果 | assert 实际结果 = 预期结果 | 断言,印证用例是否执行成功 |
后置动作 | teardown、teardown_class (Pytest); @AfterEach、@AfterAll (JUnit) |
脏数据清理、关闭 driver 进程 |
录制用例分析
IDE 录制脚本
- 脚本步骤:
- 访问搜狗网站
- 搜索框输入“霍格沃兹测试开发”
- 点击搜索按钮
- 脚本代码
# Generated by Selenium IDE
import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class Test():
def setup_method(self, method):
self.driver = webdriver.Chrome()
self.vars = {}
def teardown_method(self, method):
self.driver.quit()
def test_sougou(self):
# 打开网页,设置窗口
self.driver.get("https://www.sogou.com/")
self.driver.set_window_size(1235, 693)
# 输入搜索信息
self.driver.find_element(By.ID, "query").click()
self.driver.find_element(By.ID,"query").send_keys("霍格沃兹测试开发")
# 点击搜索
self.driver.find_element(By.ID, "stb").click()
element = self.driver.find_element(By.ID, "stb")
actions = ActionChains(self.driver)
actions.move_to_element(element).perform()
录制用例优化
- 增加断言信息,判断实际结果和预期结果是否一致
# Generated by Selenium IDE
import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class TestDemo():
def setup_method(self, method):
self.driver = webdriver.Chrome()
self.vars = {}
def teardown_method(self, method):
self.driver.quit()
def test_demo(self):
# 打开网页
self.driver.get("https://www.sogou.com/")
self.driver.set_window_size(1157, 895)
# 输入搜索信息
self.driver.find_element(By.ID, "query").click()
self.driver.find_element(By.ID, "query").send_keys("霍格沃兹测试开发")
# 点击搜索
self.driver.find_element(By.ID, "stb").click()
element = self.driver.find_element(By.ID, "stb")
actions = ActionChains(self.driver)
actions.move_to_element(element).perform()
# 增加断言
# 判断搜索结果列表是否包含 霍格沃兹
res_element = self.driver.find_element(By.CSS_SELECTOR, "#sogou_vr_30000000_0
> em")
# 获取定位的文本信息
# 判断实际获取到的搜索框展示列表和预期是否一致
assert res_element.text == "霍格沃兹测试开发"