【问题标题】:Have to use manual wait() to get CodeceptJS/Puppeteer custom helper to see table(td tr)必须使用手动 wait() 来获取 CodeceptJS/Puppeteer 自定义助手来查看表(td tr)
【发布时间】:2021-01-02 22:40:51
【问题描述】:

我有一个 codeceptjs/puppeteer 项目,并且正在构建一个自定义帮助程序来访问表中的信息。我已经能够完成这项工作,但只需在我的测试步骤中等待两秒钟,然后在我的自定义帮助程序类中调用异步函数。鉴于这一切都基于 async/await,我必须相信我只是遗漏了一些东西,并且有一种干净的方法可以做到这一点。

来自我的助手类的函数。

  async getRowCount() { 
    //const browser = this.helpers['Puppeteer'].browser;
    const page = this.helpers['Puppeteer'].page;

    page.waitForSelector('tbody');
    let rowCount = await page.$$eval('tbody tr', rows => rows.length);
    return rowCount;

    // These work
    // page.waitForSelector('a[href="#/site/create"]');
    // page.click('a[href="#/site/create"]');
    
  }

我的 codeceptjs 场景如下。

Scenario.only('Table check ALL', async (I, loginAs) => {
  loginAs('bob');
  I.say(await I.getRowCount());
  I.wait(3);
});

当代码如上图时,我返回的行数总是0。

但是,如果我在 I.getRowCount() 函数之前等待 1 秒,则返回 tbody tr 选择器的正确总行数。

如果有人可以帮助我理解为什么会发生这种情况以及我可以做些什么来解决它,那么我就不必在我的代码中添加手动等待步骤来适应这些辅助功能(codeceptjs 的核心“功能”),我将不胜感激。

谢谢!

【问题讨论】:

    标签: puppeteer codeceptjs


    【解决方案1】:

    你需要等待waitForSelector:

    await page.waitForSelector('tbody');
    

    几乎所有page 方法都返回承诺,因此您必须等待它们。

    【讨论】:

    • 啊,谢谢!我从 csjs 网站上的一个示例开始,它没有这些,但完全有道理。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2016-06-22
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多