量角器测试挂起等待 browser.wait 并禁用控制流

Protractor test hangs on await browser.wait with disabled control flow

我们正在以 async/await 的方式编写端到端测试,以便能够对其进行调试。但是测试有

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 执行的浏览器中,可以清楚地看到它到达了正确的页面并且徽标在那里,但它一直卡在那里直到超时发生。有谁知道为什么?

让我直接说明情况:

您正在等待登录,完成此步骤后它会在不同的页面上显示徽标,对吗? 如果是这样的话,那么我可能会猜到这个问题。 假设函数 login() 已完成,在它能够在 DOM 中呈现徽标之前,它已经运行了 app.Page.getLogo()。 所以你有这样的场景;

然后登录() 然后呈现徽标 getLogo()

所以你很难找到第 1 页 -> 第 2 页的渲染时间。这不是一个恒定的时间。所以你想要的是在 DOM.

中拥有运行代码并多次检查特定元素的东西

我不确定您是如何进行测试以检查徽标在页面中是否可用,但我建议您在 DOM 中查找 id 标签。

只是为了看看你的等待功能是否有效,在你调用后超时 等待 page.login();看看会发生什么,将超时设置为 30 秒,检查一下。

所以通常当它关于页面呈现时,您可能需要一个睡眠定时器来检查下一页上的元素是否存在(您的登录徽标等元素)

代码参考是;