jestjs - 开玩笑 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 可以工作的函数。
解决方案
推荐阅读
- c# - 是否可以使用 dotnet build 输出所有程序集?
- angularjs - $scope.$on 多次调用
- vb.net - 另一个进程正在使用文本文件
- python - 如何遍历图像绘制边界框?
- python - 列表(向量)与张量流要求的形状不匹配
- regex - 使用 RegEx 验证用户输入
- php - PHP 致命错误:未捕获的错误:找不到类“Google\Ads\GoogleAds\Examples\Utils\ArgumentParser”
- java - 具有序列奇数的 Java GeneratedValue (allocationSize = 1)
- go - PostgreSQL - golang 程序导致奇怪的锁
- android - 如何设置 Flutter build android aar 版本?