From 8b3cc44a71879fe89252ffdaff680842da5506af Mon Sep 17 00:00:00 2001 From: Damian Jansen Date: Mon, 20 Apr 2015 13:16:46 +1000 Subject: [PATCH] Wait for page loaders to be finished before proceeding Requires the class 'is-active' to be present in the web element, as the loader is always present and visible. Conflicts: functional-test/src/main/java/org/zanata/page/AbstractPage.java --- .../java/org/zanata/page/AbstractPage.java | 25 ++++++++++++++++++- .../zanata/feature/account/ProfileTest.java | 3 ++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/functional-test/src/main/java/org/zanata/page/AbstractPage.java b/functional-test/src/main/java/org/zanata/page/AbstractPage.java index 18a042ff0d..35419cbff5 100644 --- a/functional-test/src/main/java/org/zanata/page/AbstractPage.java +++ b/functional-test/src/main/java/org/zanata/page/AbstractPage.java @@ -213,7 +213,8 @@ public boolean apply(WebDriver input) { if (ajaxCalls == null) { if (log.isWarnEnabled()) { String url = getDriver().getCurrentUrl(); - String pageSource = ShortString.shorten(getDriver().getPageSource(), 2000); + String pageSource = ShortString.shorten( + getDriver().getPageSource(), 2000); log.warn("XMLHttpRequest.active is null. URL: {}\nPartial page source follows:\n{}", url, pageSource); } return true; @@ -225,6 +226,28 @@ public boolean apply(WebDriver input) { "any AJAX requests."); } return ajaxCalls <= getExpectedBackgroundRequests(); + + } + }); + waitForLoaders(); + } + + /** + * Wait for all loaders to be inactive + */ + private void waitForLoaders() { + waitForAMoment().withMessage("Loader indicator").until(new Predicate() { + @Override + public boolean apply(WebDriver input) { + List loaders = driver + .findElements(By.className("js-loader")); + for (WebElement loader : loaders) { + if (loader.getAttribute("class").contains("is-active")) { + log.info("Wait for loader finished"); + return false; + } + } + return true; } }); } diff --git a/functional-test/src/test/java/org/zanata/feature/account/ProfileTest.java b/functional-test/src/test/java/org/zanata/feature/account/ProfileTest.java index 8d414acd11..16e08618f5 100644 --- a/functional-test/src/test/java/org/zanata/feature/account/ProfileTest.java +++ b/functional-test/src/test/java/org/zanata/feature/account/ProfileTest.java @@ -85,8 +85,9 @@ public void changeUsersApiKey() throws Exception { .goToSettingsTab() .goToSettingsClientTab(); String currentApiKey = dashboardClientTab.getApiKey(); - dashboardClientTab = dashboardClientTab.pressApiKeyGenerateButton(); + dashboardClientTab.waitForPageSilence(); + dashboardClientTab = dashboardClientTab.pressApiKeyGenerateButton(); dashboardClientTab.waitForApiKeyChanged(currentApiKey); assertThat(dashboardClientTab.getApiKey()).isNotEqualTo(currentApiKey)