Playwright:Web UI 自动化测试框架全面概述
PlayWright是微软开发的Web UI自动化测试框架。
它旨在提供一个跨平台、跨语言、跨浏览器的自动化测试框架,同时也支持移动浏览器。
如其官方主页所述:
- 自动等待、页面元素智能断言、执行追踪等功能,在处理网页不稳定方面非常有效。
- 它在与运行测试的进程不同的进程中控制浏览器,消除了进程内测试运行器的限制并支持 Shadow DOM 渗透。
- PlayWright 为每个测试创建一个浏览器上下文。浏览器上下文相当于一个全新的浏览器配置文件,可以实现零成本的全面测试隔离。创建新的浏览器上下文只需几毫秒。
- 提供代码生成、逐步调试和跟踪查看器等功能。
PlayWright vs. Selenium vs. Cypress
当今最好的 Web UI 自动化测试框架是什么?杰出的选项包括已有十年历史的 Selenium、最近流行的 Cypress 以及我们在这里介绍的 PlayWright。它们有何不同?以下是总结对比供大家参考
Feature | PlayWright | Selenium | Cypress |
---|---|---|---|
Supported Languages | JavaScript, Java, C#, Python | JavaScript, Java, C#, Python, Ruby | JavaScript/TypeScript |
Supported Browsers | Chrome, Edge, Firefox, Safari | Chrome, Edge, Firefox, Safari, IE | Chrome, Edge, Firefox, Safari |
Testing Framework | Frameworks for supported languages | Frameworks for supported languages | Frameworks for supported languages |
Usability | Easy to use and configure | Complex setup with a learning curve | Easy to use and configure |
Code Complexity | Simple | Moderate | Simple |
DOM Manipulation | Simple | Moderate | Simple |
Community Maturity | Improving gradually | Highly mature | Fairly mature |
Headless Mode Support | Yes | Yes | Yes |
Concurrency Support | Supported | Supported | Depends on CI/CD tools |
iframe Support | Supported | Supported | Supported via plugins |
Driver | Not required | Requires a browser-specific driver | Not required |
Multi-Tab Operations | Supported | Not supported | Supported |
Drag and Drop | Supported | Supported | Supported |
Built-in Reporting | Yes | No | Yes |
Cross-Origin Support | Supported | Supported | Supported |
Built-in Debugging | Yes | No | Yes |
Automatic Wait | Yes | No | Yes |
Built-in Screenshot/Video | Yes | No video recording | Yes |
主要比较:
- 支持的语言:PlayWright 和 Selenium 支持 Java、C# 和 Python,这使得它们在可能不熟悉 JavaScript/TypeScript 的测试工程师中更受欢迎。
- 技术方法:PlayWright 和 Selenium 都使用 Google 的远程调试协议来控制基于 Chromium 的浏览器。对于像 Firefox 这样的浏览器,如果没有这样的协议,它们就会使用 JavaScript 注入。 Selenium 将其封装在 Driver 中,而 PlayWright 直接调用它。另一方面,Cypress 使用 JavaScript 来控制浏览器。
- 浏览器支持:Selenium 支持 Internet Explorer,这与 IE 即将被淘汰无关。
- 易于使用:所有三个框架都有一个学习曲线。然而,与 Selenium 相比,PlayWright 和 Cypress 对于简单场景更加用户友好。
入门
虽然 PlayWright 支持多种语言,但它严重依赖 Node.js。无论您使用Python还是Java版本,PlayWright在初始化时都需要Node.js环境,下载Node.js驱动程序。因此,本指南我们将重点关注 JavaScript/TypeScript。
安装与演示
- 确保已安装 Node.js。
- 使用npm或yarn初始化PlayWright项目:
# Using npm npm init playwright@latest # Using yarn yarn create playwright
- 按照提示操作:
- 选择 TypeScript 或 JavaScript(默认:TypeScript)。
- 指定测试目录名称。
- 决定是否安装PlayWright支持的浏览器(默认:True)。
如果您选择下载浏览器,PlayWright 将下载 Chromium、Firefox 和 WebKit,这可能需要一些时间。此过程仅在第一次设置期间发生,除非 PlayWright 版本已更新。
项目结构
初始化后,您将得到一个项目模板:
playwright.config.ts # PlayWright configuration file package.json # Node.js configuration file package-lock.json # Node.js dependency lock file tests/ # Your test directory example.spec.ts # Template test case tests-examples/ # Example tests directory demo-todo-app.spec.ts # Example test case
运行示例测试用例:
npx playwright test
测试静默执行(在无头模式下),结果显示为:
Running 6 tests using 6 workers 6 passed (10s) To open the last HTML report run: npx playwright show-report
示例源代码
这是 example.spec.ts 测试用例:
import { test, expect } from '@playwright/test'; test('has title', async ({ page }) => { await page.goto('https://playwright.dev/'); await expect(page).toHaveTitle(/Playwright/); }); test('get started link', async ({ page }) => { await page.goto('https://playwright.dev/'); await page.getByRole('link', { name: 'Get started' }).click(); await expect(page).toHaveURL(/.*intro/); });
- 第一次测试:验证页面标题包含“剧作家”。
- 第二次测试:单击“开始”链接并验证 URL。
每种测试方法都有:
- 测试名称(例如“有标题”)。
- 一个函数来执行测试逻辑。
主要方法包括:
- page.goto:导航到 URL。
- Expect(page).toHaveTitle:断言页面标题。
- page.getByRole:通过角色定位元素。
- wait:等待异步操作完成。
从命令行运行测试
以下是常用命令:
- 运行所有测试:
# Using npm npm init playwright@latest # Using yarn yarn create playwright
- 运行特定的测试文件:
playwright.config.ts # PlayWright configuration file package.json # Node.js configuration file package-lock.json # Node.js dependency lock file tests/ # Your test directory example.spec.ts # Template test case tests-examples/ # Example tests directory demo-todo-app.spec.ts # Example test case
- 调试测试用例:
npx playwright test
代码录制
使用codegen功能记录交互:
Running 6 tests using 6 workers 6 passed (10s) To open the last HTML report run: npx playwright show-report
录制的代码可以复制到您的文件中。注意:记录器可能无法处理悬停等复杂操作。
深入剧作家指南
行动和行为
本节介绍一些用于与页面元素交互的典型 Playwright 操作。请注意,前面介绍的定位器对象在创建过程中实际上并没有在页面上定位该元素。即使页面上不存在该元素,使用元素定位器方法获取定位器对象也不会引发任何异常。实际的元素查找仅在交互期间发生。这与 Selenium 的 findElement 方法不同,后者直接在页面上搜索元素,如果找不到元素则抛出异常。
文字输入
使用 fill 方法进行文本输入,主要针对 、
import { test, expect } from '@playwright/test'; test('has title', async ({ page }) => { await page.goto('https://playwright.dev/'); await expect(page).toHaveTitle(/Playwright/); }); test('get started link', async ({ page }) => { await page.goto('https://playwright.dev/'); await page.getByRole('link', { name: 'Get started' }).click(); await expect(page).toHaveURL(/.*intro/); });
复选框和单选按钮
使用 locator.setChecked() 或 locator.check() 与 input[type=checkbox]、input[type=radio] 或具有 [role=checkbox] 属性的元素进行交互:
npx playwright test
选择控制
使用 locator.selectOption() 与
npx playwright test landing-page.spec.ts
鼠标点击
基本操作:
npx playwright test --debug
对于被其他人覆盖的元素,请用力点击:
npx playwright codegen https://leapcell.io/
或者以编程方式触发点击事件:
// Text input await page.getByRole('textbox').fill('Peter');
键入字符
locator.type() 方法模拟逐个字符输入,触发 keydown、keyup 和 keypress 事件:
await page.getByLabel('I agree to the terms above').check(); expect(await page.getByLabel('Subscribe to newsletter').isChecked()).toBeTruthy(); // Uncheck await page.getByLabel('XL').setChecked(false);
特殊按键
使用 locator.press() 作为特殊键:
// Select by value await page.getByLabel('Choose a color').selectOption('blue'); // Select by label await page.getByLabel('Choose a color').selectOption({ label: 'Blue' }); // Multi-select await page.getByLabel('Choose multiple colors').selectOption(['red', 'green', 'blue']);
支持的按键包括反引号、减号、等于、反斜杠、退格、制表符、删除、转义、ArrowDown、End、Enter、Home、Insert、PageDown、PageUp、ArrowRight、ArrowUp、F1-F12、Digit0-Digit9 和 KeyA -KeyZ。
文件上传
使用locator.setInputFiles()指定要上传的文件。支持多个文件:
// Left click await page.getByRole('button').click(); // Double click await page.getByText('Item').dblclick(); // Right click await page.getByText('Item').click({ button: 'right' }); // Shift+click await page.getByText('Item').click({ modifiers: ['Shift'] }); // Hover await page.getByText('Item').hover(); // Click at specific position await page.getByText('Item').click({ position: { x: 0, y: 0 } });
焦点元素
使用 locator.focus() 聚焦于某个元素:
# Using npm npm init playwright@latest # Using yarn yarn create playwright
拖放
拖放过程涉及四个步骤:
- 将鼠标悬停在可拖动元素上。
- 按下鼠标左键。
- 将鼠标移动到目标位置。
- 松开鼠标左键。
您可以使用locator.dragTo()方法:
playwright.config.ts # PlayWright configuration file package.json # Node.js configuration file package-lock.json # Node.js dependency lock file tests/ # Your test directory example.spec.ts # Template test case tests-examples/ # Example tests directory demo-todo-app.spec.ts # Example test case
或者,手动实施该过程:
npx playwright test
对话框处理
默认情况下,Playwright 会自动取消警告、确认和提示等对话框。您可以预先注册一个对话框处理程序来接受对话框:
Running 6 tests using 6 workers 6 passed (10s) To open the last HTML report run: npx playwright show-report
处理新页面
当弹出新页面时,可以使用popup事件来处理:
import { test, expect } from '@playwright/test'; test('has title', async ({ page }) => { await page.goto('https://playwright.dev/'); await expect(page).toHaveTitle(/Playwright/); }); test('get started link', async ({ page }) => { await page.goto('https://playwright.dev/'); await page.getByRole('link', { name: 'Get started' }).click(); await expect(page).toHaveURL(/.*intro/); });
剧作家最佳平台:Leapcell
Leapcell 是一个专为分布式应用程序设计的现代云计算平台。它采用按量付费模式,无闲置成本,确保您只需为使用的资源付费。
Leapcell 对剧作家应用的独特优势
-
成本效率
- 按需付费:低流量时避免资源浪费,高峰时自动扩容。
- 真实示例:例如,根据 getdeploying.com 的计算,在传统云服务中租用 1 vCPU 和 2 GB RAM 虚拟机的费用约为每月 25 美元。在 Leapcell 上,25 美元可以支持处理 694 万个请求、平均响应时间为 60 毫秒的服务,让您物有所值。
-
开发者体验
- 易于使用:直观的界面,设置要求极低。
- 自动化:简化开发、测试和部署。
- 无缝集成:支持 Go、Python、Node.js、Rust 等。
-
可扩展性和性能
- 自动缩放:动态调整资源以保持最佳性能。
- 异步优化:轻松处理高并发任务。
- 全球覆盖:分布式数据中心支持低延迟访问。
更多部署示例,请参阅文档。
以上是Playwright:Web UI 自动化测试框架全面概述的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...
