首页 > 解决方案 > 必须使用手动 wait() 来获取 CodeceptJS/Puppeteer 自定义助手来查看表(td tr)

问题描述

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

谢谢!

标签: puppeteercodeceptjs

解决方案


你需要等待waitForSelector:

await page.waitForSelector('tbody');

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


推荐阅读