Прототип наследования в JavaScript не работает - PullRequest
0 голосов
/ 08 июня 2019

Я пишу модуль npm для уменьшения кода котла в моем тестовом проекте, и этот модуль будет добавлен как зависимость dev в этом тестовом проекте.Я использую наследование прототипов для расширения существующей библиотеки (кукловод).Но, похоже, не работает.Я не уверен, как и когда этот модуль будет загружен?

Я локально установил модуль в тестовом проекте.

Код из локального модуля npm:

let {Page}  = require('puppeteer/lib/Page');


Page.prototype.element = async function(selector) {
    return await this.waitForSelector(selector, {visible : true});  
}

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

Мой тестовый код:

jest.setTimeout(60000);
const Browser = require('puppet/factory/BrowserFactory')
require('puppet/puppeteer-extend/Page')

let page;
let browser;

describe('awesome test', () => {
    it('something will be ok', async () => {
      page = await global.__BROWSER__.newPage()
      console.log(await page.hasOwnProperty('sendText'))
      await page.goto('https://google.com')
      await page.sendText('#fakebox-input', "puppeteer")
      await page.screenshot({path: 'google.png', fullPage: true})

      await page.close()
    })
  })

TypeError: page.sendText не является функцией

Ответы [ 2 ]

2 голосов
/ 08 июня 2019

У вас есть опечатка

Page.prototype.sendTex < --- // here

Редактировать: Самый простой способ узнать, поражается ли файл прототипа, - сразу же зарегистрировать прототип.

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

console.log(Page.prototype.sendText)
0 голосов
/ 08 июня 2019

Это потому, что ваша функция называется sendTex.

Измените его там, где вы его определили:

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

Или где вы это называете:

await page.sendTex('#fakebox-input', "puppeteer")

(не делай и того, и другого)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...