Я пишу модуль npm для уменьшения кода котла в моем тестовом проекте, и этот модуль будет добавлен как зависимость dev в этом тестовом проекте.Я использую наследование прототипов для расширения существующего класса (Page) библиотеки кукловодов в этом модуле npm.
Когда я создаю глобальный браузер в пользовательской тестовой среде и использую его для создания экземпляра страницы в тесте.Класс Page теряет ссылку на все свойства, которые я добавил к нему, используя прототип наследования.И выдает ошибку page.sendText is not a function
Но когда я создаю экземпляр браузера в тесте.Я могу использовать свойства, которые я добавил в класс Page.
Создание global.browser в пользовательской тестовой среде.Создание экземпляра браузера в тесте.
GLOBALSETUP в модуле npm
const browser = await puppeteer.launch(await puppeteer.launch({some config});
ИСПЫТАТЕЛЬНАЯ СРЕДА в модуле npm:
this.global __BROWSER__ = await puppeteer.connect({
browserWSEndpoint: wsEndpoint,
});
Расширенный класс PAGE в модуле npm:
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 будет работать.