首页 > 解决方案 > 量角器,登录过程后脚本超时

问题描述


我在测试记录程序时遇到问题。在手动登录期间,一切都很好。但是在自动化测试期间,我无法使用登录过程后的页面(我的页面对象模型由三个页面组成:homePage、loginPage、afterLoginPage)。
看到第三个期望结果是 NOK,我没有看到“身体”。
但是如果我停止程序“browser.pause()”并检查它,我会看到完整的 DOM 结构。
这是错误消息:

Failed: script timeout
(Session info: chrome=80.0.3987.149)
(Driver info: chromedriver=80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}),platform=Windows NT 10.0.18363 x86_64)

你能帮我吗??谢谢

it('Přihlášení uživatele.', async function(){
  await homePage.getUrl('https://...../');
  expect(await element(by.tagName('body')).isPresent()).toBe(true); // OK
  await homePage.clickLogin();
  expect(await element(by.tagName('body')).isPresent()).toBe(true); // OK
  await loginPage.fillUser(email);
  await loginPage.fillPassword(password);
  await loginPage.clickLogin();
  await browser.sleep(3000);
  expect(await element(by.tagName('body')).isPresent()).toBe(true); // NOK
})

标签: angularjsprotractorautomated-tests

解决方案


谜题中缺少的关键是 Protractors ExpectedConditions,它是 Protractor 最好的东西之一。

https://www.protractortest.org/#/api?view=ProtractorExpectedConditions

你做的Wait是静态等待,protractor支持动态等待,也就是说它只等待需要的时间,而不是时间限制的总时间。

await browser.wait(EC.visibilityOf(by.tagName('body)), 10000, "等待 body 出现")

上面的代码最多等待 10 秒,以等待 body 标签的存在。

但我可能会等待 URL 更改或主页上存在元素。

这是一个学习量角器的经典问题,经常会得到一个问题..“为什么等待不等待”。

您在下面await的代码中等待问题 if element(...).isPresent(),所以这对浏览器来说是一个简单的问题,它只是回答“否”,因为它很可能尚未加载。

期望(等待元素(by.tagName('body')).isPresent()).toBe(true); // 没有


推荐阅读