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