Skip to content

Commit 7847a01

Browse files
authored
Extracted Appium LocalServiceSettings to get them from settings.json (#12)
Extracted Appium LocalServiceSettings to get them from settings.json Register implementation in container, add getter to AqualityServices Add section to setting.json files
1 parent 8d451f8 commit 7847a01

File tree

9 files changed

+103
-1
lines changed

9 files changed

+103
-1
lines changed

src/main/java/aquality/appium/mobile/application/AqualityServices.java

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

33
import aquality.appium.mobile.configuration.IApplicationProfile;
44
import aquality.appium.mobile.configuration.IConfiguration;
5+
import aquality.appium.mobile.configuration.ILocalServiceSettings;
56
import aquality.appium.mobile.elements.interfaces.IElementFactory;
67
import aquality.selenium.core.localization.ILocalizedLogger;
78
import aquality.selenium.core.logging.Logger;
@@ -160,6 +161,15 @@ public static IApplicationProfile getApplicationProfile() {
160161
return get(IApplicationProfile.class);
161162
}
162163

164+
/**
165+
* Gets AppiumDriverLocalService settings.
166+
*
167+
* @return AppiumDriverLocalService settings.
168+
*/
169+
public static ILocalServiceSettings getLocalServiceSettings() {
170+
return get(ILocalServiceSettings.class);
171+
}
172+
163173
/**
164174
* Provides interface to access all described configurations.
165175
*

src/main/java/aquality/appium/mobile/application/LocalApplicationFactory.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package aquality.appium.mobile.application;
22

3+
import aquality.appium.mobile.configuration.ILocalServiceSettings;
34
import io.appium.java_client.AppiumDriver;
45
import io.appium.java_client.service.local.AppiumDriverLocalService;
56
import io.appium.java_client.service.local.AppiumServiceBuilder;
@@ -8,8 +9,10 @@ public class LocalApplicationFactory extends ApplicationFactory {
89

910
@Override
1011
public Application getApplication() {
12+
ILocalServiceSettings settings = AqualityServices.getLocalServiceSettings();
1113
AppiumServiceBuilder builder = new AppiumServiceBuilder()
12-
.withArgument(() -> "--allow-insecure", "chromedriver_autodownload");
14+
.withCapabilities(settings.getCapabilities());
15+
settings.getArguments().forEach(builder::withArgument);
1316
AppiumDriverLocalService service = AppiumDriverLocalService.buildService(builder);
1417
service.start();
1518
AppiumDriver driver = getDriver(service.getUrl());

src/main/java/aquality/appium/mobile/application/MobileModule.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import aquality.appium.mobile.configuration.IApplicationProfile;
44
import aquality.appium.mobile.configuration.IConfiguration;
55
import aquality.appium.mobile.configuration.IConfigurationsModule;
6+
import aquality.appium.mobile.configuration.ILocalServiceSettings;
67
import aquality.appium.mobile.elements.IElementsModule;
78
import aquality.appium.mobile.elements.interfaces.IElementFactory;
89
import aquality.selenium.core.applications.AqualityModule;
@@ -18,6 +19,7 @@ public MobileModule(Provider<Application> applicationProvider) {
1819
protected void configure() {
1920
super.configure();
2021
bind(IApplicationProfile.class).to(getApplicationProfileImplementation()).in(Singleton.class);
22+
bind(ILocalServiceSettings.class).to(getLocalServiceSettingsImplementation()).in(Singleton.class);
2123
bind(IConfiguration.class).to(getConfigurationImplementation());
2224
bind(IElementFactory.class).to(getElementFactoryImplementation());
2325
}

src/main/java/aquality/appium/mobile/configuration/IConfigurationsModule.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ default Class<? extends IApplicationProfile> getApplicationProfileImplementation
1212
return ApplicationProfile.class;
1313
}
1414

15+
/**
16+
* @return class which implements {@link ILocalServiceSettings}
17+
*/
18+
default Class<? extends ILocalServiceSettings> getLocalServiceSettingsImplementation() {
19+
return LocalServiceSettings.class;
20+
}
21+
1522
/**
1623
* @return class which implements {@link IConfiguration}
1724
*/
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package aquality.appium.mobile.configuration;
2+
3+
import io.appium.java_client.service.local.flags.ServerArgument;
4+
import org.openqa.selenium.remote.DesiredCapabilities;
5+
6+
import java.util.Map;
7+
8+
/**
9+
* Describes AppiumDriverLocalService settings.
10+
*/
11+
public interface ILocalServiceSettings {
12+
/**
13+
* Gets appium driver local service arguments.
14+
* @return arguments map.
15+
*/
16+
Map<ServerArgument, String> getArguments();
17+
18+
19+
/**
20+
* Gets appium driver local service desired capabilities.
21+
* @return initialized {@link DesiredCapabilities}.
22+
*/
23+
DesiredCapabilities getCapabilities();
24+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package aquality.appium.mobile.configuration;
2+
3+
import aquality.selenium.core.utilities.ISettingsFile;
4+
import com.google.inject.Inject;
5+
import io.appium.java_client.service.local.flags.ServerArgument;
6+
import org.openqa.selenium.remote.DesiredCapabilities;
7+
8+
import java.util.HashMap;
9+
import java.util.Map;
10+
11+
public class LocalServiceSettings implements ILocalServiceSettings {
12+
private static final String SETTINGS_PATH = "/localServiceSettings";
13+
private final ISettingsFile settingsFile;
14+
15+
@Inject
16+
public LocalServiceSettings(ISettingsFile settingsFile) {
17+
this.settingsFile = settingsFile;
18+
}
19+
20+
@Override
21+
public Map<ServerArgument, String> getArguments() {
22+
Map<ServerArgument, String> argumentStringMap = new HashMap<>();
23+
settingsFile.getMap(SETTINGS_PATH + "/arguments")
24+
.forEach((key, value) -> argumentStringMap.put(() -> key, value.toString()));
25+
return argumentStringMap;
26+
}
27+
28+
@Override
29+
public DesiredCapabilities getCapabilities() {
30+
Map<String, Object> capabilitiesFromSettings = settingsFile.getMap(SETTINGS_PATH + "/capabilities");
31+
DesiredCapabilities capabilities = new DesiredCapabilities();
32+
capabilitiesFromSettings.forEach(capabilities::setCapability);
33+
return capabilities;
34+
}
35+
}

src/main/resources/settings.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@
2020
}
2121
}
2222
},
23+
"localServiceSettings": {
24+
"arguments": {
25+
"--allow-insecure": "chromedriver_autodownload"
26+
},
27+
"capabilities": {
28+
}
29+
},
2330
"timeouts": {
2431
"timeoutImplicit" : 0,
2532
"timeoutCondition" : 15,

src/test/resources/settings.androidwebsession.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313
}
1414
}
1515
},
16+
"localServiceSettings": {
17+
"arguments": {
18+
"--allow-insecure": "chromedriver_autodownload"
19+
},
20+
"capabilities": {
21+
}
22+
},
1623
"timeouts": {
1724
"timeoutImplicit" : 0,
1825
"timeoutCondition" : 15,

src/test/resources/settings.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@
2323
}
2424
}
2525
},
26+
"localServiceSettings": {
27+
"arguments": {
28+
"--allow-insecure": "chromedriver_autodownload"
29+
},
30+
"capabilities": {
31+
}
32+
},
2633
"timeouts": {
2734
"timeoutImplicit" : 0,
2835
"timeoutCondition" : 15,

0 commit comments

Comments
 (0)