最新出炉 -Web自动化测试之playwright:概述 📅 发布时间:2026/7/11 11:02:04 👁️ 浏览次数: 概述playwright是由微软开发的Web UI自动化测试工具 支持Node.js、Python、C# 和 Java语言本文将介绍playwright的特性以及它的简单使用。playwright特性playwright具有以下特点一、支持所有主流浏览器支持所有主流浏览器基于Chromium内核的Google Chrome 和 Microsoft Edge浏览器), WebKit内核的Apple Safari 和 Mozilla Firefox浏览器不支持IE11。跨平台Windows、Linux 和macOS可用于模拟移动端WEB应用的测试不支持在真机上测试。支持无头模式默认和有头模式二、快速可靠的执行自动等待元素Playwright基于Websocket协议可以接受浏览器服务端的信号。selenium采用的是HTTP协议只能客户端发起请求。浏览器上下文并行单个浏览器实例下创建多个浏览器上下文每个浏览器上下文可以处理多个页面。有弹性的元素选择可以使用文本、可访问标签选择元素。三、强大的自动化能力playwright是一个进程外自动化驱动程序它不受页面内JavaScript执行范围的限制可以自动化控制多个页面。强大的网络控制Playwright 引入了上下文范围的网络拦截来存根和模拟网络请求。现代web特性支持Shadow DOM选择元素位置定位页面提示处理Web Worker等Web API。覆盖所有场景支持文件下载、上传、OOPIFout-of-process iframes输入、点击暗黑模式等。安装Playwright有Node.js、Python、C# 和 Java语言版本本文介绍Python版本的Playwright使用方法。Playwright的Python版本仓库地址https://github.com/microsoft/playwright-python官方文档地址Getting started | Playwright PythonPlaywright安装简单pip安装时会自动下载浏览器驱动pip install playwright playwright install # 安装支持的浏览器cr, chromium, ff, firefox, wk 和 webkit playwright install chromium # 安装指定的chromium浏览器安装时会自动下载浏览器依赖windows系统在%USERPROFILE%\AppData\Local\ms-playwright路径下。命令行工具脚本录制在命令行窗口使用如下语法格式进行脚本录制npx playwright codegen [options] [url]options参数-o, --output file name 保存生成脚本--target language 生成的脚本语言可以设置javascript, test, python, python-async和csharp默认为python。-b, --browser browserType 要使用的浏览器可以选择cr, chromium, ff, firefox, wk和webkit默认chromium。--channel channelchromium版本比如chrome, chrome-beta, msedge-dev等--color-scheme scheme模拟器的颜色主题可选择light 或者 dark样式。--device deviceName 模拟的设备比如iPhone 11。--save-storage filename 保存上下文状态用于保存cookies 和localStorage可用它来实现重用。例如playwright codegen --save-storageauth.json--load-storage filename 加载--save-storage 保存的数据重用认证数据。--proxy-server proxy 指定代理服务器--timezone time zone 指定时区--geolocation coordinates 指定地理位置坐标--lang language 指定语言/地区比如中国大陆zh-CN--timeout timeout 超时时间定位毫秒默认10000ms--user-agent ua string 用户代理--viewport-size size 浏览器窗口大小-h, --help 查看帮助信息示例模拟iPhone 12 Pro设备打开百度使用Chromium驱动生成的脚本语言设置为python保存名称为test_playwright.pyplaywright codegen -o test_playwright.py --target python -b chromium --deviceiPhone 12 Pro https://www.baidu.com/对页面进行的操作会生成对应脚本代码。打开网页语法格式npx playwright open [options] [url]除了没有-o和--targetoptions参数外playwright open支持playwright codegen的其它参数。playwright open https://www.baidu.com/ # 默认使用Chromium打开 playwright wk https://www.baidu.com/ # 使用WebKit打开 playwright open --deviceiPhone 12 Pro https://www.baidu.com/ # 使用iPhone 12 Pro模拟器打开截图语法格式npx playwright open [options] [url]除了没有-o和--targetoptions参数外playwright open支持playwright codegen的其它参数。playwright open https://www.baidu.com/ # 默认使用Chromium打开 playwright wk https://www.baidu.com/ # 使用WebKit打开 playwright open --deviceiPhone 12 Pro https://www.baidu.com/ # 使用iPhone 12 Pro模拟器打开截图语法格式npx playwright screenshot [options] url filenameoptions参数和playwright codegen的选项类似可以使用playwright screenshot --help命令查看。playwright screenshot --deviceiPhone 12 Pro -b wk https://www.baidu.com/ baidu-iphone.png # 截取显示的页面 playwright screenshot --full-page --deviceiPhone 12 Pro -b wk https://www.baidu.com/ baidu-iphone-full-page.png # 截取当前全部页面同步和异步APIPlaywright支持同步和异步两种API使用异步API需要导入asyncio库它是一个可以用来实现Python协程的库下面介绍如何使用python语言编写简单的playwright自动化脚本。一共有2条测试用例用例1步骤如下chrome浏览器打开百度搜索框输入“test”点击百度一下搜索点击搜索结果的第2页用例2步骤chrome浏览器打开搜狗搜索搜索框输入“test”点击搜狗搜索点击搜索结果的第2页1、同步方式import time from playwright.sync_api import sync_playwright def testcase1(): print(testcase1 start) with sync_playwright() as p: browser p.chromium.launch(headlessFalse) page browser.new_page() page.goto(https://www.baidu.com/) print(page.title()) page.fill(input[name\wd\], test) page.click(text百度一下) page.click(#page text2) browser.close() print(testcase1 done) def testcase2(): print(testcase2 start) with sync_playwright() as p: browser2 p.chromium.launch(headlessFalse) page2 browser2.new_page() page2.goto(https://www.sogou.com/) print(page2.title()) page2.fill(input[name\query\], test) page2.click(text搜狗搜索) page2.click(#sogou_page_2) browser2.close() print(testcase2 done) start time.time() testcase1() testcase2() end time.time() print(Running time: %s Seconds%(end-start))执行结果testcase1 start 百度一下你就知道 testcase1 done testcase2 start 搜狗搜索引擎 - 上网从搜狗开始 testcase2 done Running time: 11.476110458374023 Seconds2、异步方式import asyncio import time from playwright.async_api import async_playwright async def testcase1(): print(testcase1 start) async with async_playwright() as p: browser await p.chromium.launch(headlessFalse) page await browser.new_page() await page.goto(https://www.baidu.com/) print(await page.title()) await page.fill(input[name\wd\], test) await page.click(text百度一下) await page.click(#page text2) await browser.close() print(testcase1 done) async def testcase2(): print(testcase2 start) async with async_playwright() as p: browser2 await p.chromium.launch(headlessFalse) page2 await browser2.new_page() await page2.goto(https://www.sogou.com/) print(await page2.title()) await page2.fill(input[name\query\], test) await page2.click(text搜狗搜索) await page2.click(#sogou_page_2) await browser2.close() print(testcase2 done) async def main(): task1 asyncio.create_task(testcase1()) task2 asyncio.create_task(testcase2()) tasks [task1,task2] print(before await) await asyncio.gather(*tasks) start time.time() asyncio.run(main()) end time.time() print(Running time: %s Seconds%(end-start))执行结果before await testcase1 start testcase2 start 百度一下你就知道 搜狗搜索引擎 - 上网从搜狗开始 testcase1 done testcase2 done Running time: 6.0248863697052 Seconds可以看到使用异步编程的方式可以显著提升测试效率。浏览器前面提到过Playwright支持所有主流浏览器下面介绍4种浏览器的启动方法# chrome browser p.chromium.launch(channelchrome, headlessFalse) # Microsoft Edge browser p.chromium.launch(channelmsedge, headlessFalse) # firefox browser p.firefox.launch(headlessFalse) # webkit browser p.webkit.launch(headlessFalse)浏览器上下文在进行web自动化控制之前需要对浏览器进行实例化比如browser p.chromium.launch(channelchrome, headlessFalse)browser是一个Chromium实例创建实例其实是比较耗费资源的Playwright支持在一个browser实例下创建多个浏览器上下文BrowserContextBrowserContext的创建速度很快并且比创建browser实例消耗资源更少。对于多页面场景可以使用创建浏览器上下文的方式。import asyncio from playwright.async_api import async_playwright async def testcase1(): print(testcase1 start) async with async_playwright() as p: browser await p.chromium.launch(headlessFalse) page await browser.new_page() await page.goto(https://www.baidu.com/) print(await page.title()) await page.fill(input[name\wd\], test) await page.click(text百度一下) await page.click(#page text2) context await browser.new_context() page2 await context.new_page() await page2.goto(https://www.sogou.com/) print(await page2.title()) await page2.fill(input[name\query\], test) await page2.click(text搜狗搜索) await page2.click(#sogou_page_2) print(await page.title()) print(testcase1 done) asyncio.run(testcase1())多页面一个浏览器上下文可以有多个页面也就是多个窗口。async def testcase2(): print(testcase2 start) async with async_playwright() as p: browser await p.chromium.launch(headlessFalse) context await browser.new_context() page1 await context.new_page() await page1.goto(https://www.sogou.com/) print(await page1.title()) await page1.fill(input[name\query\], test) await page1.click(text搜狗搜索) await page1.click(#sogou_page_2) page2 await context.new_page() await page2.goto(https://www.baidu.com/) print(await page2.title()) print(testcase2 done)断言Python中可以使用assert 进行断言assert page.title() 百度一下你就知道除了使用assert断言以外还可以使用功能更加强大的断言方法Hamcrest 具有丰富的断言匹配器。Hamcrest文档PyHamcrest Tutorial — PyHamcrest 2.0.2 documentation安装PyHamcrestpip install PyHamcrestfrom hamcrest import * assert_that(page.title(), equal_to(百度一下你就知道))playwright Robot Framework库如果你使用robot framework来管理和编写测试用例可以使用robotframework-browser测试库。browser测试库的github地址https://github.com/MarketSquare/robotframework-browser, 安装方法参考README.md文档。关键字使用说明文档https://marketsquare.github.io/robotframework-browser/Browser.html安装失败https://github.com/MarketSquare/robotframework-browser/issues/682可能是node版本太高可以使用node v12.9.1版本常见报错Node版本问题Node.js is only supported on Windows 8.1, Windows Server 2012 R2, or higher. Setting the NODE_SKIP_PLATFORM_CHECK environment variable to 1 skips this check, but Node.js might not execute correctly. Any issues encountered on unsupported platforms will not be fixed.Traceback (most recent call last): File test.py, line 112, in module p RobotPlaywright() File test.py, line 29, in __init__ self.playwright sync_playwright().start() File D:\attrobot3\lib\site-packages\playwright\sync_api\_context_manager.py, line 76, in start return self.__enter__() File D:\attrobot3\lib\site-packages\playwright\sync_api\_context_manager.py, line 71, in __enter__ playwright self._playwright AttributeError: PlaywrightContextManager object has no attribute _playwright Task was destroyed but it is pending! task: Task pending coroConnection.run.locals.init() running at D:\attrobot3 \lib\site-packages\playwright\_impl\_connection.py:175 wait_forFuture pending cb[TaskWakeupMethWrapper object at 0x0000000003199288()]如果是windows7系统错误原因可能是node版本太高v12.16.2以上版本不支持win7node历史版本下载地址Index of /dist/。卸载安装低版本后再次执行脚本如果还是报上面的错误可以尝试设置系统变量 NODE_SKIP_PLATFORM_CHECK 绕过校验。set NODE_SKIP_PLATFORM_CHECK1安装msedge报错$ playwright install msedge 无法加载文件 C:\Program Files\Python37\Lib\site-packages\playwright\driver\package\bin\reinstall_msedge_stable_win.ps1因为在此系统中禁止执行脚本。有关详细信息请参阅 get-help about_signing。 CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordE xception FullyQualifiedErrorId : RuntimeException解决方案打开 Windows PowerShell执行如下命令set-ExecutionPolicy RemoteSigned重新执行playwright install msedge命令安装。最后下方这份完整的软件测试视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。
LeetCode热题100--136. 只出现一次的数字--简单 题目 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 : 输入&… 2026/7/11 1:25:25
模拟太阳光条件下太空光伏电池的光电性能测量 三结砷化镓(GaInP/InGaAs/Ge)光伏电池具备 300~1800nm 宽光谱响应、超 30% 光电转换效率及优异抗辐照性,是航天器在轨运行的核心电源。其光电性能需在 AM0标准条件下标定,以匹配太空环境的太阳辐照特性。地面太阳光模拟器法可控性… 2026/7/6 15:46:50
反向海淘代购系统:让全球买家“秒买”中国货的数字化桥梁 ——架构、盈利与合规的全景拆解一、为什么是“反向” 过去十年,国人热衷“海淘”洋货;如今,中国制造、中国价格、中国速度反向吸引全球消费者。反向海淘代购系统,就是帮海外 C 端或小 B 用户,在淘宝/1688 下单、集运、… 2026/5/17 2:21:12
Sense健身追踪功能深度解析:实时卡路里估算与重复计数技术 Sense健身追踪功能深度解析:实时卡路里估算与重复计数技术 【免费下载链接】sense Enhance your application with the ability to see and interact with humans using any RGB camera. 项目地址: https://gitcode.com/gh_mirrors/se/sense 想要通过摄像头就… 2026/7/11 11:00:45
FGO-py:5分钟快速上手的全智能FGO自动化助手,解放双手的终极懒人方案 FGO-py:5分钟快速上手的全智能FGO自动化助手,解放双手的终极懒人方案 【免费下载链接】FGO-py 自动爬塔! 自动每周任务! 全自动免配置跨平台的Fate/Grand Order助手.启动脚本,上床睡觉,养肝护发,满加成圣诞了解一下? 项目地址: https://gitcode.com/G… 2026/7/11 11:00:45
如何在5分钟内掌握九大网盘直链下载:开源工具LinkSwift完整指南 如何在5分钟内掌握九大网盘直链下载:开源工具LinkSwift完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云… 2026/7/11 10:56:44
(5-5)地图、树结构以及节点相关的类和方法 地图、树结构以及节点相关的类和方法碍物后的新路线,如图5-3所示。蓝色路线表示第一次搜索的路径,红色路线表示发现新障碍物后重规划的路径。图5-3 路线可视化图 2026/7/11 10:52:44
猫抓(cat-catch):告别网页媒体下载烦恼的终极解决方案 猫抓(cat-catch):告别网页媒体下载烦恼的终极解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经遇到过这样的情况&… 2026/7/11 10:52:43
【服装质检】印花怎么检测? 在纺织服装行业,面料质量检测是保障产品品质的关键环节。长期以来,传统的人工质检方式不仅效率低下、成本高昂,且受限于人眼疲劳和主观判断,难以实现稳定、一致的检测标准。随着人工智能(AI)技术的兴起&… 2026/7/11 10:50:43
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08