量角器测试挂起await browser.wait具有禁用的控制流

时间:2018-11-23 09:46:22

标签: angular protractor angular-e2e

我们正在以异步/等待方式编写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执行的浏览器中,可以清楚地看到它到达了正确的页面并且徽标在那里,但是它卡在那里直到发生超时。有人知道为什么吗?

1 个答案:

答案 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

相关问题