当前位置: 首页 > news >正文

解锁 Playwright 自动化测试:一篇教程入门WebUI自动化测试【入门级】

解锁 Playwright 自动化测试:一篇教程入门WebUI自动化测试【入门级】

  • 1 说在前边
  • 2 环境如何安装:
    • 2.1 安装Python
    • 2.2 安装Playwright
  • 3 一个简单示例
  • 4 元素定位
  • 5 页面交互
    • 5.1 页面导航
  • 5.2 等待操作
  • 5.2 点击与事件
  • 6 高级功能
    • 6.1 网络拦截
    • 6.2 多页面与上下文:
    • 6.3 截图与录屏
  • 7 异步模式
  • 8 与Pytets测试框架集成
    • 8.1 安装 pytest 插件
    • 8.2 测试用例示例
    • 8.3 运行测试

1 说在前边

  • Playwright 是微软开发的一款强大的自动化测试工具,支持 Chrome、Firefox、WebKit 等主流浏览器;
  • 可用于网页自动化、端到端测试、数据爬取等场景;
  • 核心优势是跨浏览器兼容性好、API 简洁、支持异步操作,且内置了自动等待、网络拦截等实用功能。

以下简单介绍下Playwright基本使用,后续会以系列文章进行深入了解和学习。

2 环境如何安装:

2.1 安装Python

  • Playwright 支持 Python、JavaScript 等语言,这里以 Python 为例;
  • 首先确保安装了 Python 3.8+,具体安装请直接从官网下载,这里不赘述;
  • 同时在安装的时候,记得勾选自动增加到系统环境变量即可。

2.2 安装Playwright

  • 安装 Playwright 库:
pip install playwright

在这里插入图片描述

  • 安装浏览器驱动(Chrome、Firefox、WebKit):
playwright install

在这里插入图片描述

  • 下载完后在如下目录可以查看:
    在这里插入图片描述

3 一个简单示例

  • 打开 Chrome 浏览器,访问百度,搜索 “Playwright”,并截图保存。
from playwright.sync import sync_playwright# 启动 Playwright 上下文(同步模式)
with sync_playwright() as p:# 启动浏览器(可选参数:headless=False 显示浏览器窗口)browser = p.chromium.launch(headless=False)# 创建新页面page = browser.new_page()# 访问百度page.goto("https://www.baidu.com")# 定位搜索框并输入内容(使用 CSS 选择器)page.locator("#kw").fill("Playwright")# 点击搜索按钮page.locator("#su").click()# 等待页面加载完成(自动等待,无需手动 sleep)page.wait_for_load_state("networkidle")# 截图保存page.screenshot(path="playwright_search.png")# 关闭浏览器browser.close()
  • 核心内容解释:

sync_playwright():同步模式上下文(适合简单脚本),也可使用 async_playwright() 异步模式。
browser:浏览器实例(如 chromium、firefox、webkit)。
page:标签页实例,所有操作都通过 page 对象执行。

4 元素定位

Playwright 提供了多种定位元素的方式,推荐使用 locator 方法(自动等待元素可见,无需手动处理延迟)。

  • 常用定位方式:
方法示例说明
CSS 选择器page.locator("#username")通过 ID、类名、标签等定位
XPath 表达式page.locator("//input[@name='password']")通过 XPath 定位
文本内容page.locator("text=登录") 匹配元素文本
占位符(placeholder)page.locator("placeholder=请输入密码") 匹配输入框占位符
标签文本page.locator("label:has-text('用户名')") 组合定位(标签包含文本)
  • 简单示例:
# 填写表单
page.locator("input[name='username']").fill("test_user")  # 输入文本
page.locator("input[type='password']").fill("123456")
page.locator("select[name='role']").select_option("admin")  # 选择下拉框
page.locator("input[type='checkbox']").check()  # 勾选复选框# 获取元素文本/属性
username = page.locator("#username").input_value()  # 获取输入框值
btn_text = page.locator("button").text_content()  # 获取元素文本
link_href = page.locator("a").get_attribute("href")  # 获取属性值

5 页面交互

5.1 页面导航

page.goto("https://example.com")  # 访问URL
page.reload()  # 刷新页面
page.go_back()  # 后退
page.go_forward()  # 前进

5.2 等待操作

Playwright 自动等待元素可交互,但复杂场景下可手动指定等待条件:

# 等待页面加载状态(load/networkidle/domcontentloaded)
page.wait_for_load_state("networkidle")# 等待元素出现
page.wait_for_selector("#result")# 等待时间(毫秒)
page.wait_for_timeout(1000)  # 不推荐,尽量用条件等待

5.2 点击与事件

page.locator("button").click()  # 普通点击
page.locator("a").dblclick()  # 双击
page.locator("div").hover()  # 鼠标悬停
page.keyboard.press("Enter")  # 按下回车键
page.mouse.click(x=100, y=200)  # 坐标点击

6 高级功能

6.1 网络拦截

可拦截请求、修改响应,常用于模拟接口返回或屏蔽广告:

# 拦截所有图片请求并取消
def handle_route(route):if route.request.resource_type == "image":route.abort()  # 取消请求else:route.continue_()  # 继续其他请求page.route("**/*", handle_route)  # 注册拦截规则
page.goto("https://example.com")

6.2 多页面与上下文:

# 新建上下文(可设置 cookies、用户代理等)
context = browser.new_context(user_agent="Mozilla/5.0 (Windows NT 10.0; ...)",viewport={"width": 1280, "height": 720}
)
page1 = context.new_page()
page2 = context.new_page()  # 同一上下文共享 cookies# 切换页面
with page1.expect_page() as new_page_info:page1.locator("a[target='_blank']").click()  # 点击打开新页面
new_page = new_page_info.value  # 获取新页面实例

6.3 截图与录屏

# 页面截图(全屏)
page.screenshot(path="full_page.png", full_page=True)# 元素截图
page.locator("#result").screenshot(path="element.png")# 录屏(需在启动浏览器时开启)
browser = p.chromium.launch(record_video_dir="videos/")
page = browser.new_page()
page.goto("https://example.com")
browser.close()  # 自动保存视频

7 异步模式

Playwright 推荐使用异步模式(asyncio)提升性能,尤其适合批量操作:

import asyncio
from playwright.async_api import async_playwrightasync def main():async with async_playwright() as p:browser = await p.chromium.launch(headless=False)page = await browser.new_page()await page.goto("https://www.baidu.com")await page.locator("#kw").fill("Playwright 异步")await page.locator("#su").click()await page.wait_for_load_state("networkidle")await browser.close()asyncio.run(main())

8 与Pytets测试框架集成

Playwright 可与 pytest 结合,编写自动化测试用例:

8.1 安装 pytest 插件

pip install pytest-playwright

8.2 测试用例示例

def test_baidu_search(page):page.goto("https://www.baidu.com")page.locator("#kw").fill("Playwright")page.locator("#su").click()page.wait_for_selector("#content_left")assert "Playwright" in page.title()

8.3 运行测试

pytest test_baidu.py --headed  # --headed 显示浏览器窗口

其他的内容可以详细去官网看看,还有很多内容,这里简单介绍下,后边以系列文档详细了解和学习。

http://www.dtcms.com/a/541712.html

相关文章:

  • 如何做一个公司网站高校档案馆网站建设
  • wordpress 网站特效找做cad彩拼的网站
  • 多态性:让程序更加灵活与可扩展!
  • 混杂设备驱动
  • 【SpringMVC】Spring MVC 核心全解析:从 MVC 思想到 Web 交互(请求、响应、参数传递全实践)
  • 最专业的手机网站建设磐安建设局网站
  • 做英文行程的网站上海迪士尼乐园官网
  • SAM2学习笔记
  • 基于dcmtk的dicom工具 第十一章 加载dicom文件多帧图数据
  • 建网站多少钱一平方电工证免考拿证
  • 桌面开发,在线%可视化,招聘系统demo,基于python,matplotlib,request,爬虫,数据库无
  • 护照识别接口-高效智能的OCR身份核验新体验-OCR文字识别API
  • 性能测试 | 性能测试工具JMeter直连数据库和逻辑控制器的使用
  • 建站 报价专业网站开发制作公司
  • 手机版网站如何做直接进网站的浏览器
  • 网站建设总结与心得体会颍州网站建设
  • 引力概念中的混乱点:传统物理学与张祥前统一场论对比
  • 通管局报审通关秘籍:网约车平台网络安全防护与保障能力报告
  • 郑州市建设网站wordpress 加斜杠
  • 正规网站建设公司一般要多少钱建设银行面试经验网站
  • [ssh]系统重装后,如何重新设置window免密登录远程linux服务器
  • 网站模板预览与编辑器旅游网站简介
  • 网站建设ppt百度文库注册公司地址可以用家庭地址
  • 学习一下kernel6.12中sugov_iowait_apply的函数逻辑
  • 北京网站开发报价做搜狗网站优化首页软
  • node.js网站开发十大购物网站排行榜
  • ProcDump 学习笔记(6.14):在调试器中查看转储(WinDbg / Visual Studio 快速上手)
  • 正规网站建设报价网站建设案例精粹 电子书
  • PE之不同区域的结构体定义
  • Ubuntu24.04 赋予 Qt 应用程序 修改系统时间 权限