
Playwright 是由微软(Microsoft)开源的一个现代化 Web 自动化测试框架,支持多浏览器(Chromium, WebKit, Firefox)、多语言(TypeScript, JavaScript, Python, .NET),适用于端到端(E2E)测试、爬虫、自动化操作等场景。
Playwright 作为一款较新的自动化测试工具,在架构、性能、易用性和稳定性等多个方面都展现出了比 Selenium 更现代的优势。
Playwright 的许多设计细节极大地提升了开发效率:
time.sleep或显式等待代码的需要,从源头上减少了因页面加载时间不确定而导致的测试失败。安装
pip install --upgrade pip # 升级pip
pip install playwright # 安装playwright
playwright install # 安装自带浏览器,非必须,但对环境不熟悉的也推荐
# playwright -h 查看用法示例:打开网页获取title
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(channel="chrome", headless=False)
page = browser.new_page()
page.goto("https://playwright.dev")
print(page.title())
browser.close()注:如果不带channel参数,则会提示:

这就需要执行playwright install安装浏览器(不会覆盖系统浏览器)channel="chrome" 则会使用系统已安装的浏览器。executable_path="chrome-win64\\chrome.exe"则可以指定浏览器可执行文件的路径。也支持协程异步API:import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://playwright.dev")
print(await page.title())
await browser.close()
asyncio.run(main())测试生成器 Test generatorPlaywright 自带一个 codegen 命令,运行 codegen 命令时,将打开两个窗口:一个是浏览器窗口,用于与要测试的网站进行交互;另一个是 Playwright 检查器窗口,用于记录测试结果,然后可以复制代码到编辑器中。这种方式对我们定位元素,执行操作,帮助极大。
playwright codegen --channel chrome注:--channel chrome 参数可以打开系统浏览器,否则就要安装Playwright自带浏览器了,没有发现可以配置浏览器路径的参数。

注意选择目标代码:

定位元素
推荐的定位器:
page.get_by_role() 按元素的 ARIA 角色、ARIA 属性和可访问名称定位元素。
page.get_by_text() 按文本内容定位。
page.get_by_label() 按关联标签的文本查找表单控件
page.get_by_placeholder() 按占位符定位输入框.
page.get_by_alt_text() 通过文本替代项来定位元素(通常是图像)
page.get_by_title() 按元素的标题属性定位元素
page.get_by_test_id() 根据元素的 data-testid 属性定位元素(可以配置其他属性)。注:ARIA 是 Accessible Rich Internet Applications 的缩写,它是一组属性,用于使 Web 内容和 Web 应用程序(特别是那些使用 Ajax 和 JavaScript 开发的)更易于残障人士访问。
传统的定位器:
page.locator("#nav-bar :text('Home')").click() CSS定位
page.locator("xpath=//button").click() XPath定位
page.locator("button").locator("nth=0").click() 第N个定位
page.get_by_role("listitem").filter(has=child) 父子元素定位,child是一个locator
还有其他一些定位器,详见文档。
执行操作
page.get_by_role("textbox").fill("Peter") 文本输入
page.locator('#area').press_sequentially('Hello World!') 逐个输入
page.get_by_label('XL').check() 选中选项,单选框,复选框
page.get_by_label('Choose a color').select_option('blue') 选中列表选项
page.get_by_role("textbox").press("Control+ArrowRight") 键盘按键
page.get_by_label("Upload file").set_input_files('myfile.pdf') 上传文件
page.get_by_label('password').focus() 选中元素
page.locator("#item-to-be-dragged").drag_to(page.locator("#item-to-drop-at")) 拖拽
page.get_by_text("Footer text").scroll_into_view_if_needed() 滚动条鼠标操作
# 普通的单击
page.get_by_role("button").click()
# 双击
page.get_by_text("Item").dblclick()
# 右击
page.get_by_text("Item").click(button="right")
# 按住 Shift 单击
page.get_by_text("Item").click(modifiers=["Shift"])
# 鼠标悬停
page.get_by_text("Item").hover()
# 点击左上角
page.get_by_text("Item").click(position={ "x": 0, "y": 0})
# 按下鼠标
page.mouse.down()
# 抬起鼠标
page.mouse.up()
# 滚轮
page.mouse.wheel(5, 5)好了,就介绍到这里了。更多详细的内容,请参考官方文档: