Skip to content

Commit 6617e08

Browse files
authored
ActionRetrier for browser creation (#96)
* #88 added action retrier to browser creation * #88 update exception handle * #88 version update * #88 TDriver to T * update message
1 parent 616ffb1 commit 6617e08

File tree

4 files changed

+31
-14
lines changed

4 files changed

+31
-14
lines changed

pom.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66

77
<groupId>com.github.aquality-automation</groupId>
88
<artifactId>aquality-selenium</artifactId>
9-
<version>2.3.0</version>
10-
9+
<version>2.3.1</version>
1110
<packaging>jar</packaging>
1211
<name>Aquality Selenium</name>
1312
<description>Library around Selenium WebDriver</description>

src/main/java/aquality/selenium/browser/BrowserFactory.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
import aquality.selenium.core.localization.ILocalizationManager;
44
import aquality.selenium.core.logging.Logger;
5+
import aquality.selenium.core.utilities.IActionRetrier;
6+
import org.openqa.selenium.Capabilities;
7+
import org.openqa.selenium.remote.CommandExecutor;
8+
import org.openqa.selenium.remote.RemoteWebDriver;
9+
10+
import java.util.Collections;
511

612
interface BrowserFactory extends IBrowserFactory {
713

@@ -15,4 +21,22 @@ default IllegalArgumentException getLoggedWrongBrowserNameException() {
1521
default void logBrowserIsReady(BrowserName browserName) {
1622
AqualityServices.getLocalizedLogger().info("loc.browser.ready", browserName.toString());
1723
}
24+
25+
default <T extends RemoteWebDriver> T getDriver(Class<T> driverClass, Capabilities capabilities) {
26+
return getDriver(driverClass, null, capabilities);
27+
}
28+
29+
default <T extends RemoteWebDriver> T getDriver(Class<T> driverClass, CommandExecutor commandExecutor, Capabilities capabilities) {
30+
return AqualityServices.get(IActionRetrier.class).doWithRetry(() -> {
31+
try {
32+
if (commandExecutor != null) {
33+
return driverClass.getDeclaredConstructor(CommandExecutor.class, Capabilities.class).newInstance(commandExecutor, capabilities);
34+
}
35+
36+
return driverClass.getDeclaredConstructor(Capabilities.class).newInstance(capabilities);
37+
} catch (ReflectiveOperationException e) {
38+
throw new UnsupportedOperationException(String.format("Cannot instantiate driver with type '%1$s'.", driverClass), e);
39+
}
40+
}, Collections.emptyList());
41+
}
1842
}

src/main/java/aquality/selenium/browser/LocalBrowserFactory.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,15 @@
11
package aquality.selenium.browser;
22

33
import aquality.selenium.configuration.IBrowserProfile;
4-
import aquality.selenium.configuration.driversettings.EdgeSettings;
54
import aquality.selenium.configuration.driversettings.IDriverSettings;
65
import io.github.bonigarcia.wdm.Architecture;
76
import io.github.bonigarcia.wdm.WebDriverManager;
87
import org.openqa.selenium.chrome.ChromeDriver;
9-
import org.openqa.selenium.chrome.ChromeOptions;
108
import org.openqa.selenium.edge.EdgeDriver;
119
import org.openqa.selenium.firefox.FirefoxDriver;
12-
import org.openqa.selenium.firefox.FirefoxOptions;
1310
import org.openqa.selenium.ie.InternetExplorerDriver;
14-
import org.openqa.selenium.ie.InternetExplorerOptions;
1511
import org.openqa.selenium.remote.RemoteWebDriver;
1612
import org.openqa.selenium.safari.SafariDriver;
17-
import org.openqa.selenium.safari.SafariOptions;
1813

1914
public class LocalBrowserFactory implements BrowserFactory {
2015

@@ -34,22 +29,22 @@ public Browser getBrowser() {
3429
switch (browserName) {
3530
case CHROME:
3631
WebDriverManager.chromedriver().version(webDriverVersion).setup();
37-
driver = new ChromeDriver((ChromeOptions) driverSettings.getCapabilities());
32+
driver = getDriver(ChromeDriver.class, driverSettings.getCapabilities());
3833
break;
3934
case FIREFOX:
4035
WebDriverManager.firefoxdriver().version(webDriverVersion).setup();
41-
driver = new FirefoxDriver((FirefoxOptions) driverSettings.getCapabilities());
36+
driver = getDriver(FirefoxDriver.class, driverSettings.getCapabilities());
4237
break;
4338
case IEXPLORER:
4439
WebDriverManager.iedriver().architecture(systemArchitecture).version(webDriverVersion).setup();
45-
driver = new InternetExplorerDriver((InternetExplorerOptions) driverSettings.getCapabilities());
40+
driver = getDriver(InternetExplorerDriver.class, driverSettings.getCapabilities());
4641
break;
4742
case EDGE:
4843
WebDriverManager.edgedriver().version(webDriverVersion).setup();
49-
driver = new EdgeDriver(((EdgeSettings) driverSettings).getCapabilities());
44+
driver = getDriver(EdgeDriver.class, driverSettings.getCapabilities());
5045
break;
5146
case SAFARI:
52-
driver = new SafariDriver((SafariOptions) driverSettings.getCapabilities());
47+
driver = getDriver(SafariDriver.class, driverSettings.getCapabilities());
5348
break;
5449
default:
5550
throw getLoggedWrongBrowserNameException();

src/main/java/aquality/selenium/browser/RemoteBrowserFactory.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ private RemoteWebDriver createRemoteDriver(Capabilities capabilities) {
4545
browserProfile.getRemoteConnectionUrl(),
4646
clientFactory);
4747

48-
RemoteWebDriver driver = new RemoteWebDriver(commandExecutor, capabilities);
49-
48+
RemoteWebDriver driver = getDriver(RemoteWebDriver.class, commandExecutor, capabilities);
5049
driver.setFileDetector(new LocalFileDetector());
5150
return driver;
5251
}

0 commit comments

Comments
 (0)