【问题标题】:Protractor test hangs on await browser.wait with disabled control flow量角器测试挂起等待 browser.wait 并禁用控制流
【发布时间】:2018-11-23 20:42:46
【问题描述】:

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

【问题讨论】:

  • 这个这个: var checkExist = setInterval(function() { browser.getCurrentUrl().then(function(currentURL){ if (currentURL == baseUrl+'/login') { clearInterval(checkExist); } }) }, 1000); // 每 1000 毫秒检查一次 w3schools.com/js/js_timing.asp

标签: angular protractor angular-e2e


【解决方案1】:

让我把场景弄清楚:

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

Login() 然后 然后呈现徽标 getLogo()

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

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

只是为了看看你的等待函数是否有效,在你调用后超时 等待 page.login();看看会发生什么,将超时设置为 30 秒即可。

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

代码参考将是;

wait for complete page load does not work as expected in Protractor

【讨论】:

  • 你说得对,我尝试在等待元素出现之前添加超时。但在这种情况下,我有一个问题:我如何等到登录后呈现新页面?有没有不设置超时检查的好方法?
猜你喜欢
  • 1970-01-01
  • 2018-12-31
  • 2016-02-15
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
相关资源
最近更新 更多