Skip to content

Commit ac1729f

Browse files
refactor: Tune setting of default platform names (#1570)
1 parent c3e8916 commit ac1729f

File tree

5 files changed

+163
-137
lines changed

5 files changed

+163
-137
lines changed

src/main/java/io/appium/java_client/AppiumDriver.java

+54-20
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616

1717
package io.appium.java_client;
1818

19+
import static io.appium.java_client.internal.CapabilityHelpers.APPIUM_PREFIX;
1920
import static io.appium.java_client.remote.MobileCapabilityType.PLATFORM_NAME;
2021
import static org.apache.commons.lang3.StringUtils.isBlank;
2122

23+
import io.appium.java_client.internal.CapabilityHelpers;
2224
import io.appium.java_client.remote.AppiumCommandExecutor;
2325
import io.appium.java_client.remote.AppiumNewSessionCommandPayload;
2426
import io.appium.java_client.remote.MobileCapabilityType;
@@ -81,61 +83,93 @@ public AppiumDriver(HttpCommandExecutor executor, Capabilities capabilities) {
8183
this.remoteAddress = executor.getAddressOfRemoteServer();
8284
}
8385

84-
public AppiumDriver(URL remoteAddress, Capabilities desiredCapabilities) {
86+
public AppiumDriver(URL remoteAddress, Capabilities capabilities) {
8587
this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress),
86-
desiredCapabilities);
88+
capabilities);
8789
}
8890

8991
public AppiumDriver(URL remoteAddress, HttpClient.Factory httpClientFactory,
90-
Capabilities desiredCapabilities) {
92+
Capabilities capabilities) {
9193
this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress,
92-
httpClientFactory), desiredCapabilities);
94+
httpClientFactory), capabilities);
9395
}
9496

95-
public AppiumDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) {
97+
public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities) {
9698
this(new AppiumCommandExecutor(MobileCommand.commandRepository, service),
97-
desiredCapabilities);
99+
capabilities);
98100
}
99101

100102
public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory,
101-
Capabilities desiredCapabilities) {
103+
Capabilities capabilities) {
102104
this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, httpClientFactory),
103-
desiredCapabilities);
105+
capabilities);
104106
}
105107

106-
public AppiumDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities) {
107-
this(builder.build(), desiredCapabilities);
108+
public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities) {
109+
this(builder.build(), capabilities);
108110
}
109111

110112
public AppiumDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory,
111-
Capabilities desiredCapabilities) {
112-
this(builder.build(), httpClientFactory, desiredCapabilities);
113+
Capabilities capabilities) {
114+
this(builder.build(), httpClientFactory, capabilities);
113115
}
114116

115-
public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) {
117+
public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) {
116118
this(AppiumDriverLocalService.buildDefaultService(), httpClientFactory,
117-
desiredCapabilities);
119+
capabilities);
118120
}
119121

120-
public AppiumDriver(Capabilities desiredCapabilities) {
121-
this(AppiumDriverLocalService.buildDefaultService(), desiredCapabilities);
122+
public AppiumDriver(Capabilities capabilities) {
123+
this(AppiumDriverLocalService.buildDefaultService(), capabilities);
122124
}
123125

124126
/**
125-
* Changes platform name if it is not set and returns new capabilities.
127+
* Changes platform name if it is not set and returns merged capabilities.
126128
*
127129
* @param originalCapabilities the given {@link Capabilities}.
128130
* @param defaultName a {@link MobileCapabilityType#PLATFORM_NAME} value which has
129131
* to be set up
130132
* @return {@link Capabilities} with changed mobile platform name value or the original capabilities
131133
*/
132-
protected static Capabilities updateDefaultPlatformName(Capabilities originalCapabilities,
133-
String defaultName) {
134-
return originalCapabilities.getCapability(PLATFORM_NAME) == null
134+
protected static Capabilities ensurePlatformName(Capabilities originalCapabilities,
135+
String defaultName) {
136+
String currentName = (String) originalCapabilities.getCapability(PLATFORM_NAME);
137+
return isBlank(currentName)
135138
? originalCapabilities.merge(new ImmutableCapabilities(PLATFORM_NAME, defaultName))
136139
: originalCapabilities;
137140
}
138141

142+
/**
143+
* Changes platform and automation names if they are not set
144+
* and returns merged capabilities.
145+
*
146+
* @param originalCapabilities the given {@link Capabilities}.
147+
* @param defaultPlatformName a {@link MobileCapabilityType#PLATFORM_NAME} value which has
148+
* to be set up
149+
* @param defaultAutomationName The default automation name to set up for this class
150+
* @return {@link Capabilities} with changed mobile platform name value or the original capabilities
151+
*/
152+
protected static Capabilities ensurePlatformAndAutomationNames(
153+
Capabilities originalCapabilities, String defaultPlatformName, String defaultAutomationName) {
154+
MutableCapabilities toMerge = new MutableCapabilities();
155+
String currentPlatformName = (String) originalCapabilities.getCapability(PLATFORM_NAME);
156+
if (isBlank(currentPlatformName)) {
157+
toMerge.setCapability(PLATFORM_NAME, defaultPlatformName);
158+
}
159+
String currentAutomationName = CapabilityHelpers.getCapability(
160+
originalCapabilities, MobileCapabilityType.AUTOMATION_NAME, String.class);
161+
if (isBlank(currentAutomationName)) {
162+
toMerge.setCapability(originalCapabilities.getCapabilityNames()
163+
.contains(MobileCapabilityType.AUTOMATION_NAME)
164+
? MobileCapabilityType.AUTOMATION_NAME
165+
: APPIUM_PREFIX + MobileCapabilityType.AUTOMATION_NAME,
166+
defaultAutomationName);
167+
}
168+
return toMerge.getCapabilityNames().isEmpty()
169+
? originalCapabilities
170+
: originalCapabilities.merge(toMerge);
171+
}
172+
139173
@Override
140174
public ExecuteMethod getExecuteMethod() {
141175
return executeMethod;

src/main/java/io/appium/java_client/android/AndroidDriver.java

+29-33
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import io.appium.java_client.android.geolocation.SupportsExtendedGeolocationCommands;
3939
import io.appium.java_client.android.nativekey.PressesKey;
4040
import io.appium.java_client.battery.HasBattery;
41-
import io.appium.java_client.remote.MobilePlatform;
4241
import io.appium.java_client.remote.SupportsContextSwitching;
4342
import io.appium.java_client.remote.SupportsLocation;
4443
import io.appium.java_client.remote.SupportsRotation;
@@ -47,6 +46,7 @@
4746
import io.appium.java_client.service.local.AppiumServiceBuilder;
4847
import io.appium.java_client.ws.StringWebSocketClient;
4948
import org.openqa.selenium.Capabilities;
49+
import org.openqa.selenium.Platform;
5050
import org.openqa.selenium.remote.HttpCommandExecutor;
5151
import org.openqa.selenium.remote.html5.RemoteLocationContext;
5252
import org.openqa.selenium.remote.http.HttpClient;
@@ -87,8 +87,7 @@ public class AndroidDriver extends AppiumDriver implements
8787
ExecuteCDPCommand,
8888
CanReplaceElementValue,
8989
SupportsExtendedGeolocationCommands {
90-
91-
private static final String ANDROID_PLATFORM = MobilePlatform.ANDROID;
90+
private static final String ANDROID_PLATFORM = Platform.ANDROID.name();
9291

9392
private StringWebSocketClient logcatClient;
9493

@@ -101,95 +100,92 @@ public class AndroidDriver extends AppiumDriver implements
101100
* @param capabilities take a look at {@link Capabilities}
102101
*/
103102
public AndroidDriver(HttpCommandExecutor executor, Capabilities capabilities) {
104-
super(executor, updateDefaultPlatformName(capabilities, ANDROID_PLATFORM));
103+
super(executor, ensurePlatformName(capabilities, ANDROID_PLATFORM));
105104
}
106105

107106
/**
108107
* Creates a new instance based on Appium server URL and {@code capabilities}.
109108
*
110109
* @param remoteAddress is the address of remotely/locally started Appium server
111-
* @param desiredCapabilities take a look at {@link Capabilities}
110+
* @param capabilities take a look at {@link Capabilities}
112111
*/
113-
public AndroidDriver(URL remoteAddress, Capabilities desiredCapabilities) {
114-
super(remoteAddress, updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
112+
public AndroidDriver(URL remoteAddress, Capabilities capabilities) {
113+
super(remoteAddress, ensurePlatformName(capabilities, ANDROID_PLATFORM));
115114
}
116115

117116
/**
118117
* Creates a new instance based on Appium server URL, HTTP client factory and {@code capabilities}.
119118
*
120119
* @param remoteAddress is the address of remotely/locally started Appium server
121120
* @param httpClientFactory take a look at {@link HttpClient.Factory}
122-
* @param desiredCapabilities take a look at {@link Capabilities}
121+
* @param capabilities take a look at {@link Capabilities}
123122
*/
124-
public AndroidDriver(URL remoteAddress, HttpClient.Factory httpClientFactory,
125-
Capabilities desiredCapabilities) {
126-
super(remoteAddress, httpClientFactory,
127-
updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
123+
public AndroidDriver(
124+
URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) {
125+
super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM));
128126
}
129127

130128
/**
131129
* Creates a new instance based on Appium driver local service and {@code capabilities}.
132130
*
133131
* @param service take a look at {@link AppiumDriverLocalService}
134-
* @param desiredCapabilities take a look at {@link Capabilities}
132+
* @param capabilities take a look at {@link Capabilities}
135133
*/
136-
public AndroidDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) {
137-
super(service, updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
134+
public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities) {
135+
super(service, ensurePlatformName(capabilities, ANDROID_PLATFORM));
138136
}
139137

140138
/**
141139
* Creates a new instance based on Appium driver local service, HTTP client factory and {@code capabilities}.
142140
*
143141
* @param service take a look at {@link AppiumDriverLocalService}
144142
* @param httpClientFactory take a look at {@link HttpClient.Factory}
145-
* @param desiredCapabilities take a look at {@link Capabilities}
143+
* @param capabilities take a look at {@link Capabilities}
146144
*/
147-
public AndroidDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory,
148-
Capabilities desiredCapabilities) {
149-
super(service, httpClientFactory,
150-
updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
145+
public AndroidDriver(
146+
AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) {
147+
super(service, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM));
151148
}
152149

153150
/**
154151
* Creates a new instance based on Appium service builder and {@code capabilities}.
155152
*
156153
* @param builder take a look at {@link AppiumServiceBuilder}
157-
* @param desiredCapabilities take a look at {@link Capabilities}
154+
* @param capabilities take a look at {@link Capabilities}
158155
*/
159-
public AndroidDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities) {
160-
super(builder, updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
156+
public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) {
157+
super(builder, ensurePlatformName(capabilities, ANDROID_PLATFORM));
161158
}
162159

163160
/**
164161
* Creates a new instance based on Appium service builder, HTTP client factory and {@code capabilities}.
165162
*
166163
* @param builder take a look at {@link AppiumServiceBuilder}
167164
* @param httpClientFactory take a look at {@link HttpClient.Factory}
168-
* @param desiredCapabilities take a look at {@link Capabilities}
165+
* @param capabilities take a look at {@link Capabilities}
169166
*/
170167
public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory,
171-
Capabilities desiredCapabilities) {
172-
super(builder, httpClientFactory,
173-
updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
168+
Capabilities capabilities) {
169+
super(builder, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM));
174170
}
175171

176172
/**
177173
* Creates a new instance based on HTTP client factory and {@code capabilities}.
178174
*
179175
* @param httpClientFactory take a look at {@link HttpClient.Factory}
180-
* @param desiredCapabilities take a look at {@link Capabilities}
176+
* @param capabilities take a look at {@link Capabilities}
181177
*/
182-
public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) {
183-
super(httpClientFactory, updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
178+
public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) {
179+
super(httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM));
184180
}
185181

186182
/**
187183
* Creates a new instance based on {@code capabilities}.
188184
*
189-
* @param desiredCapabilities take a look at {@link Capabilities}
185+
* @param capabilities take a look at {@link Capabilities}
190186
*/
191-
public AndroidDriver(Capabilities desiredCapabilities) {
192-
super(updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
187+
public AndroidDriver(Capabilities capabilities) {
188+
super(ensurePlatformName(capabilities, ANDROID_PLATFORM));
193189
}
194190

195191
/**

0 commit comments

Comments
 (0)