diff --git a/functional-test/pom.xml b/functional-test/pom.xml
index 8560c5a8fa..2ac4817c66 100644
--- a/functional-test/pom.xml
+++ b/functional-test/pom.xml
@@ -842,6 +842,7 @@
-Dwebdriver.chrome.bin=full path to chrome binary.
-Dwebdriver.chrome.driver=full path to chromedriver binary. Default is chromedriver on $PATH
-Dwebdriver.wait=global wait time in seconds for element searches. Default is 10.
+ -Dwebdriver.screenshot.dir=location to store screenshots during test execution.Default is ${project.build.directory}/screenshots
NB: set env var DISPLAY to run test browser in alternative display, for Xnest/Xvfb/Xvnc. eg: xvfb-run -e mvn verify -Dappserver=wildfly8
==========================================================
to ask cargo to start up then wait so that tests can be run manually: mvn clean package cargo:run -Dappserver=wildfly8 -Dmysql.port=13306
diff --git a/functional-test/src/main/java/org/zanata/page/WebDriverFactory.java b/functional-test/src/main/java/org/zanata/page/WebDriverFactory.java
index ed03bf78c4..43f9107340 100644
--- a/functional-test/src/main/java/org/zanata/page/WebDriverFactory.java
+++ b/functional-test/src/main/java/org/zanata/page/WebDriverFactory.java
@@ -22,10 +22,8 @@
import java.io.File;
import java.io.IOException;
-import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
-import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.firefox.FirefoxBinary;
@@ -35,7 +33,6 @@
import org.openqa.selenium.logging.LogEntry;
import org.openqa.selenium.logging.LogType;
import org.openqa.selenium.logging.LoggingPreferences;
-import org.openqa.selenium.logging.Logs;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
@@ -50,8 +47,6 @@
import org.zanata.util.ScreenshotDirForTest;
import org.zanata.util.TestEventForScreenshotListener;
-import static org.zanata.util.Constants.chrome;
-import static org.zanata.util.Constants.firefox;
import static org.zanata.util.Constants.webDriverType;
import static org.zanata.util.Constants.webDriverWait;
import static org.zanata.util.Constants.zanataInstance;
@@ -60,33 +55,47 @@
public enum WebDriverFactory {
INSTANCE;
- private volatile WebDriver driver = createDriver();
+ private volatile EventFiringWebDriver driver = createDriver();
private DriverService driverService;
private TestEventForScreenshotListener eventListener;
private int webdriverWait;
+
public WebDriver getDriver() {
return driver;
}
- private WebDriver createDriver() {
- WebDriver driver = createPlainDriver();
+ private EventFiringWebDriver createDriver() {
+ String driverType = PropertiesHolder.getProperty(webDriverType.value());
+ EventFiringWebDriver newDriver;
+ switch (driverType.toLowerCase()) {
+ case "chrome":
+ newDriver = configureChromeDriver();
+ break;
+ case "firefox":
+ newDriver = configureFirefoxDriver();
+ break;
+ default:
+ throw new UnsupportedOperationException("only support chrome " +
+ "and firefox driver");
+ }
webdriverWait = Integer.parseInt(PropertiesHolder
.getProperty(webDriverWait.value()));
Runtime.getRuntime().addShutdownHook(new ShutdownHook());
- return driver;
+ return newDriver;
}
+ /**
+ * List the WebDriver log types
+ *
+ * LogType.CLIENT doesn't seem to log anything
+ * LogType.DRIVER, LogType.PERFORMANCE are too verbose
+ * LogType PROFILER and LogType.SERVER don't seem to work
+ *
+ * @return String array of log types
+ */
private String[] getLogTypes() {
return new String[]{
- LogType.BROWSER,
- // CLIENT doesn't seem to log anything
-// LogType.CLIENT,
- // useful, but verbose:
-// LogType.DRIVER,
-// LogType.PERFORMANCE,
- // PROFILER and SERVER don't seem to work
-// LogType.PROFILER,
-// LogType.SERVER
+ LogType.BROWSER
};
}
@@ -96,9 +105,7 @@ private String[] getLogTypes() {
* (but they don't all seem to work)
*/
public LogEntries getLogs(String type) {
- Logs logs = getDriver().manage().logs();
- LogEntries logEntries = logs.get(type);
- return logEntries;
+ return getDriver().manage().logs().get(type);
}
/**
@@ -139,42 +146,26 @@ public int getWebDriverWait() {
return webdriverWait;
}
- public void updateListenerTestName(String testName) {
+ public void registerScreenshotListener(String testName) {
+ log.info("Enabling screenshot module...");
if (eventListener == null && ScreenshotDirForTest.isScreenshotEnabled()) {
eventListener = new TestEventForScreenshotListener(driver);
}
- enableScreenshots();
+ driver.register(eventListener);
eventListener.updateTestID(testName);
}
- private WebDriver enableScreenshots() {
- log.debug("Enabling screenshot module...");
- return EventFiringWebDriver.class.cast(driver).register(eventListener);
- }
-
- public void unregisterScreenshot() {
- EventFiringWebDriver.class.cast(driver).unregister(eventListener);
+ public void unregisterScreenshotListener() {
+ log.info("Deregistering screenshot module...");
+ driver.unregister(eventListener);
}
- private WebDriver createPlainDriver() {
- String driverType =
- PropertiesHolder.getProperty(webDriverType.value(), chrome.value());
- if (driverType.equalsIgnoreCase(chrome.value())) {
- return configureChromeDriver();
- } else if (driverType.equalsIgnoreCase(firefox.value())) {
- return configureFirefoxDriver();
- } else {
- throw new UnsupportedOperationException("only support chrome and firefox driver");
- }
- }
-
- private WebDriver configureChromeDriver() {
+ private EventFiringWebDriver configureChromeDriver() {
System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,
PropertiesHolder.getProperty("webdriver.log"));
driverService = ChromeDriverService.createDefaultService();
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
- capabilities
- .setCapability("chrome.binary", PropertiesHolder.properties
+ capabilities.setCapability("chrome.binary", PropertiesHolder.properties
.getProperty("webdriver.chrome.bin"));
enableLogging(capabilities);
@@ -183,18 +174,16 @@ private WebDriver configureChromeDriver() {
} catch (IOException e) {
throw new RuntimeException("fail to start chrome driver service");
}
- return new EventFiringWebDriver(
- new Augmenter().augment(new RemoteWebDriver(driverService
- .getUrl(),
- capabilities)));
+ return new EventFiringWebDriver(new Augmenter().augment(
+ new RemoteWebDriver(driverService.getUrl(), capabilities)));
}
- private WebDriver configureFirefoxDriver() {
+ private EventFiringWebDriver configureFirefoxDriver() {
final String pathToFirefox =
Strings.emptyToNull(PropertiesHolder.properties
.getProperty("firefox.path"));
- FirefoxBinary firefoxBinary = null;
+ FirefoxBinary firefoxBinary;
if (pathToFirefox != null) {
firefoxBinary = new FirefoxBinary(new File(pathToFirefox));
} else {
@@ -202,12 +191,8 @@ private WebDriver configureFirefoxDriver() {
}
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
enableLogging(capabilities);
-
- /*
- * TODO: Evaluate current timeout Timeout the connection in 30 seconds
- * firefoxBinary.setTimeout(TimeUnit.SECONDS.toMillis(30));
- */
- return new FirefoxDriver(firefoxBinary, makeFirefoxProfile(), capabilities);
+ return new EventFiringWebDriver(new FirefoxDriver(firefoxBinary,
+ makeFirefoxProfile(), capabilities));
}
private void enableLogging(DesiredCapabilities capabilities) {
@@ -225,14 +210,6 @@ private FirefoxProfile makeFirefoxProfile() {
// TODO - look at FirefoxDriver.getProfile().
}
final FirefoxProfile firefoxProfile = new FirefoxProfile();
-
- /*
- * TODO: Evaluate need for this Disable unnecessary connection to
- * sb-ssl.google.com
- * firefoxProfile.setPreference("browser.safebrowsing.malware.enabled",
- * false);
- */
-
firefoxProfile.setAlwaysLoadNoFocusLib(true);
firefoxProfile.setEnableNativeEvents(true);
firefoxProfile.setAcceptUntrustedCertificates(true);
diff --git a/functional-test/src/main/java/org/zanata/util/Constants.java b/functional-test/src/main/java/org/zanata/util/Constants.java
index a7bae4bbd6..3104957ca4 100644
--- a/functional-test/src/main/java/org/zanata/util/Constants.java
+++ b/functional-test/src/main/java/org/zanata/util/Constants.java
@@ -55,20 +55,4 @@ public String value() {
return value;
}
- public static Map projectTypeOptions() {
- Map projectTypeOptions = new HashMap();
- projectTypeOptions.put("None", "-- No selection --");
- projectTypeOptions.put("File",
- "File. For plain text, LibreOffice, InDesign, HTML.");
- projectTypeOptions.put("Gettext",
- "Gettext. For gettext software strings.");
- projectTypeOptions.put("Podir", "Podir. For publican/docbook strings.");
- projectTypeOptions.put("Properties",
- "Properties. For Java properties files.");
- projectTypeOptions.put("Utf8Properties",
- "Utf8Properties. For UTF8-encoded Java properties.");
- projectTypeOptions.put("Xliff", "Xliff. For supported XLIFF files.");
- projectTypeOptions.put("Xml", "Xml. For XML from the Zanata REST API.");
- return projectTypeOptions;
- }
}
diff --git a/functional-test/src/main/java/org/zanata/util/TestEventForScreenshotListener.java b/functional-test/src/main/java/org/zanata/util/TestEventForScreenshotListener.java
index fa682f7a27..6ecadc9efe 100644
--- a/functional-test/src/main/java/org/zanata/util/TestEventForScreenshotListener.java
+++ b/functional-test/src/main/java/org/zanata/util/TestEventForScreenshotListener.java
@@ -67,7 +67,10 @@ private void createScreenshot(String ofType) {
File testIDDir = null;
try {
testIDDir = ScreenshotDirForTest.screenshotForTest(testId);
- testIDDir.mkdirs();
+ if (!testIDDir.exists()) {
+ log.info("Creating screenshot dir {}", testIDDir.getAbsolutePath());
+ assert (testIDDir.mkdirs());
+ }
File screenshotFile =
((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshotFile,
diff --git a/functional-test/src/test/java/org/zanata/util/ScreenshotEnabledTestRunListener.java b/functional-test/src/test/java/org/zanata/util/ScreenshotEnabledTestRunListener.java
index d079ecf996..7b92b1c74e 100644
--- a/functional-test/src/test/java/org/zanata/util/ScreenshotEnabledTestRunListener.java
+++ b/functional-test/src/test/java/org/zanata/util/ScreenshotEnabledTestRunListener.java
@@ -65,7 +65,7 @@ public void testFailure(Failure failure) throws Exception {
private static void enableScreenshotForTest(String testDisplayName)
throws Exception {
- WebDriverFactory.INSTANCE.updateListenerTestName(testDisplayName);
+ WebDriverFactory.INSTANCE.registerScreenshotListener(testDisplayName);
String date = new Date().toString();
log.debug("[TEST] {}:{}", testDisplayName, date);
}
@@ -73,6 +73,7 @@ private static void enableScreenshotForTest(String testDisplayName)
private static void deleteScreenshots(String testDisplayName) {
File testDir = ScreenshotDirForTest.screenshotForTest(testDisplayName);
try {
+ log.info("Deleting screenshots for {}", testDisplayName);
FileUtils.deleteDirectory(testDir);
} catch (IOException e) {
log.warn("error deleting screenshot base directory: {}",
@@ -81,6 +82,6 @@ private static void deleteScreenshots(String testDisplayName) {
}
private static void unregisterScreenshot() {
- WebDriverFactory.INSTANCE.unregisterScreenshot();
+ WebDriverFactory.INSTANCE.unregisterScreenshotListener();
}
}