Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 37 additions & 3 deletions src/main/java/aquality/selenium/browser/RemoteBrowserFactory.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
package aquality.selenium.browser;

import aquality.selenium.configuration.driversettings.IDriverSettings;
import aquality.selenium.configuration.IConfiguration;
import aquality.selenium.configuration.driversettings.IDriverSettings;
import aquality.selenium.localization.LocalizationManager;
import aquality.selenium.logger.Logger;
import com.google.common.collect.ImmutableMap;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.remote.CommandExecutor;
import org.openqa.selenium.remote.HttpCommandExecutor;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.http.HttpClient;

import java.net.URL;
import java.time.Duration;


public class RemoteBrowserFactory extends BrowserFactory {
Expand All @@ -33,9 +40,36 @@ private BrowserName getBrowserName() {
private RemoteWebDriver createRemoteDriver(Capabilities capabilities){
Logger logger = Logger.getInstance();
logger.info(LocalizationManager.getInstance().getValue("loc.browser.grid"));
RemoteWebDriver driver = new RemoteWebDriver(
configuration.getBrowserProfile().getRemoteConnectionUrl(), capabilities);

ClientFactory clientFactory = new ClientFactory();
CommandExecutor commandExecutor = new HttpCommandExecutor(
ImmutableMap.of(),
configuration.getBrowserProfile().getRemoteConnectionUrl(),
clientFactory);

RemoteWebDriver driver = new RemoteWebDriver(commandExecutor, capabilities);

driver.setFileDetector(new LocalFileDetector());
return driver;
}

class ClientFactory implements org.openqa.selenium.remote.http.HttpClient.Factory{
private final HttpClient.Factory defaultClientFactory = HttpClient.Factory.createDefault();
private final Duration timeoutCommand = Duration.ofSeconds(configuration.getTimeoutConfiguration().getCommand());

@Override
public HttpClient.Builder builder() {
return defaultClientFactory.builder().readTimeout(timeoutCommand);
}

@Override
public HttpClient createClient(URL url) {
return this.builder().createClient(url);
}

@Override
public void cleanupIdleClients() {
defaultClientFactory.cleanupIdleClients();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ public interface ITimeoutConfiguration {

long getPollingInterval();

long getCommand();
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public class TimeoutConfiguration implements ITimeoutConfiguration{
private final long pageLoad;
private final long pollInterval;
private final long implicit;
private final long command;

public TimeoutConfiguration(JsonFile settingsFile) {
this.settingsFile = settingsFile;
Expand All @@ -18,6 +19,7 @@ public TimeoutConfiguration(JsonFile settingsFile) {
pageLoad = getTimeout(TIMEOUT.PAGE_LOAD);
pollInterval = getTimeout(TIMEOUT.POLL_INTERVAL);
implicit = getTimeout(TIMEOUT.IMPLICIT);
command = getTimeout(TIMEOUT.COMMAND);
}

private long getTimeout(TIMEOUT timeout){
Expand Down Expand Up @@ -45,12 +47,17 @@ public long getPollingInterval(){
return pollInterval;
}

public long getCommand(){
return command;
}

private enum TIMEOUT {
IMPLICIT("timeoutImplicit"),
CONDITION("timeoutCondition"),
SCRIPT("timeoutScript"),
PAGE_LOAD("timeoutPageLoad"),
POLL_INTERVAL("timeoutPollingInterval");
POLL_INTERVAL("timeoutPollingInterval"),
COMMAND("timeoutCommand");

private String key;
TIMEOUT(String key){
Expand Down
3 changes: 2 additions & 1 deletion src/main/resources/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@
"timeoutCondition" : 30,
"timeoutScript" : 10,
"timeoutPageLoad" : 15,
"timeoutPollingInterval": 300
"timeoutPollingInterval": 300,
"timeoutCommand":120
},
"retry": {
"number": 2,
Expand Down
5 changes: 5 additions & 0 deletions src/test/java/tests/usecases/BrowserFactoryTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,11 @@ public long getPageLoad() {
public long getPollingInterval() {
return 300;
}

@Override
public long getCommand() {
return 120;
}
}));
}
}
Expand Down
3 changes: 2 additions & 1 deletion src/test/resources/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@
"timeoutCondition" : 15,
"timeoutScript" : 10,
"timeoutPageLoad" : 30,
"timeoutPollingInterval": 300
"timeoutPollingInterval": 300,
"timeoutCommand": 120
},
"retry": {
"number": 2,
Expand Down
3 changes: 2 additions & 1 deletion src/test/resources/settings.local.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@
"timeoutCondition" : 30,
"timeoutScript" : 10,
"timeoutPageLoad" : 15,
"timeoutPollingInterval": 300
"timeoutPollingInterval": 300,
"timeoutCommand": 120
},
"retry": {
"number": 2,
Expand Down