Skip to content

Commit ef71924

Browse files
Avoid enforcing the platform name while creating drivers (#1164)
1 parent 50744b3 commit ef71924

File tree

4 files changed

+62
-64
lines changed

4 files changed

+62
-64
lines changed

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.openqa.selenium.By;
3232
import org.openqa.selenium.Capabilities;
3333
import org.openqa.selenium.DeviceRotation;
34+
import org.openqa.selenium.MutableCapabilities;
3435
import org.openqa.selenium.ScreenOrientation;
3536
import org.openqa.selenium.WebDriver;
3637
import org.openqa.selenium.WebDriverException;
@@ -136,14 +137,34 @@ public AppiumDriver(Capabilities desiredCapabilities) {
136137
* @param newPlatform a {@link MobileCapabilityType#PLATFORM_NAME} value which has
137138
* to be set up
138139
* @return {@link Capabilities} with changed mobile platform value
140+
* @deprecated Please use {@link #updateDefaultPlatformName(Capabilities, String)} instead
139141
*/
142+
@Deprecated
140143
protected static Capabilities substituteMobilePlatform(Capabilities originalCapabilities,
141144
String newPlatform) {
142145
DesiredCapabilities dc = new DesiredCapabilities(originalCapabilities);
143146
dc.setCapability(PLATFORM_NAME, newPlatform);
144147
return dc;
145148
}
146149

150+
/**
151+
* Changes platform name if it is not set and returns new capabilities.
152+
*
153+
* @param originalCapabilities the given {@link Capabilities}.
154+
* @param defaultName a {@link MobileCapabilityType#PLATFORM_NAME} value which has
155+
* to be set up
156+
* @return {@link Capabilities} with changed mobile platform name value or the original capabilities
157+
*/
158+
protected static Capabilities updateDefaultPlatformName(Capabilities originalCapabilities,
159+
String defaultName) {
160+
if (originalCapabilities.getCapability(PLATFORM_NAME) == null) {
161+
DesiredCapabilities dc = new DesiredCapabilities(originalCapabilities);
162+
dc.setCapability(PLATFORM_NAME, defaultName);
163+
return dc;
164+
}
165+
return originalCapabilities;
166+
}
167+
147168
@Override
148169
public List<T> findElements(By by) {
149170
return super.findElements(by);
@@ -295,4 +316,17 @@ public boolean isBrowser() {
295316
return super.isBrowser()
296317
&& !containsIgnoreCase(getContext(), "NATIVE_APP");
297318
}
319+
320+
@Override
321+
protected void startSession(Capabilities capabilities) {
322+
super.startSession(capabilities);
323+
// The RemoteWebDriver implementation overrides platformName
324+
// so we need to restore it back to the original value
325+
Object originalPlatformName = capabilities.getCapability(PLATFORM_NAME);
326+
Capabilities originalCaps = super.getCapabilities();
327+
if (originalPlatformName != null && originalCaps instanceof MutableCapabilities) {
328+
((MutableCapabilities) super.getCapabilities()).setCapability(PLATFORM_NAME,
329+
originalPlatformName);
330+
}
331+
}
298332
}

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

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import static io.appium.java_client.android.AndroidMobileCommandHelper.endTestCoverageCommand;
2020
import static io.appium.java_client.android.AndroidMobileCommandHelper.openNotificationsCommand;
2121
import static io.appium.java_client.android.AndroidMobileCommandHelper.toggleLocationServicesCommand;
22-
import static org.openqa.selenium.remote.CapabilityType.PLATFORM_NAME;
2322
import static org.openqa.selenium.remote.DriverCommand.EXECUTE_SCRIPT;
2423

2524
import com.google.common.collect.ImmutableMap;
@@ -40,15 +39,13 @@
4039
import io.appium.java_client.service.local.AppiumServiceBuilder;
4140
import io.appium.java_client.ws.StringWebSocketClient;
4241
import org.openqa.selenium.Capabilities;
43-
import org.openqa.selenium.MutableCapabilities;
4442
import org.openqa.selenium.WebElement;
4543
import org.openqa.selenium.remote.HttpCommandExecutor;
4644
import org.openqa.selenium.remote.http.HttpClient;
4745

4846
import java.net.URL;
4947
import java.util.Collections;
5048
import java.util.Map;
51-
import javax.annotation.Nullable;
5249

5350
/**
5451
* Android driver implementation.
@@ -84,7 +81,7 @@ public class AndroidDriver<T extends WebElement>
8481
* @param capabilities take a look at {@link Capabilities}
8582
*/
8683
public AndroidDriver(HttpCommandExecutor executor, Capabilities capabilities) {
87-
super(executor, substituteMobilePlatform(capabilities, ANDROID_PLATFORM));
84+
super(executor, updateDefaultPlatformName(capabilities, ANDROID_PLATFORM));
8885
}
8986

9087
/**
@@ -94,7 +91,7 @@ public AndroidDriver(HttpCommandExecutor executor, Capabilities capabilities) {
9491
* @param desiredCapabilities take a look at {@link Capabilities}
9592
*/
9693
public AndroidDriver(URL remoteAddress, Capabilities desiredCapabilities) {
97-
super(remoteAddress, substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM));
94+
super(remoteAddress, updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
9895
}
9996

10097
/**
@@ -107,7 +104,7 @@ public AndroidDriver(URL remoteAddress, Capabilities desiredCapabilities) {
107104
public AndroidDriver(URL remoteAddress, HttpClient.Factory httpClientFactory,
108105
Capabilities desiredCapabilities) {
109106
super(remoteAddress, httpClientFactory,
110-
substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM));
107+
updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
111108
}
112109

113110
/**
@@ -117,7 +114,7 @@ public AndroidDriver(URL remoteAddress, HttpClient.Factory httpClientFactory,
117114
* @param desiredCapabilities take a look at {@link Capabilities}
118115
*/
119116
public AndroidDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) {
120-
super(service, substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM));
117+
super(service, updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
121118
}
122119

123120
/**
@@ -130,7 +127,7 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities desiredCapab
130127
public AndroidDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory,
131128
Capabilities desiredCapabilities) {
132129
super(service, httpClientFactory,
133-
substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM));
130+
updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
134131
}
135132

136133
/**
@@ -140,7 +137,7 @@ public AndroidDriver(AppiumDriverLocalService service, HttpClient.Factory httpCl
140137
* @param desiredCapabilities take a look at {@link Capabilities}
141138
*/
142139
public AndroidDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities) {
143-
super(builder, substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM));
140+
super(builder, updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
144141
}
145142

146143
/**
@@ -153,7 +150,7 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilit
153150
public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory,
154151
Capabilities desiredCapabilities) {
155152
super(builder, httpClientFactory,
156-
substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM));
153+
updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
157154
}
158155

159156
/**
@@ -163,7 +160,7 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient
163160
* @param desiredCapabilities take a look at {@link Capabilities}
164161
*/
165162
public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) {
166-
super(httpClientFactory, substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM));
163+
super(httpClientFactory, updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
167164
}
168165

169166
/**
@@ -172,7 +169,7 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities desiredC
172169
* @param desiredCapabilities take a look at {@link Capabilities}
173170
*/
174171
public AndroidDriver(Capabilities desiredCapabilities) {
175-
super(substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM));
172+
super(updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM));
176173
}
177174

178175
/**
@@ -203,20 +200,6 @@ public AndroidBatteryInfo getBatteryInfo() {
203200
"script", "mobile: batteryInfo", "args", Collections.emptyList())).getValue());
204201
}
205202

206-
/**
207-
* Returns capabilities that were provided on instantiation.
208-
*
209-
* @return given {@link Capabilities}
210-
*/
211-
@Nullable
212-
public Capabilities getCapabilities() {
213-
MutableCapabilities capabilities = (MutableCapabilities) super.getCapabilities();
214-
if (capabilities != null) {
215-
capabilities.setCapability(PLATFORM_NAME, ANDROID_PLATFORM);
216-
}
217-
return capabilities;
218-
}
219-
220203
@Override
221204
public synchronized StringWebSocketClient getLogcatClient() {
222205
if (logcatClient == null) {

src/main/java/io/appium/java_client/ios/IOSDriver.java

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import static io.appium.java_client.MobileCommand.RUN_APP_IN_BACKGROUND;
2020
import static io.appium.java_client.MobileCommand.prepareArguments;
21-
import static org.openqa.selenium.remote.CapabilityType.PLATFORM_NAME;
2221
import static org.openqa.selenium.remote.DriverCommand.EXECUTE_SCRIPT;
2322

2423
import com.google.common.collect.ImmutableMap;
@@ -37,7 +36,6 @@
3736
import io.appium.java_client.ws.StringWebSocketClient;
3837
import org.openqa.selenium.Alert;
3938
import org.openqa.selenium.Capabilities;
40-
import org.openqa.selenium.MutableCapabilities;
4139
import org.openqa.selenium.WebElement;
4240
import org.openqa.selenium.remote.DriverCommand;
4341
import org.openqa.selenium.remote.HttpCommandExecutor;
@@ -48,7 +46,6 @@
4846
import java.time.Duration;
4947
import java.util.Collections;
5048
import java.util.Map;
51-
import javax.annotation.Nullable;
5249

5350
/**
5451
* iOS driver implementation.
@@ -69,7 +66,7 @@ public class IOSDriver<T extends WebElement>
6966
PushesFiles, CanRecordScreen, HasIOSClipboard, ListensToSyslogMessages,
7067
HasBattery<IOSBatteryInfo> {
7168

72-
private static final String IOS_PLATFORM = MobilePlatform.IOS;
69+
private static final String IOS_DEFAULT_PLATFORM = MobilePlatform.IOS;
7370

7471
private StringWebSocketClient syslogClient;
7572

@@ -82,7 +79,7 @@ public class IOSDriver<T extends WebElement>
8279
* @param capabilities take a look at {@link Capabilities}
8380
*/
8481
public IOSDriver(HttpCommandExecutor executor, Capabilities capabilities) {
85-
super(executor, substituteMobilePlatform(capabilities, IOS_PLATFORM));
82+
super(executor, updateDefaultPlatformName(capabilities, IOS_DEFAULT_PLATFORM));
8683
}
8784

8885
/**
@@ -92,7 +89,7 @@ public IOSDriver(HttpCommandExecutor executor, Capabilities capabilities) {
9289
* @param desiredCapabilities take a look at {@link Capabilities}
9390
*/
9491
public IOSDriver(URL remoteAddress, Capabilities desiredCapabilities) {
95-
super(remoteAddress, substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM));
92+
super(remoteAddress, updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM));
9693
}
9794

9895
/**
@@ -105,7 +102,7 @@ public IOSDriver(URL remoteAddress, Capabilities desiredCapabilities) {
105102
public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory,
106103
Capabilities desiredCapabilities) {
107104
super(remoteAddress, httpClientFactory,
108-
substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM));
105+
updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM));
109106
}
110107

111108
/**
@@ -115,7 +112,7 @@ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory,
115112
* @param desiredCapabilities take a look at {@link Capabilities}
116113
*/
117114
public IOSDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) {
118-
super(service, substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM));
115+
super(service, updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM));
119116
}
120117

121118
/**
@@ -127,8 +124,7 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities desiredCapabilit
127124
*/
128125
public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory,
129126
Capabilities desiredCapabilities) {
130-
super(service, httpClientFactory,
131-
substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM));
127+
super(service, httpClientFactory, updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM));
132128
}
133129

134130
/**
@@ -138,7 +134,7 @@ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClient
138134
* @param desiredCapabilities take a look at {@link Capabilities}
139135
*/
140136
public IOSDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities) {
141-
super(builder, substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM));
137+
super(builder, updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM));
142138
}
143139

144140
/**
@@ -151,7 +147,7 @@ public IOSDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities)
151147
public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory,
152148
Capabilities desiredCapabilities) {
153149
super(builder, httpClientFactory,
154-
substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM));
150+
updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM));
155151
}
156152

157153
/**
@@ -161,7 +157,7 @@ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFact
161157
* @param desiredCapabilities take a look at {@link Capabilities}
162158
*/
163159
public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) {
164-
super(httpClientFactory, substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM));
160+
super(httpClientFactory, updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM));
165161
}
166162

167163
/**
@@ -170,7 +166,7 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapab
170166
* @param desiredCapabilities take a look at {@link Capabilities}
171167
*/
172168
public IOSDriver(Capabilities desiredCapabilities) {
173-
super(substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM));
169+
super(updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM));
174170
}
175171

176172
/**
@@ -203,21 +199,6 @@ private class InnerTargetLocator extends RemoteTargetLocator {
203199
}
204200
}
205201

206-
/**
207-
* Returns capabilities that were provided on instantiation.
208-
*
209-
* @return given {@link Capabilities}
210-
*/
211-
@Nullable
212-
public Capabilities getCapabilities() {
213-
MutableCapabilities capabilities = (MutableCapabilities) super.getCapabilities();
214-
if (capabilities != null) {
215-
capabilities.setCapability(PLATFORM_NAME, IOS_PLATFORM);
216-
}
217-
return capabilities;
218-
}
219-
220-
221202
class IOSAlert implements Alert {
222203

223204
private final Alert alert;

src/main/java/io/appium/java_client/windows/WindowsDriver.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,40 +35,40 @@ public class WindowsDriver<T extends WebElement>
3535
FindsByWindowsAutomation<T> {
3636

3737
public WindowsDriver(HttpCommandExecutor executor, Capabilities capabilities) {
38-
super(executor, substituteMobilePlatform(capabilities, WINDOWS));
38+
super(executor, updateDefaultPlatformName(capabilities, WINDOWS));
3939
}
4040

4141
public WindowsDriver(URL remoteAddress, Capabilities desiredCapabilities) {
42-
super(remoteAddress, substituteMobilePlatform(desiredCapabilities, WINDOWS));
42+
super(remoteAddress, updateDefaultPlatformName(desiredCapabilities, WINDOWS));
4343
}
4444

4545
public WindowsDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) {
46-
super(remoteAddress, httpClientFactory, substituteMobilePlatform(desiredCapabilities, WINDOWS));
46+
super(remoteAddress, httpClientFactory, updateDefaultPlatformName(desiredCapabilities, WINDOWS));
4747
}
4848

4949
public WindowsDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) {
50-
super(service, substituteMobilePlatform(desiredCapabilities, WINDOWS));
50+
super(service, updateDefaultPlatformName(desiredCapabilities, WINDOWS));
5151
}
5252

5353
public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory,
5454
Capabilities desiredCapabilities) {
55-
super(service, httpClientFactory, substituteMobilePlatform(desiredCapabilities, WINDOWS));
55+
super(service, httpClientFactory, updateDefaultPlatformName(desiredCapabilities, WINDOWS));
5656
}
5757

5858
public WindowsDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities) {
59-
super(builder, substituteMobilePlatform(desiredCapabilities, WINDOWS));
59+
super(builder, updateDefaultPlatformName(desiredCapabilities, WINDOWS));
6060
}
6161

6262
public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory,
6363
Capabilities desiredCapabilities) {
64-
super(builder, httpClientFactory, substituteMobilePlatform(desiredCapabilities, WINDOWS));
64+
super(builder, httpClientFactory, updateDefaultPlatformName(desiredCapabilities, WINDOWS));
6565
}
6666

6767
public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) {
68-
super(httpClientFactory, substituteMobilePlatform(desiredCapabilities, WINDOWS));
68+
super(httpClientFactory, updateDefaultPlatformName(desiredCapabilities, WINDOWS));
6969
}
7070

7171
public WindowsDriver(Capabilities desiredCapabilities) {
72-
super(substituteMobilePlatform(desiredCapabilities, WINDOWS));
72+
super(updateDefaultPlatformName(desiredCapabilities, WINDOWS));
7373
}
7474
}

0 commit comments

Comments
 (0)