py 用 playwright 做 web自动化测试

本文介绍Playwright自动化测试工具,涵盖安装配置、基本使用方法及示例代码。通过Playwright可以实现网页测试、办公自动化等多种应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能与竞品对比

web 自动化测试, 是指 用运行代码的方式, 在浏览器中操作网页, 解放双手与眼睛. 可以用来做

  1. 自己网页的测试验收
  2. 办公自动化, 比如把 excel 中的信息录入到 web系统.
  3. 外挂, 抢票什么的.

Q:为什么不直接用 http 框架完成以上任务?
A: 用户操作的网页并不是 http 请求返回的 原始 html, 而是经过了 js在浏览器中的运行, 被修改后的 html. 所以我们需要真实的 浏览器环境.

selenium 是经典的存在, playwright 是近几年才推出的.

python下的安装使用

playwright 是用 js (type script) 开发的, 但也提供了 python 语言接口.

# 安装 playwright 库
pip install pytest-playwright
# 安装 chrome 浏览器及配套driver等, 注意 install 后没有宾语, 就是看起来较别扭.
playwright install

常用api

playwright -> browser -> context -> page 的流程是模板化的, 业务逻辑主要在 元素选择,动作触发, 信息回收上.

图像截屏

page.screenshot(path='xx.png')

Locator & selector

页面中的元素定位是自动化的核心, 对应的就是 Page.locator(selector:str)-> Locator.
selector 有多种使用风格, 最常用的就是 css 选择器. 详见参考[3]. 因为 css 是业界标准, playwright 没有赘述, 所以可去 参考[4] 作语法学习.

在这里插入图片描述
图: 在此列出部分语法

测试例子

使用 测试组件, assert 等.
todo.

仿真例子

import time
from playwright.sync_api import Playwright, sync_playwright, expect


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()

    # Open new page
    page = context.new_page()
    page.goto("https://www.baidu.com")

    time.sleep(3)
    # ---------------------
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

脚本录制

用户使用键鼠在浏览器上操作网页, 这些步骤由 playwright 转译为 py脚本. 往后运行转译后的脚本, 就得到了等价的操作.
python -m playwright codegen --target python -o '脚本录制.py' -b chromium https://www.baidu.com

使用场景: 相比从空白源文件从头自己写, 转录后再二次开发, 代码量大为减少.

表单控件输入

input 的常见 type 及 属性搭配, 见 参考[5].

文本框

  • page.locator("input[name=\"问候语\"]").fill("你好呀")

单选按钮与复选框

  • page.locator("#RadioButtonRLEye_1").check()

下拉列表

  • page.locator("select[name=\"DropDownKIndex\"]").select_option("1.3315")

按钮点击

  • page.locator("#button_id").click()

等待与时机

一般地, 页面控件操作要等待网页加载完毕后才进行. 但网页的完全加载很复杂, {css,js,picture} 都要处理. 特别是有些js资源需要从境外的 google.com 加载,过于缓慢,但它并不影响控件操作, 怎么跳过这样的等待呢? 可以结合 page.goto(wait_until='domcontentloaded')page.wait_for_selector("#控件id")二者使用. 前者可以绕过 <script async> 这样的资源等待, 后者可以等待至目标元素渲染完成.

  • page.goto(self, url: str, *, timeout: float = None, wait_until:str=load)
    wait_until 参数就是用来控制等待时机的. 上述场景下可以选 dom content loaded.
    • 'domcontentloaded' - consider operation to be finished when the DOMContentLoaded event is fired.
    • 'load' - consider operation to be finished when the load event is fired.
    • 'networkidle' - consider operation to be finished when there are no network connections for at least 500 ms.
    • 'commit' - consider operation to be finished when network response is received and the document started loading.

参考

  1. playwright, 官方文档
  2. playwright教程, 表单输入
  3. playwright教程, css selector
  4. 菜鸟教程, css selectors
  5. my blog, html 表单控件
### Playwright Web UI 自动化测试实现方法 Playwright 是一种由 Microsoft 开发的强大开源自动化测试工具,适用于 Web 应用程序的自动化测试。以下是关于如何使用 Playwright 进行 Web UI 自动化测试的具体说明。 #### 工具特点概述 Playwright 提供了丰富的功能来支持跨浏览器自动化测试需求。它可以驱动 Chromium、Firefox 和 WebKit 等主流浏览器,并允许开发者通过同步或异步 API 来控制这些浏览器的行为[^2]。此外,Playwright 的一大亮点在于其内置的脚本录制功能,能够将用户的实际操作转化为可执行的 Python 脚本[^3]。 #### 安装与配置环境 要开始使用 Playwright,需先安装必要的依赖项。对于 Python 用户来说,可以通过 pip 命令完成安装: ```bash pip install playwright ``` 接着初始化所需的浏览器二进制文件: ```bash playwright install ``` 此命令会下载并设置好所有受支持的浏览器引擎版本,确保后续测试顺利运行[^1]。 #### 录制自动化脚本 如果希望快速生成测试代码而无需手动编写每一部分逻辑,则可以利用 Playwright Codegen 功能来自动生成脚本。例如下面这条命令将会启动 Chrome 浏览器访问百度首页并将整个过程记录下来存入名为 `xndery.py` 文件里: ```bash python3 -m playwright codegen --target python -o 'xndery.py' -b chromium https://www.baidu.com ``` 在此过程中所的任何鼠标点击或者键盘输入动作都将被捕捉到最终写入目标源码之中。 #### 编写自定义测试案例 除了依靠录制外,也可以直接采用编程方式构建更复杂的场景。这里给出一段简单的例子展示怎样打开网页、查找元素以及验证内容是否存在: ```python from playwright.sync_api import sync_playwright def run_test(): with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 启动带图形界面的Chromium实例 page = browser.new_page() try: page.goto('https://example.com') # 导航至指定URL地址 title_element = page.locator("h1") # 查找页面上的<h1>标签对象 expect(title_element).to_have_text("Example Domain", timeout=5000) # 断言该标题是否匹配预期文字 finally: browser.close() if __name__ == '__main__': run_test() ``` 上述片段展示了基本的操作流程,包括创建新的浏览上下文、加载特定网址、定位 DOM 结构中的某个节点并通过断言语句确认其状态正确性等等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值