当前位置:首页 > 文章列表 > 文章 > 前端 > Playwright:Web UI 自动化测试框架全面概述

Playwright:Web UI 自动化测试框架全面概述

来源:dev.to 2025-01-17 08:28:10 0浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个文章开发实战,手把手教大家学习《Playwright:Web UI 自动化测试框架全面概述》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

playwright是微软开发的web ui自动化测试框架。

它旨在提供一个跨平台、跨语言、跨浏览器的自动化测试框架,同时也支持移动浏览器。

image description

如其官方主页所述:

  • 自动等待、页面元素智能断言、执行追踪等功能,在处理网页不稳定方面非常有效。
  • 它在与运行测试的进程不同的进程中控制浏览器,消除了进程内测试运行器的限制并支持 shadow dom 渗透。
  • playwright 为每个测试创建一个浏览器上下文。浏览器上下文相当于一个全新的浏览器配置文件,可以实现零成本的全面测试隔离。创建新的浏览器上下文只需几毫秒。
  • 提供代码生成逐步调试跟踪查看器等功能。

playwright vs. selenium v​​s. 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

安装与演示

  1. 确保已安装 node.js。
  2. 使用npm或yarn初始化playwright项目:
   # using npm
   npm init playwright@latest

   # using yarn
   yarn create playwright
  1. 按照提示操作:
    • 选择 typescriptjavascript(默认: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:等待异步操作完成。

从命令行运行测试

以下是常用命令:

  • 运行所有测试:
  npx playwright test
  • 运行特定的测试文件:
  npx playwright test landing-page.spec.ts
  • 调试测试用例:
  npx playwright test --debug

代码录制

使用codegen功能记录交互:

npx playwright codegen https://leapcell.io/

录制的代码可以复制到您的文件中。注意:记录器可能无法处理悬停等复杂操作。


深入剧作家指南

行动和行为

本节介绍一些与页面元素交互的典型 playwright 操作。请注意,前面介绍的定位器对象在创建过程中实际上并没有在页面上定位该元素。即使页面上不存在该元素,使用元素定位器方法获取定位器对象也不会引发任何异常。实际的元素查找仅在交互期间发生。这与 selenium 的 findelement 方法不同,后者直接在页面上搜索元素,如果找不到元素则抛出异常。

文字输入

使用fill方法进行文本输入,主要针对<input>、<textarea>,或者具有[contenteditable]属性的元素:

// text input
await page.getbyrole('textbox').fill('peter');

复选框和单选按钮

使用 locator.setchecked() 或 locator.check() 与 input[type=checkbox]、input[type=radio] 或具有 [role=checkbox] 属性的元素进行交互:

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.selectoption() 与 <select> 元素交互:

// 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']);

鼠标点击

基本操作:

// 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 } });

对于被其他人覆盖的元素,请用力点击:

await page.getbyrole('button').click({ force: true });

或者以编程方式触发点击事件:

await page.getbyrole('button').dispatchevent('click');

键入字符

locator.type() 方法模拟逐个字符输入,触发 keydown、keyup 和 keypress 事件:

await page.locator('#area').type('hello world!');

特殊按键

使用 locator.press() 作为特殊键:

// enter key
await page.getbytext('submit').press('enter');

// ctrl+right arrow
await page.getbyrole('textbox').press('control+arrowright');

// dollar key
await page.getbyrole('textbox').press('$');

支持的按键包括反引号、减号、等于、反斜杠、退格、制表符、删除、转义、arrowdown、end、enter、home、insert、pagedown、pageup、arrowright、arrowup、f1-f12、digit0-digit9 和 keya -keyz。

文件上传

使用locator.setinputfiles()指定要上传的文件。支持多个文件:

// upload a file
await page.getbylabel('upload file').setinputfiles('myfile.pdf');

// upload multiple files
await page.getbylabel('upload files').setinputfiles(['file1.txt', 'file2.txt']);

// remove files
await page.getbylabel('upload file').setinputfiles([]);

// upload from buffer
await page.getbylabel('upload file').setinputfiles({
  name: 'file.txt',
  mimetype: 'text/plain',
  buffer: buffer.from('this is test')
});

焦点元素

使用 locator.focus() 聚焦于某个元素:

await page.getbylabel('password').focus();

拖放

拖放过程涉及四个步骤:

  1. 将鼠标悬停在可拖动元素上。
  2. 按下鼠标左键。
  3. 将鼠标移动到目标位置。
  4. 松开鼠标左键。

您可以使用locator.dragto()方法:

await page.locator('#item-to-be-dragged').dragto(page.locator('#item-to-drop-at'));

或者,手动实施该过程:

await page.locator('#item-to-be-dragged').hover();
await page.mouse.down();
await page.locator('#item-to-drop-at').hover();
await page.mouse.up();

对话框处理

默认情况下,playwright 会自动取消警告、确认和提示等对话框。您可以预先注册一个对话框处理程序来接受对话框:

page.on('dialog', dialog => dialog.accept());
await page.getbyrole('button').click();

处理新页面

当弹出新页面时,可以使用popup事件来处理:

const newPagePromise = page.waitForEvent('popup');
await page.getByText('Click me').click();
const newPage = await newPagePromise;
await newPage.waitForLoadState();
console.log(await newPage.title());

剧作家最佳平台:leapcell

image description

leapcell 是一个专为分布式应用程序设计的现代云计算平台。它采用按量付费模式,无闲置成本,确保您只需为使用的资源付费。

leapcell 对剧作家应用的独特优势

  1. 成本效益

    • 按需付费:低流量时避免资源浪费,高峰时自动扩容。
    • 真实示例:例如,根据 getdeploying.com 的计算,在传统云服务中租用 1 vcpu 和 2 gb ram 虚拟机的费用约为每月 25 美元。在 leapcell 上,25 美元可以支持处理 694 万个请求、平均响应时间为 60 毫秒的服务,让您物有所值。
  2. 开发者体验

    • 易于使用:直观的界面,设置要求极低。
    • 自动化:简化开发、测试和部署。
    • 无缝集成:支持 go、python、node.js、rust 等。
  3. 可扩展性和性能

    • 自动缩放:动态调整资源以保持最佳性能。
    • 异步优化:轻松处理高并发任务。
    • 全球覆盖:分布式数据中心支持低延迟访问。

更多部署示例,请参阅文档。

今天关于《Playwright:Web UI 自动化测试框架全面概述》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

版本声明
本文转载于:dev.to 如有侵犯,请联系study_golang@163.com删除
Win10怎么把显卡调成独显 Win10显卡模式切换教程Win10怎么把显卡调成独显 Win10显卡模式切换教程
上一篇
Win10怎么把显卡调成独显 Win10显卡模式切换教程
中科院基于新型SiC复合衬底的低成本MOSFET取得重要进展
下一篇
中科院基于新型SiC复合衬底的低成本MOSFET取得重要进展
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    511次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    498次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 千音漫语:智能声音创作助手,AI配音、音视频翻译一站搞定!
    千音漫语
    千音漫语,北京熠声科技倾力打造的智能声音创作助手,提供AI配音、音视频翻译、语音识别、声音克隆等强大功能,助力有声书制作、视频创作、教育培训等领域,官网:https://qianyin123.com
    117次使用
  • MiniWork:智能高效AI工具平台,一站式工作学习效率解决方案
    MiniWork
    MiniWork是一款智能高效的AI工具平台,专为提升工作与学习效率而设计。整合文本处理、图像生成、营销策划及运营管理等多元AI工具,提供精准智能解决方案,让复杂工作简单高效。
    112次使用
  • NoCode (nocode.cn):零代码构建应用、网站、管理系统,降低开发门槛
    NoCode
    NoCode (nocode.cn)是领先的无代码开发平台,通过拖放、AI对话等简单操作,助您快速创建各类应用、网站与管理系统。无需编程知识,轻松实现个人生活、商业经营、企业管理多场景需求,大幅降低开发门槛,高效低成本。
    128次使用
  • 达医智影:阿里巴巴达摩院医疗AI影像早筛平台,CT一扫多筛癌症急慢病
    达医智影
    达医智影,阿里巴巴达摩院医疗AI创新力作。全球率先利用平扫CT实现“一扫多筛”,仅一次CT扫描即可高效识别多种癌症、急症及慢病,为疾病早期发现提供智能、精准的AI影像早筛解决方案。
    121次使用
  • 智慧芽Eureka:更懂技术创新的AI Agent平台,助力研发效率飞跃
    智慧芽Eureka
    智慧芽Eureka,专为技术创新打造的AI Agent平台。深度理解专利、研发、生物医药、材料、科创等复杂场景,通过专家级AI Agent精准执行任务,智能化工作流解放70%生产力,让您专注核心创新。
    126次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码