Skip to content

Commit dc7eb05

Browse files
committed
Add android cli commands
1 parent 5d410f2 commit dc7eb05

4 files changed

Lines changed: 103 additions & 2 deletions

File tree

cli/resources/settings/cli.settings

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,27 @@ FollowLinks = false
106106
BrowserFullScreen = true
107107
SwitchNewTabs = true
108108

109+
#################################################################
110+
# Android Appium features
111+
#################################################################
112+
113+
AppiumPlatformName = Android
114+
AppiumIsApkInstalled = false
115+
AppiumApp =
116+
AppiumAppPackage =
117+
AppiumAppActivity =
118+
AppiumIsEmulatorDocker = false
119+
AppiumIpAddress =
120+
AppiumDeviceName = Android Emulator
121+
AppiumAutomationName = UiAutomator2
122+
AppiumNewCommandTimeout = 600
123+
AppiumAutoGrantPermissions = false
124+
AppiumAllowInvisibleElements = false
125+
AppiumIgnoreHiddenApiPolicyError = false
126+
AppiumAdbExecTimeout = 120000
127+
AppiumUiautomator2ServerInstallTimeout = 120000
128+
AppiumUiautomator2ServerLaunchTimeout = 120000
129+
109130
#################################################################
110131
# Sets whether to keep the SUTs GUI active in the screen (e.g. when its minimised or when a process is started and its UI is in front, etc.)
111132
#################################################################

cli/src/org/testar/cli/CliDaemonServer.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
import java.util.Set;
1919

2020
import org.testar.cli.settings.CliSettingsLoader;
21+
import org.testar.config.ConfigTags;
2122
import org.testar.config.settings.Settings;
2223
import org.testar.core.action.Action;
23-
import org.testar.core.action.ActionRoles;
2424
import org.testar.core.action.resolver.ResolvedAction;
2525
import org.testar.core.state.State;
2626
import org.testar.core.state.Widget;
@@ -226,9 +226,13 @@ private synchronized void closeActiveSession() {
226226
}
227227

228228
private PlatformSessionSpec buildSessionSpec(CliRequest request) {
229+
Settings settings = CliSettingsLoader.load();
230+
return buildSessionSpec(request, settings);
231+
}
232+
233+
PlatformSessionSpec buildSessionSpec(CliRequest request, Settings settings) {
229234
String platformToken = request.argumentAt(0);
230235
String target = request.argumentAt(1);
231-
Settings settings = CliSettingsLoader.load();
232236

233237
if (platformToken == null) {
234238
throw new IllegalArgumentException("Expected: startSession <platform> <target>");
@@ -239,6 +243,13 @@ private PlatformSessionSpec buildSessionSpec(CliRequest request) {
239243
}
240244

241245
OperatingSystems operatingSystem = parseOperatingSystem(platformToken);
246+
if (operatingSystem == OperatingSystems.ANDROID) {
247+
settings.set(ConfigTags.AppiumIsApkInstalled, false);
248+
settings.set(ConfigTags.AppiumApp, target);
249+
} else if (operatingSystem == OperatingSystems.WEBDRIVER) {
250+
settings.set(ConfigTags.SUTConnectorValue, target);
251+
}
252+
242253
return PlatformSessionSpecFactory.create(
243254
operatingSystem,
244255
PlatformSessionSpec.TargetType.EXECUTABLE,
@@ -256,6 +267,9 @@ private OperatingSystems parseOperatingSystem(String token) {
256267
if ("webdriver".equals(normalized) || "web".equals(normalized)) {
257268
return OperatingSystems.WEBDRIVER;
258269
}
270+
if ("android".equals(normalized) || "appium".equals(normalized)) {
271+
return OperatingSystems.ANDROID;
272+
}
259273
throw new IllegalArgumentException("Unsupported platform token: " + token);
260274
}
261275

cli/src/org/testar/cli/CliRunner.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ private void printHelp() {
4747
output.println("Usage:");
4848
output.println(" startSession windows <path>");
4949
output.println(" startSession webdriver <url>");
50+
output.println(" startSession android <apk>");
5051
output.println(" sessionStatus");
5152
output.println(" getState");
5253
output.println(" getStateScreenshot");
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package org.testar.cli;
2+
3+
import java.util.List;
4+
import java.util.Properties;
5+
6+
import org.junit.Assert;
7+
import org.junit.Test;
8+
import org.testar.config.ConfigTags;
9+
import org.testar.config.settings.Settings;
10+
import org.testar.config.settings.SettingsDefaults;
11+
import org.testar.plugin.OperatingSystems;
12+
import org.testar.plugin.PlatformSessionSpec;
13+
14+
public class CliDaemonServerTest {
15+
16+
@Test
17+
public void buildSessionSpecForAndroidCopiesApkArgumentIntoSettings() {
18+
CliDaemonServer server = new CliDaemonServer();
19+
Settings settings = defaultSettings();
20+
21+
PlatformSessionSpec sessionSpec = server.buildSessionSpec(
22+
CliRequest.of(CliCommand.START_SESSION, List.of("android", "/tmp/example.apk")),
23+
settings
24+
);
25+
26+
Assert.assertEquals(OperatingSystems.ANDROID, sessionSpec.getOperatingSystem());
27+
Assert.assertEquals(PlatformSessionSpec.TargetType.EXECUTABLE, sessionSpec.getTargetType());
28+
Assert.assertEquals("/tmp/example.apk", sessionSpec.getTarget());
29+
Assert.assertFalse(settings.get(ConfigTags.AppiumIsApkInstalled));
30+
Assert.assertEquals("/tmp/example.apk", settings.get(ConfigTags.AppiumApp));
31+
}
32+
33+
@Test
34+
public void buildSessionSpecForWebdriverCopiesTargetIntoSettings() {
35+
CliDaemonServer server = new CliDaemonServer();
36+
Settings settings = defaultSettings();
37+
38+
PlatformSessionSpec sessionSpec = server.buildSessionSpec(
39+
CliRequest.of(CliCommand.START_SESSION, List.of("webdriver", "https://example.org")),
40+
settings
41+
);
42+
43+
Assert.assertEquals(OperatingSystems.WEBDRIVER, sessionSpec.getOperatingSystem());
44+
Assert.assertEquals("https://example.org", sessionSpec.getTarget());
45+
Assert.assertEquals("https://example.org", settings.get(ConfigTags.SUTConnectorValue));
46+
}
47+
48+
@Test
49+
public void buildSessionSpecForWindowsKeepsTargetInSessionSpec() {
50+
CliDaemonServer server = new CliDaemonServer();
51+
Settings settings = defaultSettings();
52+
53+
PlatformSessionSpec sessionSpec = server.buildSessionSpec(
54+
CliRequest.of(CliCommand.START_SESSION, List.of("windows", "notepad.exe")),
55+
settings
56+
);
57+
58+
Assert.assertEquals(OperatingSystems.WINDOWS, sessionSpec.getOperatingSystem());
59+
Assert.assertEquals("notepad.exe", sessionSpec.getTarget());
60+
}
61+
62+
private static Settings defaultSettings() {
63+
return new Settings(SettingsDefaults.getSettingsDefaults(), new Properties());
64+
}
65+
}

0 commit comments

Comments
 (0)