From f08695c8014e06bb7b9a42701d546a23fac0ef92 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Wed, 25 Sep 2019 19:05:53 +0200
Subject: [PATCH] no-jira: investigate issue with LTI selenium

---
 .../olat/selenium/page/course/LTIPage.java    | 30 +++++++++++--------
 .../selenium/page/graphene/OOGraphene.java    | 19 ++++++++++++
 2 files changed, 36 insertions(+), 13 deletions(-)

diff --git a/src/test/java/org/olat/selenium/page/course/LTIPage.java b/src/test/java/org/olat/selenium/page/course/LTIPage.java
index 09e34b2f86a..cd9b3e7acb4 100644
--- a/src/test/java/org/olat/selenium/page/course/LTIPage.java
+++ b/src/test/java/org/olat/selenium/page/course/LTIPage.java
@@ -45,19 +45,23 @@ public class LTIPage {
 	}
 	
 	public LTIPage start() {
-		By startBy = By.xpath("//div[contains(@class,'o_button_group')]/a[contains(@onclick,'start')]");
-		OOGraphene.waitElement(startBy, browser);
-		browser.findElement(startBy).click();
-		
-		By iframeBy = By.cssSelector(".o_iframedisplay iframe");
-		OOGraphene.waitElement(iframeBy, browser);
-		
-		List<WebElement> iframes = browser.findElements(iframeBy);
-		browser = browser.switchTo().frame(iframes.get(0));
-		
-		By launchedBy = By.xpath("//p[contains(text(),'Launch Validated.')]");
-		OOGraphene.waitElement(launchedBy, browser);
-		
+		try {
+			By startBy = By.xpath("//div[contains(@class,'o_button_group')]/a[contains(@onclick,'start')]");
+			OOGraphene.waitElement(startBy, browser);
+			browser.findElement(startBy).click();
+			
+			By iframeBy = By.cssSelector(".o_iframedisplay iframe");
+			OOGraphene.waitElement(iframeBy, browser);
+			
+			WebElement iframe = browser.findElement(iframeBy);
+			WebDriver iframeBrowser = browser.switchTo().frame(iframe);
+
+			By launchedBy = By.xpath("//p[contains(text(),'Launch Validated.')]");
+			OOGraphene.waitElement(launchedBy, iframeBrowser);
+		} catch (Exception e) {
+			OOGraphene.takeScreenshot("LTIPage::start", browser);
+			throw e;
+		}
 		return this;
 	}
 	
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 3950549ef8b..f9b5c16396a 100644
--- a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
+++ b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
@@ -21,6 +21,7 @@ package org.olat.selenium.page.graphene;
 
 import java.io.File;
 import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.time.Duration;
 import java.util.Calendar;
 import java.util.Date;
@@ -31,11 +32,13 @@ import java.util.function.Predicate;
 import org.apache.logging.log4j.Logger;
 import org.junit.Assert;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.StringHelper;
 import org.openqa.selenium.By;
 import org.openqa.selenium.ElementNotVisibleException;
 import org.openqa.selenium.JavascriptExecutor;
 import org.openqa.selenium.StaleElementReferenceException;
+import org.openqa.selenium.TakesScreenshot;
 import org.openqa.selenium.TimeoutException;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
@@ -746,4 +749,20 @@ public class OOGraphene {
 			//e.printStackTrace();
 		}
 	}
+	
+	public static void takeScreenshot(String test, WebDriver browser) {
+		TakesScreenshot scrShot = ((TakesScreenshot)browser);
+		File screenFile = scrShot.getScreenshotAs(org.openqa.selenium.OutputType.FILE);
+		
+		SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd'T'HHmmss");
+		String filename = test + "" + format.format(new Date()) + ".jpg";
+		File path = new File("screenshots");
+		if(!path.exists() && !path.mkdirs()) {
+			path = new File(System.getProperty("java.io.tmpdir"), "screenshots");
+			path.mkdirs();
+		}
+		File screenshotFile = new File(path, filename);
+		log.error("Write screenshot: {} {}", test, screenshotFile);
+		FileUtils.copyFileToFile(screenFile, screenshotFile, true);
+	}
 }
-- 
GitLab