在Node.js环境下使用Playwright添加自定义实现方式

 更新时间:2025年08月08日 15:24:44   作者:勤奋的码农007  
这篇文章主要介绍了在Node.js环境下使用Playwright添加自定义实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

方法1:直接创建实用工具函数(推荐)

原理:创建独立的工具函数,通过参数传入 page 对象操作页面

// utils/custom-actions.js
module.exports = {
  async login(page, username, password) {
    await page.goto('https://example.com/login');
    await page.fill('#username', username);
    await page.fill('#password', password);
    await page.click('#submit');
    await page.waitForURL(/dashboard/);
  },
  
  async captureScreenshot(page, fileName) {
    await page.screenshot({ path: `screenshots/${fileName}.png` });
  }
};

使用方式

const { test } = require('@playwright/test');
const { login, captureScreenshot } = require('./utils/custom-actions');

test('Authentication test', async ({ page }) => {
  // 使用自定义方法
  await login(page, 'test@email.com', 'p@ssw0rd');
  await captureScreenshot(page, 'dashboard-view');
});

方法2:封装自定义 Page 类(通过组合模式)

原理:创建代理类包裹原始 page 对象,添加额外方法

// lib/custom-page.js
module.exports = class CustomPage {
  constructor(page) {
    this.page = page;
  }

  async typeSlowly(selector, text, delay = 100) {
    for (const char of text) {
      await this.page.type(selector, char);
      await this.page.waitForTimeout(delay);
    }
  }

  async dragAndDrop(sourceSel, targetSel) {
    const source = await this.page.$(sourceSel);
    const target = await this.page.$(targetSel);
    await this.page.dragAndDrop(source, target);
  }
};

使用方式

const { test } = require('@playwright/test');
const CustomPage = require('./lib/custom-page');

test('Form test', async ({ page }) => {
  const customPage = new CustomPage(page);
  
  await customPage.typeSlowly('#comment', 'Hello World', 150);
  await customPage.dragAndDrop('#item1', '#drop-zone');
});

方法3:通过 Test Fixtures 扩展(Playwright 官方推荐)

原理:利用 Playwright 的 fixture 系统扩展测试上下文

// fixtures.js
const base = require('@playwright/test');
const CustomPage = require('./lib/custom-page');

exports.test = base.test.extend({
  customPage: async ({ page }, use) => {
    const customPage = new CustomPage(page);
    await use(customPage);
  }
});

使用方式

// tests.spec.js
const { test } = require('./fixtures');

test('Advanced test', async ({ customPage }) => {
  await customPage.typeSlowly('#bio', 'Automation Engineer');
  // 原始 page 仍然可用
  await customPage.page.keyboard.press('Enter');
});

主要优势

  1. 无侵入性:不修改 Playwright 源码或原型
  2. 按需组合:可以混合使用原生 API 和自定义方法
  3. 维护性强:自定义逻辑集中管理
  4. TypeScript 支持:通过声明文件添加类型提示(如使用 TS)

最佳实践建议

  1. 将常用操作封装成独立功能(如登录、数据生成)
  2. 为复杂交互创建专用工具类(如表格操作、拖放序列)
  3. 在 fixtures 中初始化常用测试状态
  4. 对自定义方法添加错误处理和日志
  5. 使用 page.waitForFunction() 实现高级等待逻辑
// 高级:等待元素包含特定文本
async waitForText(selector, text, timeout = 5000) {
  await this.page.waitForFunction(
    ({ sel, txt }) => {
      const el = document.querySelector(sel);
      return el?.innerText?.includes(txt);
    },
    { selector, text },
    { timeout }
  );
}

这些方法既保持了 Playwright API 的原始完整性,又能有效扩展测试能力,特别适合复杂应用的测试场景。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Node.JS如何实现JWT原理

    Node.JS如何实现JWT原理

    jwt是json web token的简称,本文介绍它的原理,最后后端用nodejs自己实现如何为客户端生成令牌token和校验token
    2020-09-09
  • Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例

    Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例

    这篇文章主要介绍了Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例,本文给出了利用子进程调用系统命令、执行系统命令、调用传参数的shell脚本、调用python脚本的例子,需要的朋友可以参考下
    2015-01-01
  • node.js 利用流实现读写同步,边读边写的方法

    node.js 利用流实现读写同步,边读边写的方法

    下面小编就为大家带来一篇node.js 利用流实现读写同步,边读边写的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Node.js Sequelize如何实现数据库的读写分离

    Node.js Sequelize如何实现数据库的读写分离

    Sequelize是一个易于使用,支持多SQL方言(dialect)的对象-关系映射框架(ORM),这个库完全采用JavaScript开发并且能够用在Node.JS环境中。它当前支持MySQL, MariaDB, SQLite 和 PostgreSQL 数据库。在Node.js中,使用 Sequelize操作数据库时,同样支持读写分离。
    2016-10-10
  • node.js http模块概念详解

    node.js http模块概念详解

    http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的http.createServer() 方法,就能方便的把一台普通的电脑,变成一台 Web 服务器,从而对外提供 Web 资源服务,本文给大家介绍node.js http模块的相关知识,感兴趣的朋友一起看看吧
    2022-01-01
  • Node.js 异步编程之 Callback介绍(一)

    Node.js 异步编程之 Callback介绍(一)

    这篇文章主要介绍了Node.js 异步编程之 Callback介绍(一),本文用实例讲解Callback的相关知识,本文是第一篇,下一篇小编会跟进,需要的朋友可以参考下
    2015-03-03
  • Node.js websocket使用socket.io库实现实时聊天室

    Node.js websocket使用socket.io库实现实时聊天室

    这篇文章主要为大家详细介绍了Node.js websocket使用socket.io库实现实时聊天室,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • 浅谈如何把Node项目部署到服务器上

    浅谈如何把Node项目部署到服务器上

    本文主要介绍了浅谈如何把Node项目部署到服务器上,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 详解Node.js:events事件模块

    详解Node.js:events事件模块

    由于nodejs是单线程运行的,所以nodejs需要借助事件轮询,本篇文章主要介绍了Node.js:events事件模块,有兴趣的可以了解一下。
    2016-11-11
  • win系统下nodejs环境安装配置

    win系统下nodejs环境安装配置

    这篇文章主要介绍了win系统下nodejs环境安装配置的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论