在使用量角器e2e测试运行时测试角度应用程序。
我目前正面临一个问题。这是一个间歇性的问题。 我收到“JavascriptError:javascript错误:文档在等待结果时被卸载”。
以下是日志:
Failures:
[18:51:46][Step 4/4] 1) vacancies should create new job listing
[18:51:46][Step 4/4] Message:
[18:51:46][Step 4/4] [31m Failed: javascript error: document unloaded while waiting for result
[18:51:46][Step 4/4] (Session info: chrome=44.0.2403.155)
[18:51:46][Step 4/4] (Driver info: chromedriver=2.15.322455 (rg5th540dac8d0c453355d3d922c91ads1231),platform=Mac OS X 10.10.4 x86_64) [0m
[18:51:46][Step 4/4] Stack:
[18:51:46][Step 4/4] JavascriptError: javascript error: document unloaded while waiting for result
[18:51:46][Step 4/4] (Session info: chrome=44.0.2403.155)
[18:51:46][Step 4/4] (Driver info: chromedriver=2.15.322455 (rg5th540dac8d0c453355d3d922c91ads1231),platform=Mac OS X 10.10.4 x86_64)
[18:51:46][Step 4/4] at Array.forEach (native)
[18:51:46][Step 4/4] From: Task: Run it("should create new job listing") in control flow
[18:51:46][Step 4/4] at Array.forEach (native)
[18:51:46][Step 4/4] From asynchronous test:
[18:51:46][Step 4/4] Error
[18:51:46][Step 4/4] at Suite.<anonymous> (/client/test/e2e/vacancies/vacancies.create.specs.js:67:7)
[18:51:46][Step 4/4] at Object.<anonymous> (/client/test/e2e/vacancies/vacancies.create.specs.js:17:3)
日志指向的行是测试的起始行。
以下是代码段:
67 it('should create new job listing', function () {
68 //Login As Admin To Access Vacancies Feature
69 loginAsManager();
.
. //load manager's dashboard list page
. dashboardPage = new DashboardPage();
. dashboardPage.vacanciesTab.click();
.
. //load vacancies list page
. var vacanciesUrl = browser.baseUrl + '#/vacancies';
. browser.waitForAngular();
. expect(browser.getCurrentUrl()).toEqual(vacanciesUrl);
. vacanciesPage = new VacanciesPage();
. vacanciesPage.addVacancyButton.click();
.
.
我认为这确实意味着在期待完成它的断言之前, 目标网页不再可用或已卸载。
因此,在每次页面导航后,我都尝试添加&#34; browser.waitForAngular()&#34;。但它确实无法帮助断言通过。
奇怪的是Ubuntu14.04平台上的测试通过 但在Mac OS X 10.10.4 x86_64
中失败每次都不会因同一次测试而失败。它始终是一个不同的测试。
任何建议都会非常有用。
感谢。
答案 0 :(得分:2)
我能够通过在每次更改URL后让浏览器休眠几秒钟来解决此问题。
以下是代码段:
67 it('should create new job listing', function () {
68 //Login As Admin To Access Vacancies Feature
69 loginAsManager();
.
. //load manager's dashboard list page
. dashboardPage = new DashboardPage();
. dashboardPage.vacanciesTab.click();
.
. //load vacancies list page
. var vacanciesUrl = browser.baseUrl + '#/vacancies';
. browser.sleep(2000);
. expect(browser.getCurrentUrl()).toEqual(vacanciesUrl);
. vacanciesPage = new VacanciesPage();
. vacanciesPage.addVacancyButton.click();
.
.
我认为这不是解决这个问题的巧妙方法。
如果有人有更好的解决方案,我会很高兴听到。
干杯 拉夫
答案 1 :(得分:2)
我建议在量角器中查看ExpectedConditions。他们在这些类型的场景中提供帮助。如果您查看示例,这可能有助于您找到问题的替代解决方案。我目前正在使用这种模式重写大量测试,因为我们的CI构建服务器上经常出现间歇性测试失败。