【问题标题】:Prototypal inheritance in javascript not workingjavascript中的原型继承不起作用
【发布时间】:2019-06-08 05:29:46
【问题描述】:

我正在编写一个 npm 模块来减少我的测试项目中的锅炉代码,并且这个模块将作为开发依赖项添加到该测试项目中。我正在使用原型继承来扩展现有库(puppeteer)。但它似乎不起作用。我不确定如何以及何时加载此模块?

我已经在测试项目中本地安装了模块。

来自本地 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 不是函数

【问题讨论】:

    标签: javascript node.js function ecmascript-6 puppeteer


    【解决方案1】:

    你有错别字

    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)
    

    【讨论】:

    • 我认为情况并非如此,我故意更改它以查看它是否甚至在其他测试中加载该模块。我已经编辑了代码,问题仍然存在。
    • 如何将库导入到测试文件中?
    • 目前我有这样的require('puppet/puppeteer-extend/Page')
    • 您可以做的一个测试是在您制作原型后立即记录该方法。
    • 原型继承工作似乎有一些其他问题,正如你所建议的那样
    【解决方案2】:

    那是因为你的函数叫做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")
    

    (不要两者都做)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 2010-09-28
      • 2010-09-28
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多