我们正在以异步/等待方式编写e2e测试,以便能够对其进行调试。但是测试有
await browser.wait(ExpectedConditions.presenceOf(appPage.getLogo()));
只是挂在这条线上。我不知道为什么,我不明白。启用控制流后,它运行良好,但是一旦禁用它,它就会开始挂起。测试用例看起来像这样
it('should login', async () => {
await page.navigateTo();
await page.login();
await browser.wait(ExpectedConditions.presenceOf(appPage.getLogo()));
await browser.waitForAngularEnabled(false);
expect(await browser.getCurrentUrl()).toContain('/login');
});
想法是在登录后等待导航完成。在可以看到e2e执行的浏览器中,可以清楚地看到它到达了正确的页面并且徽标在那里,但是它卡在那里直到发生超时。有人知道为什么吗?
答案 0 :(得分:1)
让我弄清楚情况:
您等待登录,完成此步骤后,它会在其他页面上显示徽标吗? 如果是这种情况,那么我可能会猜到这个问题。 可以说函数login()已经完成,在它能够在DOM中呈现徽标之前,它已经运行了app.Page.getLogo()。 所以你有一个类似的场景;
登录()然后 然后呈现徽标 getLogo()
因此,从第1页->第2页中查找渲染时间非常复杂。这不是固定时间。因此,您想要的是在DOM中拥有一些可以运行代码并多次检查指定元素的东西。
我不确定如何进行测试以检查徽标在页面中是否可用,但我建议您在DOM中查找id标记。
仅查看您的await函数是否起作用,请在调用后进行超时 等待page.login();看看会发生什么,只需检查一下将超时设置为30秒即可。
因此,通常,在有关页面渲染时,您可能需要一个睡眠计时器,该计时器检查下一页上的元素是否存在(登录徽标的元素等)
代码参考应该是
wait for complete page load does not work as expected in Protractor