diff --git a/.travis.yml b/.travis.yml
index 87423a66..ea8271d1 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -69,10 +69,10 @@ script:
- mvn verify -B -Dthreads=1 -Dconfig=FirefoxGrid.yaml
# Firefox off the grid
- - mvn verify -B -Dthreads=${THREAD_COUNT} -Dbrowser=firefox -DreuseBrowser=true -Dit.test=TheInternetExampleTests 2> /dev/null
+ - mvn verify -B -Dthreads=${THREAD_COUNT} -Dbrowser=firefox -DreuseBrowser=true -Dheadless=true -Dit.test=TheInternetExampleTests 2> /dev/null
# Chrome on the grid
- - mvn verify -B -Dthreads=${THREAD_COUNT} -Dbrowser=chrome -DreuseBrowser=true -DgridURL=http://localhost:4444/wd/hub #-DcaptureURL=${CAPTURE_URL} -DsutName="${SUT_NAME}" -DsutVersion="${SUT_VERSION}"
+ - mvn verify -B -Dthreads=${THREAD_COUNT} -Dbrowser=chrome -DreuseBrowser=true -Dheadless=true -DgridURL=http://localhost:4444/wd/hub #-DcaptureURL=${CAPTURE_URL} -DsutName="${SUT_NAME}" -DsutVersion="${SUT_VERSION}"
# Custom Browser Impl
- mvn verify -B -Dthreads=${THREAD_COUNT} -DcustomBrowserImpl=CustomFirefoxImpl -Dit.test=DocumentationTest 2> /dev/null
diff --git a/pom.xml b/pom.xml
index eb8a9ddb..39aa61de 100755
--- a/pom.xml
+++ b/pom.xml
@@ -53,21 +53,6 @@
selenium-java
3.8.1
-
- com.codeborne
- phantomjsdriver
- 1.4.3
-
-
- org.seleniumhq.selenium
- selenium-remote-driver
-
-
- org.seleniumhq.selenium
- selenium-server
-
-
-
org.testng
testng
diff --git a/src/main/java/com/frameworkium/core/common/properties/Property.java b/src/main/java/com/frameworkium/core/common/properties/Property.java
index 901873f1..4d739df6 100755
--- a/src/main/java/com/frameworkium/core/common/properties/Property.java
+++ b/src/main/java/com/frameworkium/core/common/properties/Property.java
@@ -40,7 +40,8 @@ public enum Property {
CHROME_USER_DATA_DIR("chromeUserDataDir"),
CUSTOM_BROWSER_IMPL("customBrowserImpl"),
REUSE_BROWSER("reuseBrowser"),
- THREADS("threads");
+ THREADS("threads"),
+ HEADLESS("headless");
private static Map configMap = null;
private String value;
@@ -84,16 +85,6 @@ private void loadConfigFile() {
}
}
- /**
- * Check if a browser needs to be maximised.
- *
- * @return true if the maximise property is equal, ignoring case, to "true"
- */
- public static boolean wantToMaximise() {
- return MAXIMISE.isSpecified()
- && Boolean.parseBoolean(MAXIMISE.getValue());
- }
-
/**
* Check if a property is specified.
*
@@ -107,6 +98,16 @@ public String getValue() {
return value;
}
+ /**
+ * Check if a browser needs to be maximised.
+ *
+ * @return true if the maximise property is equal, ignoring case, to "true"
+ */
+ public static boolean wantToMaximise() {
+ return MAXIMISE.isSpecified()
+ && Boolean.parseBoolean(MAXIMISE.getValue());
+ }
+
/**
* Check if all properties required for integration with Capture are defined.
*
@@ -126,4 +127,9 @@ public static int getThreadCount() {
? Integer.parseInt(THREADS.getValue())
: 1;
}
+
+ public static boolean isHeadlessRun() {
+ return HEADLESS.isSpecified()
+ && "true".equalsIgnoreCase(HEADLESS.getValue());
+ }
}
diff --git a/src/main/java/com/frameworkium/core/ui/driver/DriverSetup.java b/src/main/java/com/frameworkium/core/ui/driver/DriverSetup.java
index 22150857..e5f3e366 100755
--- a/src/main/java/com/frameworkium/core/ui/driver/DriverSetup.java
+++ b/src/main/java/com/frameworkium/core/ui/driver/DriverSetup.java
@@ -15,7 +15,7 @@ public class DriverSetup {
/** Supported drivers. */
public enum Browser {
- FIREFOX, LEGACYFIREFOX, CHROME, OPERA, IE, PHANTOMJS, SAFARI, ELECTRON, CUSTOM
+ FIREFOX, LEGACYFIREFOX, CHROME, OPERA, IE, SAFARI, ELECTRON, CUSTOM
}
/** Supported remote grids. */
@@ -78,8 +78,6 @@ private Driver createDriverImpl(Browser browser) {
return new OperaImpl();
case IE:
return new InternetExplorerImpl();
- case PHANTOMJS:
- return new PhantomJSImpl();
case SAFARI:
return new SafariImpl();
case ELECTRON:
diff --git a/src/main/java/com/frameworkium/core/ui/driver/drivers/BrowserStackImpl.java b/src/main/java/com/frameworkium/core/ui/driver/drivers/BrowserStackImpl.java
index 5bf5490a..90565793 100644
--- a/src/main/java/com/frameworkium/core/ui/driver/drivers/BrowserStackImpl.java
+++ b/src/main/java/com/frameworkium/core/ui/driver/drivers/BrowserStackImpl.java
@@ -31,7 +31,7 @@ public BrowserStackImpl(Platform platform, Capabilities browserCapabilities) {
}
}
- /** {@inheritDoc} */
+ @Override
public Capabilities getCapabilities() {
MutableCapabilities capabilities = getCapabilitiesBasedOnPlatform();
capabilities.setCapability("browserstack.debug", true);
@@ -89,6 +89,7 @@ private MutableCapabilities getDesktopCapability() {
return mutableCapabilities;
}
+ @Override
public WebDriver getWebDriver(Capabilities capabilities) {
return new RemoteWebDriver(remoteURL, capabilities);
}
diff --git a/src/main/java/com/frameworkium/core/ui/driver/drivers/ChromeImpl.java b/src/main/java/com/frameworkium/core/ui/driver/drivers/ChromeImpl.java
index f94b52dd..02c8619e 100644
--- a/src/main/java/com/frameworkium/core/ui/driver/drivers/ChromeImpl.java
+++ b/src/main/java/com/frameworkium/core/ui/driver/drivers/ChromeImpl.java
@@ -13,7 +13,7 @@
public class ChromeImpl extends AbstractDriver {
@Override
- public Capabilities getCapabilities() {
+ public ChromeOptions getCapabilities() {
ChromeOptions chromeOptions = new ChromeOptions();
// useful defaults
chromeOptions.setCapability(
@@ -35,13 +35,19 @@ public Capabilities getCapabilities() {
chromeOptions.addArguments(
"user-data-dir=" + Property.CHROME_USER_DATA_DIR.getValue());
}
-
+ chromeOptions.setHeadless(Property.isHeadlessRun());
return chromeOptions;
}
@Override
public WebDriver getWebDriver(Capabilities capabilities) {
- return new ChromeDriver(new ChromeOptions().merge(capabilities));
+ final ChromeOptions chromeOptions;
+ if (capabilities instanceof ChromeOptions) {
+ chromeOptions = (ChromeOptions) capabilities;
+ } else {
+ chromeOptions = new ChromeOptions().merge(capabilities);
+ }
+ return new ChromeDriver(chromeOptions);
}
}
diff --git a/src/main/java/com/frameworkium/core/ui/driver/drivers/ElectronImpl.java b/src/main/java/com/frameworkium/core/ui/driver/drivers/ElectronImpl.java
index e3cdfe74..4d4beb9b 100644
--- a/src/main/java/com/frameworkium/core/ui/driver/drivers/ElectronImpl.java
+++ b/src/main/java/com/frameworkium/core/ui/driver/drivers/ElectronImpl.java
@@ -24,7 +24,7 @@ public class ElectronImpl extends AbstractDriver {
}
@Override
- public Capabilities getCapabilities() {
+ public ChromeOptions getCapabilities() {
if (!APP_PATH.isSpecified()) {
throw new IllegalStateException(
"App path must be specified when using Electron!");
diff --git a/src/main/java/com/frameworkium/core/ui/driver/drivers/FirefoxImpl.java b/src/main/java/com/frameworkium/core/ui/driver/drivers/FirefoxImpl.java
index 21f07e5a..67a7cc38 100644
--- a/src/main/java/com/frameworkium/core/ui/driver/drivers/FirefoxImpl.java
+++ b/src/main/java/com/frameworkium/core/ui/driver/drivers/FirefoxImpl.java
@@ -1,5 +1,6 @@
package com.frameworkium.core.ui.driver.drivers;
+import com.frameworkium.core.common.properties.Property;
import com.frameworkium.core.ui.driver.AbstractDriver;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.WebDriver;
@@ -9,12 +10,20 @@
public class FirefoxImpl extends AbstractDriver {
@Override
- public Capabilities getCapabilities() {
- return new FirefoxOptions();
+ public FirefoxOptions getCapabilities() {
+ FirefoxOptions firefoxOptions = new FirefoxOptions();
+ firefoxOptions.setHeadless(Property.isHeadlessRun());
+ return firefoxOptions;
}
@Override
public WebDriver getWebDriver(Capabilities capabilities) {
- return new FirefoxDriver(new FirefoxOptions(capabilities));
+ final FirefoxOptions firefoxOptions;
+ if (capabilities instanceof FirefoxOptions) {
+ firefoxOptions = (FirefoxOptions) capabilities;
+ } else {
+ firefoxOptions = new FirefoxOptions().merge(capabilities);
+ }
+ return new FirefoxDriver(firefoxOptions);
}
}
diff --git a/src/main/java/com/frameworkium/core/ui/driver/drivers/GridImpl.java b/src/main/java/com/frameworkium/core/ui/driver/drivers/GridImpl.java
index 5bc8cadf..8e0ea413 100644
--- a/src/main/java/com/frameworkium/core/ui/driver/drivers/GridImpl.java
+++ b/src/main/java/com/frameworkium/core/ui/driver/drivers/GridImpl.java
@@ -27,7 +27,7 @@ public GridImpl(Capabilities capabilities) {
}
}
- /** {@inheritDoc} */
+ @Override
public Capabilities getCapabilities() {
MutableCapabilities mutableCapabilities = new MutableCapabilities(capabilities);
if (BROWSER_VERSION.isSpecified()) {
@@ -42,6 +42,7 @@ public Capabilities getCapabilities() {
return mutableCapabilities;
}
+ @Override
public WebDriver getWebDriver(Capabilities capabilities) {
return new RemoteWebDriver(remoteURL, capabilities);
}
diff --git a/src/main/java/com/frameworkium/core/ui/driver/drivers/InternetExplorerImpl.java b/src/main/java/com/frameworkium/core/ui/driver/drivers/InternetExplorerImpl.java
index 5a529507..09a937b4 100644
--- a/src/main/java/com/frameworkium/core/ui/driver/drivers/InternetExplorerImpl.java
+++ b/src/main/java/com/frameworkium/core/ui/driver/drivers/InternetExplorerImpl.java
@@ -10,7 +10,7 @@
public class InternetExplorerImpl extends AbstractDriver {
@Override
- public Capabilities getCapabilities() {
+ public InternetExplorerOptions getCapabilities() {
InternetExplorerOptions ieOptions = new InternetExplorerOptions();
ieOptions.setCapability(CapabilityType.ForSeleniumServer.ENSURING_CLEAN_SESSION, true);
ieOptions.setCapability(InternetExplorerDriver.ENABLE_PERSISTENT_HOVERING, true);
diff --git a/src/main/java/com/frameworkium/core/ui/driver/drivers/LegacyFirefoxImpl.java b/src/main/java/com/frameworkium/core/ui/driver/drivers/LegacyFirefoxImpl.java
index 79655fc1..a268d26c 100644
--- a/src/main/java/com/frameworkium/core/ui/driver/drivers/LegacyFirefoxImpl.java
+++ b/src/main/java/com/frameworkium/core/ui/driver/drivers/LegacyFirefoxImpl.java
@@ -1,12 +1,11 @@
package com.frameworkium.core.ui.driver.drivers;
-import org.openqa.selenium.Capabilities;
import org.openqa.selenium.firefox.FirefoxOptions;
public class LegacyFirefoxImpl extends FirefoxImpl {
@Override
- public Capabilities getCapabilities() {
+ public FirefoxOptions getCapabilities() {
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setLegacy(true);
return firefoxOptions;
diff --git a/src/main/java/com/frameworkium/core/ui/driver/drivers/PhantomJSImpl.java b/src/main/java/com/frameworkium/core/ui/driver/drivers/PhantomJSImpl.java
deleted file mode 100644
index 7c59ea24..00000000
--- a/src/main/java/com/frameworkium/core/ui/driver/drivers/PhantomJSImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.frameworkium.core.ui.driver.drivers;
-
-import com.frameworkium.core.ui.driver.AbstractDriver;
-import org.openqa.selenium.Capabilities;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.phantomjs.PhantomJSDriver;
-import org.openqa.selenium.phantomjs.PhantomJSDriverService;
-import org.openqa.selenium.remote.DesiredCapabilities;
-
-/**
- * @deprecated will be removed once headless firefox and chrome are available
- */
-@Deprecated
-public class PhantomJSImpl extends AbstractDriver {
-
- @Override
- public Capabilities getCapabilities() {
- DesiredCapabilities capabilities = DesiredCapabilities.phantomjs();
- capabilities.setCapability("takesScreenshot", true);
- capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS,
- new String[]{"--webdriver-loglevel=NONE"});
- return capabilities;
- }
-
- @Override
- public WebDriver getWebDriver(Capabilities capabilities) {
- return new PhantomJSDriver(capabilities);
- }
-
-}
diff --git a/src/main/java/com/frameworkium/core/ui/driver/drivers/SafariImpl.java b/src/main/java/com/frameworkium/core/ui/driver/drivers/SafariImpl.java
index 80330a70..d42a2ca5 100644
--- a/src/main/java/com/frameworkium/core/ui/driver/drivers/SafariImpl.java
+++ b/src/main/java/com/frameworkium/core/ui/driver/drivers/SafariImpl.java
@@ -10,7 +10,7 @@
public class SafariImpl extends AbstractDriver {
@Override
- public Capabilities getCapabilities() {
+ public SafariOptions getCapabilities() {
if (Driver.isMobile()) {
return new SafariOptions();
} else {
diff --git a/src/main/java/com/frameworkium/core/ui/driver/drivers/SauceImpl.java b/src/main/java/com/frameworkium/core/ui/driver/drivers/SauceImpl.java
index 64079c90..49e3cf28 100644
--- a/src/main/java/com/frameworkium/core/ui/driver/drivers/SauceImpl.java
+++ b/src/main/java/com/frameworkium/core/ui/driver/drivers/SauceImpl.java
@@ -33,7 +33,7 @@ public SauceImpl(Platform platform, Capabilities capabilities) {
}
}
- /** {@inheritDoc} */
+ @Override
public Capabilities getCapabilities() {
MutableCapabilities mutableCapabilities;
if (Driver.isNative()) {
@@ -47,6 +47,7 @@ public Capabilities getCapabilities() {
return mutableCapabilities;
}
+ @Override
public WebDriver getWebDriver(Capabilities capabilities) {
return new RemoteWebDriver(remoteURL, capabilities);
}
diff --git a/src/main/resources/Empty.yaml b/src/main/resources/Empty.yaml
new file mode 100644
index 00000000..ee274569
--- /dev/null
+++ b/src/main/resources/Empty.yaml
@@ -0,0 +1,33 @@
+applicationName:
+appPath:
+browser:
+browserStack:
+browserVersion:
+build:
+captureURL:
+chromeUserDataDir:
+customBrowserImpl:
+device:
+gridURL:
+headless:
+jiraPassword:
+jiraResultFieldName:
+jiraResultTransition:
+jiraURL:
+jiraUsername:
+jqlQuery:
+maximise:
+maxRetryCount:
+platform:
+platformVersion:
+proxy:
+resolution:
+resultVersion:
+reuseBrowser:
+sauce:
+spiraURL:
+sutName:
+sutVersion:
+threads:
+videoCaptureUrl:
+zapiCycleRegEx:
\ No newline at end of file
diff --git a/src/main/resources/Firefox.yaml b/src/main/resources/Firefox.yaml
index ceb1835c..94949f63 100644
--- a/src/main/resources/Firefox.yaml
+++ b/src/main/resources/Firefox.yaml
@@ -1,27 +1,30 @@
+applicationName:
+appPath:
browser: Firefox
-firefoxProfile:
+browserStack:
browserVersion:
-platform:
-platformVersion:
-device:
+build:
captureURL:
+device:
+firefoxProfile:
gridURL:
-build:
-appPath:
-sauce:
-browserStack:
-jiraURL:
-spiraURL:
-resultVersion:
-zapiCycleRegEx:
-jqlQuery:
-sutName:
-sutVersion:
+headless:
+jiraPassword:
jiraResultFieldName:
jiraResultTransition:
+jiraURL:
jiraUsername:
-jiraPassword:
+jqlQuery:
maximise:
-resolution:
-proxy:
maxRetryCount:
+platform:
+platformVersion:
+proxy:
+resolution:
+resultVersion:
+reuseBrowser:
+sauce:
+spiraURL:
+sutName:
+sutVersion:
+zapiCycleRegEx:
\ No newline at end of file
diff --git a/src/main/resources/FirefoxGrid.yaml b/src/main/resources/FirefoxGrid.yaml
index 2ba2c6a4..aaf4d9c7 100644
--- a/src/main/resources/FirefoxGrid.yaml
+++ b/src/main/resources/FirefoxGrid.yaml
@@ -1,26 +1,30 @@
+applicationName:
+appPath:
browser: Firefox
+browserStack:
browserVersion:
-platform:
-platformVersion:
-device:
+build:
captureURL:
+device:
+firefoxProfile:
gridURL: http://localhost:4444/wd/hub
-build:
-appPath:
-sauce:
-browserStack:
-jiraURL:
-spiraURL:
-resultVersion:
-zapiCycleRegEx:
-jqlQuery:
-sutName:
-sutVersion:
+headless:
+jiraPassword:
jiraResultFieldName:
jiraResultTransition:
+jiraURL:
jiraUsername:
-jiraPassword:
+jqlQuery:
maximise:
-resolution:
-proxy:
maxRetryCount:
+platform:
+platformVersion:
+proxy:
+resolution:
+resultVersion:
+reuseBrowser:
+sauce:
+spiraURL:
+sutName:
+sutVersion:
+zapiCycleRegEx:
\ No newline at end of file
diff --git a/src/main/resources/LegacyFirefoxGrid.yaml b/src/main/resources/LegacyFirefoxGrid.yaml
index 8453629b..b090d43f 100644
--- a/src/main/resources/LegacyFirefoxGrid.yaml
+++ b/src/main/resources/LegacyFirefoxGrid.yaml
@@ -24,3 +24,4 @@ maximise:
resolution:
proxy:
maxRetryCount:
+headless: false
\ No newline at end of file