我正在编写一个npm模块来减少测试项目中的锅炉代码,并且该模块将作为dev依赖项添加到该测试项目中。我正在使用原型继承来扩展该npm模块中的puppeteer库的现有类(页面)。
当我在自定义测试环境中创建全局浏览器并使用它在测试中创建页面实例时。 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可以工作。