如何解决必须使用手动的wait来获得CodeceptJS / Puppeteer自定义帮助程序,以查看表格td tr
我有一个codeceptjs / puppeteer项目,并且正在构建一个自定义帮助程序来访问表中的信息。我已经能够完成这项工作,但是只能在测试步骤中等待两秒钟,然后再在自定义帮助程序类中调用async函数。鉴于所有这些都是基于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的核心“功能”),我非常感谢。
谢谢!
解决方法
您需要等待waitForSelector:
await page.waitForSelector('tbody');
几乎所有page
方法都在返回promise,因此您必须等待它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。