Skip to content

Commit b697ae9

Browse files
Merge pull request #3 from aquality-automation/basic/reference-aquality-selenium
Basic/reference aquality selenium
2 parents e662d48 + 200ee4d commit b697ae9

File tree

66 files changed

+1997
-680
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+1997
-680
lines changed

pom.xml

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,14 @@
2121
</build>
2222
<dependencies>
2323
<dependency>
24-
<groupId>com.fasterxml.jackson.core</groupId>
25-
<artifactId>jackson-databind</artifactId>
26-
<version>2.9.9</version>
27-
</dependency>
28-
<dependency>
29-
<groupId>log4j</groupId>
30-
<artifactId>log4j</artifactId>
31-
<version>1.2.17</version>
24+
<groupId>com.github.aquality-automation</groupId>
25+
<artifactId>aquality-selenium</artifactId>
26+
<version>LATEST</version>
3227
</dependency>
3328
<dependency>
3429
<groupId>io.appium</groupId>
3530
<artifactId>java-client</artifactId>
36-
<version>5.0.0-BETA6</version>
31+
<version>7.2.0</version>
3732
</dependency>
3833
<dependency>
3934
<groupId>org.testng</groupId>

src/main/java/aquality/appium/application/Application.java

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22

33
import aquality.appium.configuration.IConfiguration;
44
import aquality.appium.configuration.ITimeoutConfiguration;
5-
import aquality.appium.logger.Logger;
5+
import aquality.selenium.localization.LocalizationManager;
6+
import aquality.selenium.logger.Logger;
67
import io.appium.java_client.AppiumDriver;
78
import org.openqa.selenium.remote.service.DriverService;
89

10+
import java.util.concurrent.TimeUnit;
11+
912
public class Application {
1013

1114
private final Logger logger = Logger.getInstance();
@@ -21,12 +24,7 @@ public Application(AppiumDriver appiumDriver, IConfiguration configuration) {
2124
this.configuration = configuration;
2225
this.timeouts = configuration.getTimeoutConfiguration();
2326
this.timeoutImpl = timeouts.getImplicit();
24-
/*
25-
todo: determine if all of these timeouts are necessary to be set this way
2627
getDriver().manage().timeouts().implicitlyWait(timeoutImpl, TimeUnit.SECONDS);
27-
setPageLoadTimeout(timeouts.getPageLoad());
28-
setScriptTimeout(timeouts.getScript());
29-
*/
3028
}
3129

3230
public Application(DriverService driverService, AppiumDriver appiumDriver, IConfiguration configuration) {
@@ -35,6 +33,7 @@ public Application(DriverService driverService, AppiumDriver appiumDriver, IConf
3533
this.configuration = configuration;
3634
this.timeouts = configuration.getTimeoutConfiguration();
3735
this.timeoutImpl = timeouts.getImplicit();
36+
getDriver().manage().timeouts().implicitlyWait(timeoutImpl, TimeUnit.SECONDS);
3837
}
3938

4039
/**
@@ -61,8 +60,21 @@ public final PlatformName getPlatformName() {
6160
return configuration.getApplicationProfile().getPlatformName();
6261
}
6362

63+
/**
64+
* Sets web driver implicit wait timeout
65+
* Be careful with using this method. Implicit timeout can affect to duration of driver operations
66+
* @param timeout seconds to wait
67+
*/
68+
public void setImplicitWaitTimeout(Long timeout) {
69+
logger.debug(String.format(getLocManager().getValue("loc.browser.implicit.timeout"), timeout));
70+
if(!timeout.equals(getImplicitWaitTimeout())){
71+
getDriver().manage().timeouts().implicitlyWait(timeout, TimeUnit.SECONDS);
72+
timeoutImpl = timeout;
73+
}
74+
}
75+
6476
public void quit() {
65-
// todo: logger.info(getLocManager().getValue("loc.browser.driver.quit"));
77+
logger.info(LocalizationManager.getInstance().getValue("loc.browser.driver.quit"));
6678
if (getDriver() != null) {
6779
getDriver().quit();
6880
}
@@ -71,4 +83,12 @@ public void quit() {
7183
getDriverService().stop();
7284
}
7385
}
86+
87+
private Long getImplicitWaitTimeout() {
88+
return timeoutImpl;
89+
}
90+
91+
private LocalizationManager getLocManager(){
92+
return LocalizationManager.getInstance();
93+
}
7494
}

src/main/java/aquality/appium/application/ApplicationFactory.java

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
package aquality.appium.application;
22

33
import aquality.appium.configuration.IConfiguration;
4-
import aquality.appium.localization.LocalizationManager;
5-
import aquality.appium.logger.Logger;
4+
import aquality.selenium.localization.LocalizationManager;
5+
import aquality.selenium.logger.Logger;
66
import io.appium.java_client.AppiumDriver;
77
import io.appium.java_client.android.AndroidDriver;
8+
import io.appium.java_client.android.AndroidElement;
89
import io.appium.java_client.ios.IOSDriver;
10+
import io.appium.java_client.ios.IOSElement;
911
import io.appium.java_client.windows.WindowsDriver;
12+
import io.appium.java_client.windows.WindowsElement;
1013
import org.openqa.selenium.Capabilities;
14+
import org.openqa.selenium.remote.http.HttpClient;
15+
import org.openqa.selenium.remote.http.HttpClient.Builder;
16+
import org.openqa.selenium.remote.http.HttpClient.Factory;
1117

1218
import java.net.URL;
19+
import java.time.Duration;
1320

1421
abstract class ApplicationFactory implements IApplicationFactory {
1522

@@ -24,23 +31,49 @@ IllegalArgumentException getLoggedWrongPlatformNameException() {
2431
AppiumDriver getDriver(URL serviceUrl, IConfiguration configuration) {
2532
PlatformName platformName = configuration.getApplicationProfile().getPlatformName();
2633
Capabilities capabilities = configuration.getApplicationProfile().getDriverSettings().getCapabilities();
34+
Factory httpClientFactory = new ClientFactory(configuration);
2735
AppiumDriver driver;
2836
switch (platformName) {
2937
case ANDROID:
30-
driver = new AndroidDriver<>(serviceUrl, capabilities);
38+
driver = new AndroidDriver<AndroidElement>(serviceUrl, httpClientFactory, capabilities);
3139
break;
3240
case IOS:
33-
driver = new IOSDriver<>(serviceUrl, capabilities);
41+
driver = new IOSDriver<IOSElement>(serviceUrl, httpClientFactory, capabilities);
3442
break;
3543
case WINDOWS:
36-
driver = new WindowsDriver<>(serviceUrl, capabilities);
44+
driver = new WindowsDriver<WindowsElement>(serviceUrl, httpClientFactory, capabilities);
3745
break;
3846
default:
3947
throw getLoggedWrongPlatformNameException();
4048
}
4149
return driver;
4250
}
4351

52+
class ClientFactory implements Factory{
53+
54+
private final Factory defaultClientFactory = Factory.createDefault();
55+
private final Duration timeoutCommand;
56+
57+
ClientFactory(IConfiguration configuration){
58+
timeoutCommand = Duration.ofSeconds(configuration.getTimeoutConfiguration().getCommand());
59+
}
60+
61+
@Override
62+
public Builder builder() {
63+
return defaultClientFactory.builder().readTimeout(timeoutCommand);
64+
}
65+
66+
@Override
67+
public HttpClient createClient(URL url) {
68+
return this.builder().createClient(url);
69+
}
70+
71+
@Override
72+
public void cleanupIdleClients() {
73+
defaultClientFactory.cleanupIdleClients();
74+
}
75+
}
76+
4477
void logApplicationIsReady(PlatformName platformName) {
4578
Logger.getInstance().info(getLocManager().getValue("loc.browser.ready"), platformName.toString());
4679
}

src/main/java/aquality/appium/application/RemoteApplicationFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import aquality.appium.configuration.IApplicationProfile;
44
import aquality.appium.configuration.IConfiguration;
5-
import aquality.appium.localization.LocalizationManager;
6-
import aquality.appium.logger.Logger;
5+
import aquality.selenium.localization.LocalizationManager;
6+
import aquality.selenium.logger.Logger;
77
import io.appium.java_client.AppiumDriver;
88
import org.openqa.selenium.remote.LocalFileDetector;
99

src/main/java/aquality/appium/configuration/ApplicationProfile.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import aquality.appium.configuration.driversettings.IDriverSettings;
66
import aquality.appium.configuration.driversettings.IOSSettings;
77
import aquality.appium.configuration.driversettings.WindowsSettings;
8-
import aquality.appium.utils.JsonFile;
8+
import aquality.selenium.utils.JsonFile;
99
import org.openqa.selenium.InvalidArgumentException;
1010

1111
import java.net.MalformedURLException;

src/main/java/aquality/appium/configuration/Configuration.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package aquality.appium.configuration;
22

3-
import aquality.appium.utils.JsonFile;
4-
5-
import java.io.IOException;
6-
import java.io.UncheckedIOException;
3+
import aquality.selenium.configuration.ILoggerConfiguration;
4+
import aquality.selenium.configuration.IRetryConfiguration;
5+
import aquality.selenium.configuration.LoggerConfiguration;
6+
import aquality.selenium.configuration.RetryConfiguration;
7+
import aquality.selenium.utils.JsonFile;
78

89
public class Configuration implements IConfiguration{
910

@@ -16,8 +17,8 @@ public class Configuration implements IConfiguration{
1617
private Configuration() {
1718
JsonFile settings = getSettings();
1819
timeoutConfiguration = new TimeoutConfiguration(settings);
19-
retryConfiguration = new RetryConfiguration(settings);
2020
applicationProfile = new ApplicationProfile(settings);
21+
retryConfiguration = new RetryConfiguration(settings);
2122
loggerConfiguration = new LoggerConfiguration(settings);
2223
}
2324

@@ -47,10 +48,6 @@ public ILoggerConfiguration getLoggerConfiguration() {
4748

4849
private JsonFile getSettings() {
4950
String settingsProfile = System.getProperty("profile") == null ? "settings.json" : "settings." + System.getProperty("profile") + ".json";
50-
try{
51-
return new JsonFile(settingsProfile);
52-
}catch (IOException e){
53-
throw new UncheckedIOException(String.format("Browser profile assigned in file %1$s was not found in the root of resources directory", settingsProfile), e);
54-
}
51+
return new JsonFile(settingsProfile);
5552
}
5653
}

src/main/java/aquality/appium/configuration/IConfiguration.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package aquality.appium.configuration;
22

3+
import aquality.selenium.configuration.ILoggerConfiguration;
4+
import aquality.selenium.configuration.IRetryConfiguration;
5+
36
public interface IConfiguration {
47

58
IApplicationProfile getApplicationProfile();

src/main/java/aquality/appium/configuration/ILoggerConfiguration.java

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/main/java/aquality/appium/configuration/IRetryConfiguration.java

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/main/java/aquality/appium/configuration/ITimeoutConfiguration.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ public interface ITimeoutConfiguration {
66

77
long getCondition();
88

9-
long getScript();
10-
11-
long getPageLoad();
12-
139
long getPollingInterval();
1410

11+
long getCommand();
1512
}

0 commit comments

Comments
 (0)