Skip to content

Commit 200ee4d

Browse files
committed
reference aquality.selenium.
update appium version. removed copypasted classes, referenced from aquality.selenium. implemented elements and factory
1 parent 4988a76 commit 200ee4d

Some content is hidden

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

45 files changed

+2023
-103
lines changed

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

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package aquality.appium.application;
22

33
import aquality.appium.configuration.IConfiguration;
4-
import aquality.selenium.configuration.ITimeoutConfiguration;
4+
import aquality.appium.configuration.ITimeoutConfiguration;
55
import aquality.selenium.localization.LocalizationManager;
66
import aquality.selenium.logger.Logger;
77
import io.appium.java_client.AppiumDriver;
88
import org.openqa.selenium.remote.service.DriverService;
99

10+
import java.util.concurrent.TimeUnit;
11+
1012
public class Application {
1113

1214
private final Logger logger = Logger.getInstance();
@@ -22,12 +24,7 @@ public Application(AppiumDriver appiumDriver, IConfiguration configuration) {
2224
this.configuration = configuration;
2325
this.timeouts = configuration.getTimeoutConfiguration();
2426
this.timeoutImpl = timeouts.getImplicit();
25-
/*
26-
todo: determine if all of these timeouts are necessary to be set this way
2727
getDriver().manage().timeouts().implicitlyWait(timeoutImpl, TimeUnit.SECONDS);
28-
setPageLoadTimeout(timeouts.getPageLoad());
29-
setScriptTimeout(timeouts.getScript());
30-
*/
3128
}
3229

3330
public Application(DriverService driverService, AppiumDriver appiumDriver, IConfiguration configuration) {
@@ -36,6 +33,7 @@ public Application(DriverService driverService, AppiumDriver appiumDriver, IConf
3633
this.configuration = configuration;
3734
this.timeouts = configuration.getTimeoutConfiguration();
3835
this.timeoutImpl = timeouts.getImplicit();
36+
getDriver().manage().timeouts().implicitlyWait(timeoutImpl, TimeUnit.SECONDS);
3937
}
4038

4139
/**
@@ -62,6 +60,19 @@ public final PlatformName getPlatformName() {
6260
return configuration.getApplicationProfile().getPlatformName();
6361
}
6462

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+
6576
public void quit() {
6677
logger.info(LocalizationManager.getInstance().getValue("loc.browser.driver.quit"));
6778
if (getDriver() != null) {
@@ -72,4 +83,12 @@ public void quit() {
7283
getDriverService().stop();
7384
}
7485
}
86+
87+
private Long getImplicitWaitTimeout() {
88+
return timeoutImpl;
89+
}
90+
91+
private LocalizationManager getLocManager(){
92+
return LocalizationManager.getInstance();
93+
}
7594
}

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

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,18 @@
55
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/configuration/Configuration.java

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

3-
import aquality.selenium.configuration.*;
3+
import aquality.selenium.configuration.ILoggerConfiguration;
4+
import aquality.selenium.configuration.IRetryConfiguration;
5+
import aquality.selenium.configuration.LoggerConfiguration;
6+
import aquality.selenium.configuration.RetryConfiguration;
47
import aquality.selenium.utils.JsonFile;
58

69
public class Configuration implements IConfiguration{
@@ -14,8 +17,8 @@ public class Configuration implements IConfiguration{
1417
private Configuration() {
1518
JsonFile settings = getSettings();
1619
timeoutConfiguration = new TimeoutConfiguration(settings);
17-
retryConfiguration = new RetryConfiguration(settings);
1820
applicationProfile = new ApplicationProfile(settings);
21+
retryConfiguration = new RetryConfiguration(settings);
1922
loggerConfiguration = new LoggerConfiguration(settings);
2023
}
2124

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import aquality.selenium.configuration.ILoggerConfiguration;
44
import aquality.selenium.configuration.IRetryConfiguration;
5-
import aquality.selenium.configuration.ITimeoutConfiguration;
65

76
public interface IConfiguration {
87

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package aquality.appium.configuration;
2+
3+
public interface ITimeoutConfiguration {
4+
5+
long getImplicit();
6+
7+
long getCondition();
8+
9+
long getPollingInterval();
10+
11+
long getCommand();
12+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package aquality.appium.configuration;
2+
3+
import aquality.selenium.utils.JsonFile;
4+
5+
public class TimeoutConfiguration implements ITimeoutConfiguration {
6+
private final JsonFile settingsFile;
7+
8+
private final long condition;
9+
private final long pollInterval;
10+
private final long implicit;
11+
private final long command;
12+
13+
public TimeoutConfiguration(JsonFile settingsFile) {
14+
this.settingsFile = settingsFile;
15+
condition = getTimeout(TIMEOUT.CONDITION);
16+
pollInterval = getTimeout(TIMEOUT.POLL_INTERVAL);
17+
implicit = getTimeout(TIMEOUT.IMPLICIT);
18+
command = getTimeout(TIMEOUT.COMMAND);
19+
}
20+
21+
private long getTimeout(TIMEOUT timeout){
22+
return Long.valueOf(settingsFile.getValue("/timeouts/" + timeout.getKey()).toString());
23+
}
24+
25+
26+
public long getImplicit(){
27+
return implicit;
28+
}
29+
30+
public long getCondition(){
31+
return condition;
32+
}
33+
34+
public long getPollingInterval(){
35+
return pollInterval;
36+
}
37+
38+
public long getCommand(){
39+
return command;
40+
}
41+
42+
private enum TIMEOUT {
43+
IMPLICIT("timeoutImplicit"),
44+
CONDITION("timeoutCondition"),
45+
POLL_INTERVAL("timeoutPollingInterval"),
46+
COMMAND("timeoutCommand");
47+
48+
private String key;
49+
TIMEOUT(String key){
50+
this.key = key;
51+
}
52+
53+
private String getKey(){
54+
return key;
55+
}
56+
}
57+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package aquality.appium.elements;
2+
3+
import aquality.appium.elements.interfaces.IButton;
4+
import org.openqa.selenium.By;
5+
6+
/**
7+
* Class describing element button
8+
*/
9+
public class Button extends Element implements IButton {
10+
11+
protected Button(final By locator, final String name) {
12+
super(locator, name);
13+
}
14+
15+
protected String getElementType() {
16+
return getLocManager().getValue("loc.button");
17+
}
18+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package aquality.appium.elements;
2+
3+
import aquality.appium.elements.interfaces.ICheckBox;
4+
import org.openqa.selenium.By;
5+
6+
/**
7+
* Class describing the checkbox
8+
*/
9+
public class CheckBox extends Element implements ICheckBox {
10+
11+
protected CheckBox(final By locator, final String name) {
12+
super(locator, name);
13+
}
14+
15+
protected String getElementType() {
16+
return getLocManager().getValue("loc.checkbox");
17+
}
18+
19+
@Override
20+
public void check() {
21+
setState(true);
22+
}
23+
24+
@Override
25+
public void uncheck() {
26+
setState(false);
27+
}
28+
29+
@Override
30+
public boolean isChecked() {
31+
return getState();
32+
}
33+
34+
@Override
35+
public void toggle() {
36+
setState(!isChecked());
37+
}
38+
39+
/**
40+
* Set value
41+
*
42+
* @param state value (true/false)
43+
*/
44+
private void setState(boolean state) {
45+
getLogger().info(String.format("%1$s '%2$s'", getLocManager().getValue("loc.setting.value"), state));
46+
if (state != getState()) {
47+
click();
48+
}
49+
}
50+
51+
private boolean getState() {
52+
info(getLocManager().getValue("loc.checkbox.get.state"));
53+
return getElement().isSelected();
54+
}
55+
}

0 commit comments

Comments
 (0)