当前位置: 首页 > news >正文

最新出炉 -Web自动化测试之playwright:概述

概述

playwright是由微软开发的Web UI自动化测试工具, 支持Node.js、Python、C# 和 Java语言,本文将介绍playwright的特性以及它的简单使用。

playwright特性

playwright具有以下特点:

一、支持所有主流浏览器

二、快速可靠的执行

三、强大的自动化能力

安装

Playwright有Node.js、Python、C# 和 Java语言版本,本文介绍Python版本的Playwright使用方法。

Playwright的Python版本仓库地址:https://github.com/microsoft/playwright-python

官方文档地址:Getting started | Playwright Python

Playwright安装简单,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 <channel>:chromium版本,比如chrome, chrome-beta, msedge-dev等,
--color-scheme <scheme>:模拟器的颜色主题,可选择light 或者 dark样式。
--device <deviceName> :模拟的设备,比如iPhone 11。
--save-storage <filename> :保存上下文状态,用于保存cookies 和localStorage,可用它来实现重用。例如playwright codegen --save-storage=auth.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.py:

playwright codegen -o test_playwright.py --target python -b chromium --device="iPhone 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 --device="iPhone 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 --device="iPhone 12 Pro" https://www.baidu.com/ # 使用iPhone 12 Pro模拟器打开
截图

语法格式:

npx playwright screenshot [options] <url> <filename>

options参数和playwright codegen的选项类似,可以使用playwright screenshot --help命令查看。

playwright screenshot --device="iPhone 12 Pro" -b wk https://www.baidu.com/ baidu-iphone.png # 截取显示的页面 playwright screenshot --full-page --device="iPhone 12 Pro" -b wk https://www.baidu.com/ baidu-iphone-full-page.png # 截取当前全部页面

同步和异步API

Playwright支持同步和异步两种API,使用异步API需要导入asyncio库,它是一个可以用来实现Python协程的库,

下面介绍如何使用python语言编写简单的playwright自动化脚本。

一共有2条测试用例,用例1步骤如下:

  1. chrome浏览器打开百度
  2. 搜索框输入“test”
  3. 点击百度一下搜索
  4. 点击搜索结果的第2页

用例2步骤:

  1. chrome浏览器打开搜狗搜索
  2. 搜索框输入“test”
  3. 点击搜狗搜索
  4. 点击搜索结果的第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(headless=False) 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 >> text=2") browser.close() print('testcase1 done') def testcase2(): print('testcase2 start') with sync_playwright() as p: browser2 = p.chromium.launch(headless=False) 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 Seconds

2、异步方式

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(headless=False) 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 >> text=2") await browser.close() print('testcase1 done') async def testcase2(): print('testcase2 start') async with async_playwright() as p: browser2 = await p.chromium.launch(headless=False) 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(channel="chrome", headless=False) # Microsoft Edge browser = p.chromium.launch(channel="msedge", headless=False) # firefox browser = p.firefox.launch(headless=False) # webkit browser = p.webkit.launch(headless=False)

浏览器上下文

在进行web自动化控制之前需要对浏览器进行实例化,比如:

browser = p.chromium.launch(channel="chrome", headless=False)

browser是一个Chromium实例,创建实例其实是比较耗费资源的,Playwright支持在一个browser实例下创建多个浏览器上下文(BrowserContext),BrowserContext的创建速度很快,并且比创建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(headless=False) 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 >> text=2") 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(headless=False) 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

安装PyHamcrest:

pip install PyHamcrest
from 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 coro=<Connection.run.<locals>.init() running at D:\attrobot3 \lib\site-packages\playwright\_impl\_connection.py:175> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x0000000003199288>()]>>

如果是windows7系统,错误原因可能是node版本太高,v12.16.2以上版本不支持win7,node历史版本下载地址:Index of /dist/。

卸载安装低版本后再次执行脚本,如果还是报上面的错误,可以尝试设置系统变量 NODE_SKIP_PLATFORM_CHECK 绕过校验。

set NODE_SKIP_PLATFORM_CHECK=1
安装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%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

http://www.jsqmd.com/news/344128/

相关文章:

  • 外包干了17天,技术倒退明显
  • 2026年安徽编制考试备考:如何选择诚信可靠的教育平台 - 2026年企业推荐榜
  • 带你用python做自动化测试,这五大自动化测试框架读这一篇就够了......
  • 2026年别墅石材选型指南:四大服务商综合实力深度解析 - 2026年企业推荐榜
  • 软件测试项目实战,Web测试常用测试点,即拿即用宝典
  • 2026年初,合肥天猫代运营服务团队选择指南 - 2026年企业推荐榜
  • 2026年值得关注的五家通宵自助棋牌室企业 - 2026年企业推荐榜
  • 2026长沙SPA足浴口碑榜发布:综合评测与深度选型指南 - 2026年企业推荐榜
  • 以下7种硬件测试的种类,不知道的赶紧收藏了!
  • 2026年值得关注的GEO加盟品牌与实力厂家盘点 - 2026年企业推荐榜
  • JMeter 常用的几种断言方法,你会了吗?
  • 那么多优秀的自动化测试工具,而你只知道Selenium?
  • 2026年武汉别墅石材装饰加工厂专业选购与趋势洞察 - 2026年企业推荐榜
  • 2026全国快餐加盟榜热门之选!领跑全国川菜加盟,连锁快餐加盟创业新典范 - 栗子测评
  • 2026年评价高的机床铸件铸造/机床铸件材质品牌厂家推荐 - 行业平台推荐
  • DeepSeek架构新探索!开源OCR 2诞生!
  • 全国早餐店加盟/早餐店加盟品牌有哪些?2026用实力证明成为靠谱的早餐店加盟榜 - 栗子测评
  • 2026优选快餐加盟店/快餐店加盟/米饭快餐加盟/餐饮加盟品牌推荐,精选餐饮加盟推荐新标杆 - 栗子测评
  • 安徽事业单位考试培训机构如何选?五家实力机构解析 - 2026年企业推荐榜
  • 2026年徐州高端装修市场评估:专业工程队如何重塑家装品质标杆 - 2026年企业推荐榜
  • 鸡公煲加盟榜权威发布!领跑鸡公煲加盟,2026鸡公煲加盟十强品牌,靠谱的鸡公煲加盟品牌推荐 - 栗子测评
  • 2026砂锅粥加盟品牌/头部粥店品牌推荐/头部早餐品牌推荐盘点 - 栗子测评
  • 2026快餐加盟哪家靠谱?精选分析快餐加盟店排行榜/快餐加盟费用,解锁快餐加盟的新思路 - 栗子测评
  • 2026年初选半包装修施工队?口碑与专业度是关键 - 2026年企业推荐榜
  • 2026中式快餐加盟推荐|中式快餐加盟TOP品牌揭晓,精选中式快餐加盟品牌/中式快餐加盟盘点 - 栗子测评
  • 2026年合肥拼多多代运营服务商综合评测与选择指南 - 2026年企业推荐榜
  • 2026早餐店加盟十强品牌有哪些?全时段早餐店加盟的实力之选,优质早餐店加盟推荐 - 栗子测评
  • Freertos前置:裸机系统和多任务系统
  • 2026年质量好的直埋式聚氨酯保温管/直埋聚氨酯保温管信誉优质供应参考(可靠) - 行业平台推荐
  • Moltbot 部署至 Azure Web App 完整指南:从本地到云端的安全高效跃迁