From 97283f70bfe7cd1bfd75811a04de3bb8dde243ee Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Wed, 17 Feb 2016 16:44:22 +0100 Subject: [PATCH] no-jira: improve reliability of some selenium tests --- .../java/org/olat/selenium/CourseTest.java | 6 ++--- .../olat/selenium/page/core/BookingPage.java | 25 ++++++++----------- .../page/course/CourseEditorPageFragment.java | 6 +++++ .../selenium/page/graphene/OOGraphene.java | 5 ++++ .../selenium/page/repository/FeedPage.java | 2 +- 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/test/java/org/olat/selenium/CourseTest.java b/src/test/java/org/olat/selenium/CourseTest.java index f7ff38bbdd7..36bd27221b5 100644 --- a/src/test/java/org/olat/selenium/CourseTest.java +++ b/src/test/java/org/olat/selenium/CourseTest.java @@ -802,11 +802,11 @@ public class CourseTest { Assert.assertEquals(podcastTitle, podcastH2.getText().trim()); FeedPage feed = FeedPage.getFeedPage(browser); - feed.newExternalPodcast("http://pod.drs.ch/rock_special_mpx.xml"); + feed.newExternalPodcast("http://podcasts.srf.ch/rock_special_mpx.xml"); //check only that the "episodes" title is visible By episodeTitleby = By.cssSelector("div.o_podcast_episodes>h4.o_title"); - OOGraphene.waitElement(episodeTitleby, 5, browser); + OOGraphene.waitElement(episodeTitleby, 20, browser); WebElement episodeH4 = browser.findElement(episodeTitleby); Assert.assertNotNull(episodeH4); } @@ -859,7 +859,7 @@ public class CourseTest { //check only that the subscription link is visible By subscriptionBy = By.cssSelector("div.o_subscription>a"); - OOGraphene.waitElement(subscriptionBy, 10, browser); + OOGraphene.waitElement(subscriptionBy, 20, browser); WebElement subscriptionLink = browser.findElement(subscriptionBy); Assert.assertTrue(subscriptionLink.isDisplayed()); } diff --git a/src/test/java/org/olat/selenium/page/core/BookingPage.java b/src/test/java/org/olat/selenium/page/core/BookingPage.java index 7b15d3999b5..54fece431ea 100644 --- a/src/test/java/org/olat/selenium/page/core/BookingPage.java +++ b/src/test/java/org/olat/selenium/page/core/BookingPage.java @@ -38,8 +38,6 @@ import org.openqa.selenium.WebElement; */ public class BookingPage { - private static final By tokenIconBy = By.className("o_ac_token_icon"); - private static final By addMethodLinksBy = By.cssSelector("fieldset.o_ac_configuration ul.dropdown-menu a"); private WebDriver browser; @@ -64,20 +62,19 @@ public class BookingPage { * @return This page */ public BookingPage addTokenMethod() { - return addMethod(tokenIconBy); + addMethod("o_ac_token_icon"); + By popupBy = By.cssSelector("div.modal-dialog"); + OOGraphene.waitElement(popupBy, 5, browser); + return this; } - private BookingPage addMethod(By iconBy) { - List<WebElement> links = browser.findElements(addMethodLinksBy); - WebElement tokenLink = null; - for(WebElement link:links) { - List<WebElement> icons = link.findElements(iconBy); - if(icons.size() > 0) { - tokenLink = link; - } - } - Assert.assertNotNull(tokenLink); - tokenLink.click(); + private BookingPage addMethod(String iconClassname) { + //wait menu + By addMenuBy = By.cssSelector("fieldset.o_ac_configuration ul.dropdown-menu"); + OOGraphene.waitElement(addMenuBy, 5, browser); + By addMethodBy = By.xpath("//fieldset[contains(@class,'o_ac_configuration')]//ul[contains(@class,'dropdown-menu')]//a[//i[contains(@class,'" + iconClassname + "')]]"); + WebElement methodLink = browser.findElement(addMethodBy); + methodLink.click(); OOGraphene.waitBusy(browser); return this; } diff --git a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java index 80556a10d53..aa69423cab9 100644 --- a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java +++ b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java @@ -107,6 +107,8 @@ public class CourseEditorPageFragment { By rootNodeBy = By.cssSelector("span.o_tree_link.o_tree_l0>a"); browser.findElement(rootNodeBy).click(); OOGraphene.waitBusy(browser); + By rootNodeActiveBy = By.cssSelector("span.o_tree_link.o_tree_l0.active"); + OOGraphene.waitElement(rootNodeActiveBy, 5, browser); return this; } @@ -149,6 +151,10 @@ public class CourseEditorPageFragment { } private CourseEditorPageFragment selectTab(By tabBy) { + //make sure the tab bar is loaded + By navBarBy = By.cssSelector("ul.o_node_config"); + OOGraphene.waitElement(navBarBy, 5, browser); + List<WebElement> tabLinks = browser.findElements(navBarNodeConfiguration); boolean found = false; diff --git a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java index ae6ebcb03ae..8b6bf0549a3 100644 --- a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java +++ b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java @@ -53,6 +53,11 @@ public class OOGraphene { Graphene.waitModel(browser).pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until(new BusyPredicate()); } + public static void waitBusy(WebDriver browser, int timeoutInSeconds) { + Graphene.waitModel(browser).withTimeout(timeoutInSeconds, TimeUnit.SECONDS) + .pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until(new BusyPredicate()); + } + public static void waitElement(By element, WebDriver browser) { Graphene.waitModel(browser).pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until().element(element).is().visible(); } diff --git a/src/test/java/org/olat/selenium/page/repository/FeedPage.java b/src/test/java/org/olat/selenium/page/repository/FeedPage.java index 49f9e9b47ec..0c2d36727c9 100644 --- a/src/test/java/org/olat/selenium/page/repository/FeedPage.java +++ b/src/test/java/org/olat/selenium/page/repository/FeedPage.java @@ -110,7 +110,7 @@ public class FeedPage { //save the settings By saveButton = By.xpath("//div[contains(@class,'modal-body')]//form//button[contains(@class,'btn-primary')]"); browser.findElement(saveButton).click(); - OOGraphene.waitBusy(browser); + OOGraphene.waitBusy(browser, 20); return this; } -- GitLab