首页 > 解决方案 > 开玩笑 puppeteer 自定义测试环境中的全局在测试中丢失上下文

问题描述

我正在编写一个 npm 模块来减少我的测试项目中的锅炉代码,并且该模块将作为开发依赖项添加到该测试项目中。我正在使用原型继承来扩展 puppeteer 库的现有类(页面)以及这个 npm 模块。

当我在自定义测试环境中创建全局浏览器并使用它在测试中创建页面实例时。Page 类失去了对我使用原型继承添加到它的所有属性的引用。它会抛出错误page.sendText is not a function

但是当我在测试中创建浏览器实例时。我可以使用添加到 Page 类的属性。

在自定义测试环境中创建 global.browser。在测试中创建浏览器实例。

npm 模块中的 GLOBALSETUP

const browser = await puppeteer.launch(await puppeteer.launch({some config});

npm 模块中的测试环境:

this.global __BROWSER__ = await puppeteer.connect({
        browserWSEndpoint: wsEndpoint,
});

npm 模块中的扩展 PAGE 类:

const Page = require('puppeteer/lib/Page').Page;

Page.prototype.sendText = async (selector, text) => {
    let element = await this.waitForSelector(selector, {visible : true});
    await element.type(text);
}

本地安装 npm 模块后在测试项目中测试:

describe('awesome test', () => {
    it('something will be ok', async () => {
      const context = global.__BROWSER__.defaultBrowserContext();
      page = await context.newPage(); 
      await page.goto('https://google.com/')
      await page.sendText('#search', "puppeteer")
      await page.screenshot({path: 'google.png', fullPage: true})
    })
});

错误是 -> page.sendText 不是我期望 sendText 可以工作的函数。

标签: jestjspuppeteer

解决方案


推荐阅读