必须使用手动 wait() 来获取 CodeceptJS/Puppeteer 自定义助手以查看 table(td tr)

Have to use manual wait() to get CodeceptJS/Puppeteer custom helper to see table(td tr)

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

来自我的助手的功能 class。

  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 的核心“功能”) ,我将不胜感激。

谢谢!

您需要等待 waitForSelector:

await page.waitForSelector('tbody');

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