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