Python + Playwright(0):从零开始学 Playwright
简介
- Playwright 是一个强大的自动化库,由微软开发,主要用于web端UI自动化测试,支持 Python、Java、JavaScript、C# 等多种编程语言;
- Playwright 仅用一个API即可自动执行Chromium、Firefox、WebKit等主流浏览器自动化操作,不仅支持无头模式和有头模式,还提供了代码录制功能,极大地提高了脚本编写效率,并且支持移动端自动化测试;
- Playwright相比已有的自动化测试框架来说,具有很多优势,比如:
- 跨浏览器:支持Chromium、Firefox、WebKit
- 跨操作系统:支持Linux、Mac、Windows
- Python(Git): https://github.com/microsoft/playwright-python
1. 安装
1.1 安装要求
在安装Playwright之前,请确保满足以下系统要求:
- Python 3.7 或更高版本
- Windows 10及以上版本,Windows Server 2016及以上版本,或Windows Subsystem for Linux (WSL)
- MacOS 12 Monterey 或 MacOS 13 Ventura
- Debian 11、Debian 12、Ubuntu 20.04 或 Ubuntu 22.04
1.2 pip安装
- 安装playwright库
pip install playwright
- 安装浏览器驱动文件
playwright install
2. Playwright基础使用方法
2.1 录制脚本方法
Playwright提供了一个非常方便的功能:脚本录制。
录制脚本用法说明如下:
playwright codegen [选项] [网址]
选项 | 描述 |
---|---|
-o, --output <文件名> | 将生成的脚本保存到文件 |
–target <语言> | 生成的代码语言,可选项包括 javascript, playwright-test, python, python-async, python-pytest, csharp, csharp-mstest, csharp-nunit, java, java-junit (默认: “python”) |
–save-trace <文件名> | 为会话记录跟踪并保存到文件 |
–test-id-attribute <属性名> | 使用指定的属性生成数据测试ID选择器 |
-b, --browser <浏览器类型> | 使用的浏览器类型,可选项包括 cr, chromium, ff, firefox, wk, webkit (默认: “chromium”) |
–block-service-workers | 阻止服务工作者 |
–channel <通道> | Chromium 的分发通道,例如 “chrome”, “chrome-beta”, “msedge-dev” 等 |
–color-scheme <方案> | 模拟首选颜色方案,可选 “light” 或 “dark” |
–device <设备名称> | 模拟设备,例如 “iPhone 11” |
–geolocation <坐标> | 指定地理位置坐标,例如 “37.819722,-122.478611” |
–ignore-https-errors | 忽略 HTTPS 错误 |
–load-storage <文件名> | 从文件加载上下文存储状态,此文件之前使用 --save-storage 保存 |
–lang <语言> | 指定语言/区域,例如 “en-GB” |
–proxy-server <代理服务器> | 指定代理服务器,例如 “http://myproxy:3128” 或 “socks5://myproxy:8080” |
–proxy-bypass <绕过域名> | 以逗号分隔的域名列表,用于绕过代理,例如 “.com,chromium.org,.domain.com” |
–save-har <文件名> | 在结束时保存包含所有网络活动的 HAR 文件 |
–save-har-glob <glob模式> | 通过将 URL 与此 glob 模式匹配来过滤 HAR 中的条目 |
–save-storage <文件名> | 在结束时保存上下文存储状态,供以后使用 --load-storage |
–timezone <时区> | 模拟的时区,例如 “Europe/Rome” |
–timeout <超时时间> | Playwright 操作的超时时间(以毫秒为单位),默认无超时 |
–user-agent <用户代理字符串> | 指定用户代理字符串 |
–viewport-size <大小> | 指定浏览器视口大小(以像素为单位),例如 “1280, 720” |
-h, --help | 显示命令帮助信息 |
通过以下命令,可以启动录制过程,并将录制的脚本保存为Python文件:
python -m playwright codegen --target python -o test_case.py -b chromium https://www.baidu.com
3.Browser、Context 和 Page的概念
3.1 Browser
Browser对象代表一个浏览器实例,Playwright支持多个浏览器(Chromium、Firefox、WebKit),每个浏览器实例都可以独立运行多个上下文和页面。
启动浏览器实例的代码示例:
browser = playwright.chromium.launch(headless=False)
3.2 Context
BrowserContext对象代表浏览器中的一个隔离环境,每个上下文都有自己独立的缓存、Cookie、存储等。
创建新上下文的代码示例:
context = browser.new_context()
3.3 Page
Page对象代表浏览器中的一个标签页(Tab),每个上下文可以包含多个页面,页面可以进行导航、交互、截图等操作。
创建新页面的代码示例:
page = context.new_page()
4. 完整代码示例
结合以上概念,下面是一个完整的示例代码,演示如何使用Browser、Context和Page对象进行自动化操作:
import re
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.baidu.com/")
# 这里可以添加更多的操作,例如搜索、点击等
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
以上代码说明如下:
-
from playwright.sync_api import Playwright, sync_playwright, expect
:从Playwright的同步API模块导入三个主要的组件。 -
Playwright
:Playwright的主要类,用于创建和控制浏览器实例。 -
sync_playwright
:一个上下文管理器,用于创建和自动关闭Playwright实例。 -
expect
:一个用于断言的模块,可以检查页面的状态,确保测试的预期结果。 -
playwright.chromium.launch(headless=False)
:启动Chromium浏览器,浏览器以有头模式运行。 -
browser.new_context()
:创建一个新的浏览器上下文,隔离测试环境。 -
context.new_page()
:在该上下文中打开一个新页面。 -
page.goto("https://www.baidu.com/")
:导航到百度首页,准备进行自动化操作。 -
context.close()
:关闭当前浏览器上下文,释放相关资源。 -
browser.close()
:关闭浏览器实例。
总结
Playwright作为一个功能强大且易于使用的自动化测试框架,无论是对于初学者还是有经验的测试工程师,都是一个值得学习和使用的工具。通过本文的介绍,希望能帮助大家快速入门Playwright,并将其应用到实际的自动化测试工作中。