深圳沙井做公司网站,机械工业第六设计研究院有限公司,h5页面怎么做,重庆市城市建设规划官方网站目录#xff1a;
selenium多浏览器处理执行 javascript 脚本headless无头浏览器使用capability配置参数解析企业微信实战cypress测试框架介绍Playwright测试框架介绍
1.selenium多浏览器处理
多浏览器测试背景
用户使用的浏览器(firefox,chrome,IE 等)web 应用应该能在任何…目录
selenium多浏览器处理执行 javascript 脚本headless无头浏览器使用capability配置参数解析企业微信实战cypress测试框架介绍Playwright测试框架介绍
1.selenium多浏览器处理
多浏览器测试背景
用户使用的浏览器(firefox,chrome,IE 等)web 应用应该能在任何浏览器上正常的工作这样能吸引更多的用户来使用 多浏览器测试概述
是跨不同浏览器组合验证网站或 web 应用程序功能的过程是兼容性测试的一个分支用于保持功能和质量的一致性适用于面向客户的网站和组织内部使用的站点 多浏览器的实现方案 pytest hook 函数
pytest_addoption 添加命令行参数组/命令行参数pytest_configure 解析命令行选项每个插件都会用到这个hook函数 pytest_addoption 与 pytest_configure
pytest_addoption parser.getgroup 创建/获取组名addoption 添加一个命令行选项pytest_configure: 通过config 对象的getoption()方法获取命令行参数将命令行获取到的内容赋值给变量
代码示例
def pytest_addoption(parser: Parser):hdc parser.getgroup(hdc)hdc.addoption(--browser) 运行结果 代码示例
conftest.py
from _pytest.config.argparsing import Parserdef pytest_collection_modifyitems(session, config, items: list):print(items)for item in items:item.name item.name.encode(utf-8).decode(unicode-escape)item._nodeid item.nodeid.encode(utf-8).decode(unicode-escape)def pytest_addoption(parser:Parser):# group 将下面所有的 option都展示在这个group下。mygroup parser.getgroup(hdc)# 注册一个命令行选项mygroup.addoption(--browser,# 参数的默认值defaultChrome,# 存储的变量(起别名)destwo_shi_bie_ming,# 参数的描述信息helpset your browser,such asChrome, Firefox, Headless...)global_env {}def pytest_configure(config):#使用别名browser config.getoption(wo_shi_bie_ming, defaultChrome)# browser config.getoption(--browser, defaultChrome)print(f通过命令行获取的浏览器为{browser})tmp {browser: browser}global_env.update(tmp) test_demo.py
import time
from selenium import webdriver
from web_automation_testing.test_multi_brower.conftest import global_envclass TestSearch:def setup_class(self):self.browser global_env.get(browser)if self.browser firefox:self.driver webdriver.Firefox()else:self.driver webdriver.Chrome()self.driver.maximize_window()self.driver.implicitly_wait(3)def teardown_class(self):self.driver.quit()def test_get(self):self.driver.get(https://www.baidu.com/)time.sleep(2)assert True运行结果 2.执行 javascript 脚本
JavaScript简介
JavaScript 是一种具有函数优先的轻量级解释型或即时编译型的编程语言可以嵌入到HTML页面对浏览器事件做出响应也可以基于Node.js技术进行服务器端编程
自动化测试中使用JavaScript脚本
使用场景部分场景使用selenium原生方法无法解决
修改时间控件滚动到某个元素其他场景
JavaScript 使用思路
页面调试 js 脚本Selenium执行js
JavaScript调试方法
进入 console 调试js 脚本如果有返回值则会在浏览器返回
JS 脚本-元素操作
通过 css 查找元素 点击元素对应clickinput标签对应的值(对应send_keys)元素的类属性元素的文本属性
// 百度首页https://www.baidu.com/
// 修改属性值
document.querySelector(#kw).value 邯郸学院
// 点击操作
document.querySelector(#su).click()// 淘宝首页 https://www.taobao.com/
// 修改元素的类属性
document.querySelector(#J_SiteNavMytaobao).className
site-nav-menu site-nav-mytaobao site-nav-multi-menu J_MultiMenu site-nav-menu-hover// 测试人首页https://ceshiren.com/
// 获取元素内的文本信息
document.querySelector(#ember63).innerText
JS脚本滚动操作
页面滚动到底部指定到滚动的位置
document.documentElement.scrollTop10000
document.querySelector(css表达式).scrollIntoView();
Selenium执行js
Selenium执行js 调用执行js方法在 js 语句中添加 return代码可以获取js的执行结果结合 find_element 方法 代码示例
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import Bydef test_select_down():driver webdriver.Chrome()driver.implicitly_wait(3)driver.maximize_window()# 打开网址driver.get(https://www.taobao.com/)# 修改下拉框属性sleep(1)driver.execute_script(document.querySelector(#J_SiteNavMytaobao).classNamesite-nav-menu site-nav-mytaobao site-nav-multi-menu J_MultiMenu site-nav-menu-hover)driver.find_element(By.XPATH, //*[text()已买到的宝贝]).click()sleep(5)driver.quit()def test_data_time():# 打开网址driver webdriver.Chrome()driver.implicitly_wait(3)driver.maximize_window()driver.get(https://www.12306.cn/index/)sleep(1)# 修改出发日期driver.execute_script(document.querySelector(#train_date).value2022-12-22)sleep(1)# 打印出发日期 返回值的使用train_data driver.execute_script(return document.querySelector(#train_date).value)print(train_data)sleep(3)3.headless无头浏览器使用
是一个配置浏览器启动的选项类用于自定义和配置Driver会话常见使用场景 设置无头模式:不会显示调用浏览器避免人为干扰的问题。设置调试模式:调试自动化测试代码浏览器复用https://sites.google.com/a/chromium.org/chromedriver/capabilities 添加启动配置(arguments)-Python版本
无头模式 --headless窗体最大化 start-maximized指定浏览器分辨率 window-size1920x3000
from selenium import webdriver
from selenium.webdriver.common.by import Bydef test_chrome_pref():options webdriver.ChromeOptions()# 无头模式options.add_argument(--headless)# 窗体最大化options.add_argument(start-maximized)# 指定浏览器分辨率options.add_argument(window-size1920x3000)driver webdriver.Chrome(chrome_optionsoptions)# 打开测试人页面driver.get(https://ceshiren.com/)# 点击登录login_button_text driver.find_element(By.CSS_SELECTOR, .login-button).textprint(login_button_text)driver.quit()4.capability配置参数解析
capability概述
Capabilities是WebDriver支持的标准命令之外的扩展命令(配置信息)配置web驱动的属性如浏览器名称、浏览器平台等。结合Selenium Grid完成分布式、兼容性等测试官网地址 https://www.selenium.dev/zh-cn/documentation/webdriver/capabilities/shared/
Selenium Grid Selenium Grid 允许我们在多台机器上并行运行测试并集中管理不同的浏览器版本和浏览器配置而不是在每个单独的测试中。 官网地址https://www.selenium.dev/documentation/grid/ 演示环境https://selenium-node.hogwarts.ceshiren.com/ui#
保证本地可以正常调通实例化Remote()类并添加相应的配置 远程地址设备配置 代码示例
import time
from selenium import webdriver
from selenium.webdriver.common.by import Bydef test_capabilitie1():# 切换成 windows 就会报错capabilities {browserName:chrome,platformName:windows}# 通过 desired_capabilities 添加配置信息driver webdriver.Chrome(desired_capabilitiescapabilities)driver.implicitly_wait(5)driver.get(https://ceshiren.com/)text driver.find_element(By.CSS_SELECTOR, .login-button).textprint(text)time.sleep(30)driver.quit()def test_capabilitie2():hogwarts_grid_url https://selenium-node.hogwarts.ceshiren.com/wd/hubcapabilities {browserName:chrome,browserVersion:101.0}# 配置信息# 实例化Remote获取可以远程控制的driver实例对象# 通过 command_executor 配置selenium hub地址# 通过 desired_capabilities 添加配置信息driver webdriver.Remote(command_executorhogwarts_grid_url,desired_capabilitiescapabilities)driver.implicitly_wait(5)driver.get(https://ceshiren.com/)text driver.find_element(By.CSS_SELECTOR, .login-button).textprint(text)time.sleep(3)driver.quit()
5.企业微信实战
6.cypress测试框架介绍
cypress简介
基于 JavaScript 的前端测试工具可以对浏览器中运行的任何内容进行快速、简单、可靠的测试对每一步操作都支持回看覆盖了测试金字塔模型的所有测试类型【界面测试集成测试单元测试】底层协议不采用 WebDriver Cypress官网https://www.cypress.io/
cypress与selenium对比
项目CypressSelenium支持语言JavascriptJava, Python, Javascript, Ruby, C#等支持浏览器Chrome、Electron各种主流浏览器主要使用者前端开发人员QA使用的测试框架Mocha无限制是否需要浏览器驱动器否需要测试速度快略慢录制测试视频、快照支持支持但需要写代码社区支持略显薄弱强大 cypress环境部署
安装node.js 官网地址https://nodejs.org/zh-cn/安装cypress 初始化项目npm init配置淘宝镜像npm config set registry http://registry.npm.taobao.org安装cypressnpm install cypress --save-dev打开cypress npx cypress open
cypress基本用法
describe 声明一个测试用例集合beforeEach 测试用例前置操作相当于setupit 声明一个测试用例cy.get 定位元素用css定位type 输入文本click 点击操作should 断言
使用vscode装一下插件 npm init
npm install cypress –-save-dev 7.Playwright测试框架介绍
Playwright 简介
Playwright 官网https://playwright.dev/python/docs/introWeb 自动化测试框架。跨平台多语言支持。支持 Chromium、Firefox、WebKit 等主流浏览器自动化操作。 Playwright 的优点
支持所有流行的浏览器。速度更快更可靠的执行。更强大的自动化测试配置。强大的工具库Codegen、Playwright inspector、Trace Viewer。
Playwright 原理 Playwright 与 selenium 对比
项目PlaywrightSelenium是否需要驱动否需要对应浏览器 webdriver支持语言Java, Python, JavascriptJava, Python, Javascript, Ruby, C#等支持浏览器Chrome、Firefox 等Chrome、Firefox 等通讯方式websocket 双向通讯协议http 单向通讯协议使用的测试框架无限制(pytest,unittest)无限制(pytest,unittest)测试速度快慢录制测试视频、快照支持支持社区支持微软thoughtworks 公司 Playwright 核心工具
Codegen通过记录你的操作来生成测试。 将它们保存为任何语言。Playwright inspector 检查页面、生成选择器、逐步执行测试、查看点击点、探索执行日志。Trace Viewer捕获所有信息以调查测试失败。 Playwright 跟踪包含测试执行截屏、实时 DOM 快照、动作资源管理器、测试源等等。
Playwright 环境安装
安装 playwright 插件 pip install pytest-playwright安装所需的浏览器 playwright install 官网介绍https://playwright.dev/python/docs/intro Codegen
# 设定展示窗口大小
playwright codegen --viewport-size800,600 地址
# 指定设备
playwright codegen --deviceiPhone 11 地址
其他参数https://playwright.dev/python/docs/codegen Codegen-保存登录状态
场景单点登录、验证码问题
# 保存登录状态
playwright codegen --save-storageauth.json
# 加载认证信息
playwright codegen --load-storageauth.json 地址 Playwright 常用API Actions | Playwright Python
常用API含义start()实例化playwrightchromium().launch()打开chrome浏览器new_page()打开一个窗口页面page.goto()跳转到某个地址page.locator(““)定位某个元素click()点击元素fill()输入内容keyboard().down()键盘事件screenshot()截图操作
Playwright 使用实例
from playwright.sync_api import sync_playwright, expectdef test_playwright():# 实例化playwrightplaywright sync_playwright().start()# 打开chrome浏览器,headless默认是True,无头模式,这里设置为False方便查看效果browser playwright.chromium.launch(headlessFalse)# 打开一个窗口页面page browser.new_page()# 在当前窗口页面打开测试人网站page.goto(https://ceshiren.com/)# 定位搜索按钮并点击page.locator(#search-button).click()# 定位搜索框并输入web自动化page.locator(#search-term).fill(web自动化)# 使用keyboard.down模拟键盘的enter事件page.keyboard.down(Enter)# 断言搜索结果result page.locator(.listli:nth-child(1) .topic-titlespan)expect(result).to_contain_text(自动化)# 截图page.screenshot(path./datas/screenshot/screenshot.png)# 用例完成后先关闭浏览器browser.close()# 然后关闭playwright服务playwright.stop()Trace Viewer 简介 Trace viewer | Playwright Python
Trace Viewer 使用
from playwright.sync_api import sync_playwright, expectdef test_playwirght_trace():# 实例化一个playwright对象playwright sync_playwright().start()# 启动谷歌浏览器模式使用无头模式browser playwright.chromium.launch(headlessFalse)# trace 的配置# 1. 生成 一个 context 实例context browser.new_context()# 2. 添加 trace 的配置信息context.tracing.start(screenshotsTrue, snapshotsTrue, sourcesTrue)# 3. 使用填加了trace 配置的 context 实例去实例化一个page对象page context.new_page()# 跳转到ceshiren页面page.goto(https://ceshiren.com/)# 点击搜索按钮 输入css定位page.locator(#search-button).click()# 输入搜索的内容 输入css定位page.locator(#search-term).fill(appium)# 按下回车键page.keyboard.down(Enter)# time.sleep(3)result page.locator(.results .item:nth-child(1) .topic-title)expect(result).to_contain_text(appium)# 4. 在关闭浏览器之前一定要结束tracecontext.tracing.stop(path./datas/playwirght_trace.zip)browser.close()# 打开trace playwright show-trace trace.zip