Skip to content
3 changes: 1 addition & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@

<groupId>com.github.aquality-automation</groupId>
<artifactId>aquality-selenium</artifactId>
<version>2.3.0</version>

<version>2.3.1</version>
<packaging>jar</packaging>
<name>Aquality Selenium</name>
<description>Library around Selenium WebDriver</description>
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/aquality/selenium/browser/BrowserFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

import aquality.selenium.core.localization.ILocalizationManager;
import aquality.selenium.core.logging.Logger;
import aquality.selenium.core.utilities.IActionRetrier;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.remote.CommandExecutor;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.util.Collections;

interface BrowserFactory extends IBrowserFactory {

Expand All @@ -15,4 +21,22 @@ default IllegalArgumentException getLoggedWrongBrowserNameException() {
default void logBrowserIsReady(BrowserName browserName) {
AqualityServices.getLocalizedLogger().info("loc.browser.ready", browserName.toString());
}

default <T extends RemoteWebDriver> T getDriver(Class<T> driverClass, Capabilities capabilities) {
return getDriver(driverClass, null, capabilities);
}

default <T extends RemoteWebDriver> T getDriver(Class<T> driverClass, CommandExecutor commandExecutor, Capabilities capabilities) {
return AqualityServices.get(IActionRetrier.class).doWithRetry(() -> {
try {
if (commandExecutor != null) {
return driverClass.getDeclaredConstructor(CommandExecutor.class, Capabilities.class).newInstance(commandExecutor, capabilities);
}

return driverClass.getDeclaredConstructor(Capabilities.class).newInstance(capabilities);
} catch (ReflectiveOperationException e) {
throw new UnsupportedOperationException(String.format("Cannot instantiate driver with type '%1$s'.", driverClass), e);
}
}, Collections.emptyList());
}
}
15 changes: 5 additions & 10 deletions src/main/java/aquality/selenium/browser/LocalBrowserFactory.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
package aquality.selenium.browser;

import aquality.selenium.configuration.IBrowserProfile;
import aquality.selenium.configuration.driversettings.EdgeSettings;
import aquality.selenium.configuration.driversettings.IDriverSettings;
import io.github.bonigarcia.wdm.Architecture;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.InternetExplorerOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.safari.SafariDriver;
import org.openqa.selenium.safari.SafariOptions;

public class LocalBrowserFactory implements BrowserFactory {

Expand All @@ -34,22 +29,22 @@ public Browser getBrowser() {
switch (browserName) {
case CHROME:
WebDriverManager.chromedriver().version(webDriverVersion).setup();
driver = new ChromeDriver((ChromeOptions) driverSettings.getCapabilities());
driver = getDriver(ChromeDriver.class, driverSettings.getCapabilities());
break;
case FIREFOX:
WebDriverManager.firefoxdriver().version(webDriverVersion).setup();
driver = new FirefoxDriver((FirefoxOptions) driverSettings.getCapabilities());
driver = getDriver(FirefoxDriver.class, driverSettings.getCapabilities());
break;
case IEXPLORER:
WebDriverManager.iedriver().architecture(systemArchitecture).version(webDriverVersion).setup();
driver = new InternetExplorerDriver((InternetExplorerOptions) driverSettings.getCapabilities());
driver = getDriver(InternetExplorerDriver.class, driverSettings.getCapabilities());
break;
case EDGE:
WebDriverManager.edgedriver().version(webDriverVersion).setup();
driver = new EdgeDriver(((EdgeSettings) driverSettings).getCapabilities());
driver = getDriver(EdgeDriver.class, driverSettings.getCapabilities());
break;
case SAFARI:
driver = new SafariDriver((SafariOptions) driverSettings.getCapabilities());
driver = getDriver(SafariDriver.class, driverSettings.getCapabilities());
break;
default:
throw getLoggedWrongBrowserNameException();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,7 @@ private RemoteWebDriver createRemoteDriver(Capabilities capabilities) {
browserProfile.getRemoteConnectionUrl(),
clientFactory);

RemoteWebDriver driver = new RemoteWebDriver(commandExecutor, capabilities);

RemoteWebDriver driver = getDriver(RemoteWebDriver.class, commandExecutor, capabilities);
driver.setFileDetector(new LocalFileDetector());
return driver;
}
Expand Down