1

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

4

1 回答 1

1

让我把场景弄清楚:

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

Login() 然后渲染 logo 然后 getLogo()

因此,您很难从 page1 -> page 2 中找到渲染时间。这不是一个恒定的时间。因此,您想要的是在 DOM 中运行代码并多次检查特定元素。

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

只是为了看看你的 await 函数是否有效,在你调用 await page.login(); 后进行超时。看看会发生什么,将超时设置为 30 秒,只需检查一下。

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

代码参考将是;

等待完整页面加载在量角器中无法按预期工作

于 2018-11-23T10:52:23.893 回答