《Playwright:微软的自动化测试工具详解》

news2025/6/12 16:44:22

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档

Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括:

  • 支持所有主流浏览器(Chromium、Firefox、WebKit)
  • 自动等待元素加载和状态变化
  • 支持浏览器上下文(Context)和多页面操作
  • 生成可阅读的测试报告
  • 录制测试脚本功能
  • 支持无头模式和有头模式(可视化调试)

安装 Playwright

首先需要安装 Playwright 包及其依赖的浏览器:

# 使用 npm 安装(JavaScript/TypeScript)

npm init playwright@latest

# 或者使用 pip 安装(Python)

pip install playwright

playwright install

基本使用示例

以下是使用 Playwright 进行自动化测试的基本流程:

# Python 示例

from playwright.sync_api import sync_playwright

def run(playwright):

    # 选择浏览器类型(chromium、firefox、webkit)

    browser = playwright.chromium.launch(headless=False)  # headless=False 显示浏览器窗口

    context = browser.new_context()

    # 打开新页面

    page = context.new_page()

    

    # 导航到网页

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

    

    # 执行操作

    page.fill("input[name='q']", "Playwright")  # 填写表单

    page.click("text=搜索")  # 点击按钮    # 断言检查

    assert page.is_visible("text=Playwright")

    # 关闭浏览器

    browser.close()

# 运行测试

with sync_playwright() as playwright:

    run(playwright)

核心 API 介绍

浏览器与上下文

# 启动浏览器

browser = playwright.chromium.launch(headless=False)  # 有头模式

# 创建带代理的上下文

context = browser.new_context(

    proxy={"server": "http://proxy.example.com:8080"}

)

# 创建带用户存储的上下文(保持登录状态)

context = browser.new_context(storage_state="auth.json")

页面操作

# 导航

page.goto("https://example.com", wait_until="networkidle")

# 点击元素

page.click("button.login")

page.click("text=提交")  # 按文本内容选择

# 填写表单

page.fill("input[name='username']", "testuser")

page.select_option("select[name='country']", value="US")

page.check("input[type='checkbox']")

# 上传文件

page.set_input_files("input[type='file']", "path/to/file.txt")

# 等待元素

page.wait_for_selector("div.loading", state="hidden")

断言与验证

# 检查元素是否可见

assert page.is_visible("text=欢迎")

# 检查文本内容

text = page.inner_text("h1")

assert "标题" in text

# 检查元素属性

value = page.get_attribute("input", "value")

assert value == "预期值"

# 检查URL

assert page.url == "https://example.com/result"

处理弹窗与对话框

# 处理确认对话框

with page.expect_dialog() as dialog_info:

    page.click("button.delete")

dialog = dialog_info.value

dialog.accept()  # 或 dialog.dismiss()

多页面处理

# 监听新页面打开

with page.expect_popup() as popup_info:

    page.click("a[target='_blank']")

new_page = popup_info.value

new_page.wait_for_load_state()

高级技巧

截图与录制

# 全页截图

page.screenshot(path="screenshot.png", full_page=True)

# 录制视频

context = browser.new_context(record_video_dir="videos/")

page = context.new_page()

# 执行操作后

video_path = page.video.path()

自定义选择器

# 使用文本内容和属性组合选择

page.click("text=登录[type='button']")

# 使用 XPath

page.click('//button[contains(text(), "提交")]')

性能监控

# 记录网络请求

with page.context.tracing.start(screenshots=True, snapshots=True):

    page.goto("https://example.com")

page.context.tracing.stop(path="trace.zip")

测试框架集成

pytest(Python)

# test_example.py

import pytest

from playwright.sync_api import Page

@pytest.fixture(scope="function", autouse=True)

def before_each_after_each(page: Page):

    page.goto("https://example.com")

    yield  # 测试执行在这里

    # 可以添加清理代码

def test_search(page: Page):

    page.fill("input[name='q']", "Playwright")

    page.click("text=搜索")

    assert page.is_visible("text=结果")

调试技巧

  1. 使用 slow_mo 参数降低执行速度:

browser = playwright.chromium.launch(slow_mo=500)

  1. 使用 pause() 方法中断执行:

page.pause()  # 执行到此暂停,可在浏览器中交互调试

  1. 使用 Codegen 录制脚本:

playwright codegen https://example.com

  1. 使用 Inspector 可视化调试:

PWDEBUG=1 pytest test_example.py

常见问题解答

  1. 如何处理验证码?
    • 使用预录制的会话状态(storage_state)
    • 使用第三方验证码识别服务
    • 在测试环境中禁用验证码
  1. 如何处理动态加载的内容?
    • 使用 wait_for_selector 或 wait_for_load_state
    • 设置适当的超时时间
  1. 如何在 CI/CD 中运行?
    • 使用官方提供的 Docker 镜像
    • 确保安装了必要的依赖库

Playwright 是一个功能强大的自动化测试工具,适用于 Web 应用的 E2E 测试、UI 自动化和爬虫等场景。通过上面的介绍,你应该能够快速上手并开始编写自己的自动化脚本了。

(注:文档部分内容可能由 AI 生成)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2407818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…