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中文网其他相关文章!

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。