angularjs - 量角器,登录过程后脚本超时
问题描述
我在测试记录程序时遇到问题。在手动登录期间,一切都很好。但是在自动化测试期间,我无法使用登录过程后的页面(我的页面对象模型由三个页面组成: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
})
解决方案
谜题中缺少的关键是 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); // 没有
推荐阅读
- asp.net-mvc - 在 ASP.net core mvc 上运行 unity webgl 文件
- django - Django Rest Framework 不会正确序列化 GeoJSON
- sql - Oracle SQL:无法创建过程
- php - 在 Ununtu 中激活 PHP 扩展
- gis - Netlogo 变量作为面板格式的 txt (csv) 文件并与 GIS 文件链接
- configuration - 是否可以在 alacritty 中创建程序特定规则?
- json - python如何将包含多个数组的json转换为pandas数据框
- python - Python:从熊猫时间戳计算导数
- r - 是否有一个 R 函数来子集和删除与 ID 关联的最早日期?
- r - 即使我明确指出 xelatex,bookdown 仍在使用 pdflatex