From 89e82e90bc3d1ef7d8dcac86fdfe91efcbe3c179 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=ABl=20Kr=C3=A4hemann?= <joel.kraehemann@frentix.com>
Date: Mon, 15 Oct 2012 17:43:01 +0200
Subject: [PATCH] OO-296: waiting for binder tree to be loaded before accessing
 it.

---
 .../olat/util/FunctionalEPortfolioUtil.java   | 36 ++++++++++++++++++-
 .../java/org/olat/util/FunctionalUtil.java    | 19 +++++-----
 2 files changed, 46 insertions(+), 9 deletions(-)

diff --git a/src/test/java/org/olat/util/FunctionalEPortfolioUtil.java b/src/test/java/org/olat/util/FunctionalEPortfolioUtil.java
index a5a7b3f78fa..d4a5285c0cb 100644
--- a/src/test/java/org/olat/util/FunctionalEPortfolioUtil.java
+++ b/src/test/java/org/olat/util/FunctionalEPortfolioUtil.java
@@ -363,6 +363,15 @@ public class FunctionalEPortfolioUtil {
 		if(!functionalHomeSiteUtil.openActionByMenuTree(browser, EPortfolioAction.MY_BINDERS, false))
 			return(false);
 		
+		/* wait until tree has loaded */
+		StringBuffer locatorBuffer = new StringBuffer();
+		
+		locatorBuffer.append("xpath=//li[contains(@class, '")
+		.append(functionalUtil.getTreeNodeLoadingCss())
+		.append("')]");
+		functionalUtil.waitForPageToUnloadElement(browser, locatorBuffer.toString());
+		
+		/* select binder */
 		StringBuffer selectorBuffer = new StringBuffer();
 		
 		selectorBuffer.append("xpath=//h4[text()='")
@@ -557,6 +566,14 @@ public class FunctionalEPortfolioUtil {
 				return(false);
 		}
 		
+		/* wait until tree has loaded */
+		StringBuffer locatorBuffer = new StringBuffer();
+		
+		locatorBuffer.append("xpath=//li[contains(@class, '")
+		.append(functionalUtil.getTreeNodeLoadingCss())
+		.append("')]");
+		functionalUtil.waitForPageToUnloadElement(browser, locatorBuffer.toString());
+		
 		/* click add */
 		StringBuffer selectorBuffer = new StringBuffer();
 		
@@ -741,6 +758,14 @@ public class FunctionalEPortfolioUtil {
 		/* open editor */
 		openEditor(browser);
 		
+		/* wait until tree has loaded */
+		StringBuffer locatorBuffer = new StringBuffer();
+		
+		locatorBuffer.append("xpath=//li[contains(@class, '")
+		.append(functionalUtil.getTreeNodeLoadingCss())
+		.append("')]");
+		functionalUtil.waitForPageToUnloadElement(browser, locatorBuffer.toString());
+		
 		/* select page and click create structure */
 		StringBuffer selectorBuffer = new StringBuffer();
 		
@@ -970,11 +995,20 @@ public class FunctionalEPortfolioUtil {
 	protected boolean selectTree(Selenium browser, String binder, String page, String structure){
 		String selector = createSelector(binder, page, structure);
 
+		/* wait until tree has loaded */
+		StringBuffer locatorBuffer = new StringBuffer();
+		
+		locatorBuffer.append("xpath=//li[contains(@class, '")
+		.append(functionalUtil.getTreeNodeLoadingCss())
+		.append("')]");
+		functionalUtil.waitForPageToUnloadElement(browser, locatorBuffer.toString());
+		
+		/* click selector */
 		functionalUtil.waitForPageToLoadElement(browser, selector);
 
 		browser.click(selector);
 
-		StringBuffer locatorBuffer = new StringBuffer();
+		locatorBuffer = new StringBuffer();
 
 		locatorBuffer.append("xpath=//li[contains(@class, 'x-tree-node')]//a//span[contains(text(), '")
 		.append((structure != null) ? structure: page)
diff --git a/src/test/java/org/olat/util/FunctionalUtil.java b/src/test/java/org/olat/util/FunctionalUtil.java
index dcdbdf48f81..b5c6058bbe9 100644
--- a/src/test/java/org/olat/util/FunctionalUtil.java
+++ b/src/test/java/org/olat/util/FunctionalUtil.java
@@ -123,6 +123,7 @@ public class FunctionalUtil {
 	public final static String TABLE_LAST_CHILD_CSS = "b_last_child";
 	public final static String TREE_NODE_ANCHOR_CSS = "x-tree-node-anchor";
 	public final static String TREE_NODE_CSS = "x-tree-node";
+	public final static String TREE_NODE_LOADING_CSS = "x-tree-node-loading";
 	public final static String WINDOW_CLOSE_LINK_CSS = "b_link_close";
 	
 	public final static String FORM_SAVE_XPATH = "//button[@type='button' and last()]";
@@ -172,6 +173,7 @@ public class FunctionalUtil {
 	private String tableLastChildCss;
 	private String treeNodeAnchorCss;
 	private String treeNodeCss;
+	private String treeNodeLoadingCss;
 	
 	private FunctionalHomeSiteUtil functionalHomeSiteUtil;
 	private FunctionalGroupsSiteUtil functionalGroupsSiteUtil;
@@ -239,6 +241,7 @@ public class FunctionalUtil {
 		tableLastChildCss = TABLE_LAST_CHILD_CSS;
 		treeNodeAnchorCss = TREE_NODE_ANCHOR_CSS;
 		treeNodeCss = TREE_NODE_CSS;
+		treeNodeLoadingCss = TREE_NODE_LOADING_CSS;
 		
 		functionalHomeSiteUtil = new FunctionalHomeSiteUtil(this);
 		functionalGroupsSiteUtil = new FunctionalGroupsSiteUtil(this);
@@ -535,14 +538,6 @@ public class FunctionalUtil {
 	public String openBusinessPath(Selenium browser, String businessPath){
 		idle(browser);
 		
-		try {
-			//FIXME:JK: work-around
-			Thread.sleep(5000);
-		} catch (InterruptedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		
 		/* cut off http:// or domain */
 		if(businessPath.startsWith("http://")){
 			//businessPath = businessPath.substring(businessPath.indexOf('/', 7));
@@ -1563,4 +1558,12 @@ public class FunctionalUtil {
 	public void setTreeNodeCss(String treeNodeCss) {
 		this.treeNodeCss = treeNodeCss;
 	}
+
+	public String getTreeNodeLoadingCss() {
+		return treeNodeLoadingCss;
+	}
+
+	public void setTreeNodeLoadingCss(String treeNodeLoadingCss) {
+		this.treeNodeLoadingCss = treeNodeLoadingCss;
+	}
 }
-- 
GitLab