一、基础概念

Plyawright仅支持Chromeium(Chrome、Edge)、safari内核浏览器

具有异步/同步

可以调用控制带(F12)获取信息,模拟弱网、兼容性....

二、安装playwright

安装pytest的playwright插件

# 安装
pip install pytest-playwright
# 更新
pip install pytest-playwright -U

也可以单单只安装playwright

安装浏览器

playwright install       # 安装所有支持的浏览器
playwright install chrome   # 安装Chrome浏览器
playwright install firefox    # 安装火狐浏览器

三、脚本格式

import pytest
from playwright.sync_api import expect, Page

@pytest.mark.web
def test_webui(page: Page) -> None:
    page.goto("https://www.baidu.com")
    page.screenshot(path = "test.png")
    expect(page).to_have_title("百度一下,你就知道")

四、Codegen代码生成(录制脚本)

可以录制脚本,他能将在浏览器中的操作实时翻译成Playwright代码

启动Codegen

playwright codegen {$URL}

执行后出现两个窗口

  • 浏览器窗口:再次窗口的所有操作(点击、输入、选择等)都将被记录,可以完全模拟用户的操作

  • Playwright Inspector窗口:实时显示操作所对应的Playwright Python代码

添加断言

codegen会自动记录下在浏览器中的用户行为,但是无法自动记录断言(因为这个不是行为)。Inspector按钮明确需要进行断言类型。

五、pytest命令

--headed 在headed模式下运行测试(默认无头)

--browser 指定浏览器类型:chromium、firefox、webkit

--browser-channel 要使用的浏览器频道

--slowmo 将playwright操作减慢指定毫秒数

--device 要模拟的设备

--output 测试生成的产物存储目录

--tracing 是否为每个测试记录trace(追踪信息),可选on\off或retain-on-failure 默认off

--video 是否为每个测试记录视频,可选on\off或retain-on-failure 默认off

--screenshot 是否为每次测试后自动捕获截图,可选on\off或only-on-failure 默认off

--full-page-screenshot 是否在失败是截取整个页面,默认仅捕获视口,需要同时启用--screenshot 参是,默认off

六、Playwright API应用

页面交互

页面导航

方法

描述

示例与注解

page.goto(url)

打开指定URL

关键参数wait_until: 控制goto方法什么时候返回。可选值:

“load” (默认)

“domcontentloaded”

“networkidle”

“commit”

“networkidle”在等待动态加载内容时非常有用,他会等待网络连接在一段时间内不再活跃

page.goto("https://www.baidu.com")

page.goto(url, wait_until = "networkidle")

page.go_back()

浏览器后退,返回上一页

page.go_back()

page.go_forward()

浏览器前进,返回下一页

page.go_forward()

page.reload()

重载当前页面,等同于浏览器刷新

page.reload()

页面状态

方法

描述

示例与注解

page.url

获取当前页面的URL

assert "login" in page.url

page.title()

获取当前页面的标题(title)

page_title = page.title()

assert page_title == "用户登录 - MyApp"

page.content()

获取当前页面完整的html内容

html_content = page.content()

assert "版权所有" in html_content

元素定位