diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index eab19e283..4fc4c49ee 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -31,6 +31,7 @@ import org.openqa.selenium.By; import org.openqa.selenium.Capabilities; import org.openqa.selenium.DeviceRotation; +import org.openqa.selenium.MutableCapabilities; import org.openqa.selenium.ScreenOrientation; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriverException; @@ -136,7 +137,9 @@ public AppiumDriver(Capabilities desiredCapabilities) { * @param newPlatform a {@link MobileCapabilityType#PLATFORM_NAME} value which has * to be set up * @return {@link Capabilities} with changed mobile platform value + * @deprecated Please use {@link #updateDefaultPlatformName(Capabilities, String)} instead */ + @Deprecated protected static Capabilities substituteMobilePlatform(Capabilities originalCapabilities, String newPlatform) { DesiredCapabilities dc = new DesiredCapabilities(originalCapabilities); @@ -144,6 +147,24 @@ protected static Capabilities substituteMobilePlatform(Capabilities originalCapa return dc; } + /** + * Changes platform name if it is not set and returns new capabilities. + * + * @param originalCapabilities the given {@link Capabilities}. + * @param defaultName a {@link MobileCapabilityType#PLATFORM_NAME} value which has + * to be set up + * @return {@link Capabilities} with changed mobile platform name value or the original capabilities + */ + protected static Capabilities updateDefaultPlatformName(Capabilities originalCapabilities, + String defaultName) { + if (originalCapabilities.getCapability(PLATFORM_NAME) == null) { + DesiredCapabilities dc = new DesiredCapabilities(originalCapabilities); + dc.setCapability(PLATFORM_NAME, defaultName); + return dc; + } + return originalCapabilities; + } + @Override public List findElements(By by) { return super.findElements(by); @@ -295,4 +316,17 @@ public boolean isBrowser() { return super.isBrowser() && !containsIgnoreCase(getContext(), "NATIVE_APP"); } + + @Override + protected void startSession(Capabilities capabilities) { + super.startSession(capabilities); + // The RemoteWebDriver implementation overrides platformName + // so we need to restore it back to the original value + Object originalPlatformName = capabilities.getCapability(PLATFORM_NAME); + Capabilities originalCaps = super.getCapabilities(); + if (originalPlatformName != null && originalCaps instanceof MutableCapabilities) { + ((MutableCapabilities) super.getCapabilities()).setCapability(PLATFORM_NAME, + originalPlatformName); + } + } } diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index b1d9a454d..926363602 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -19,7 +19,6 @@ import static io.appium.java_client.android.AndroidMobileCommandHelper.endTestCoverageCommand; import static io.appium.java_client.android.AndroidMobileCommandHelper.openNotificationsCommand; import static io.appium.java_client.android.AndroidMobileCommandHelper.toggleLocationServicesCommand; -import static org.openqa.selenium.remote.CapabilityType.PLATFORM_NAME; import static org.openqa.selenium.remote.DriverCommand.EXECUTE_SCRIPT; import com.google.common.collect.ImmutableMap; @@ -40,7 +39,6 @@ import io.appium.java_client.service.local.AppiumServiceBuilder; import io.appium.java_client.ws.StringWebSocketClient; import org.openqa.selenium.Capabilities; -import org.openqa.selenium.MutableCapabilities; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.HttpCommandExecutor; import org.openqa.selenium.remote.http.HttpClient; @@ -48,7 +46,6 @@ import java.net.URL; import java.util.Collections; import java.util.Map; -import javax.annotation.Nullable; /** * Android driver implementation. @@ -84,7 +81,7 @@ public class AndroidDriver * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(HttpCommandExecutor executor, Capabilities capabilities) { - super(executor, substituteMobilePlatform(capabilities, ANDROID_PLATFORM)); + super(executor, updateDefaultPlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -94,7 +91,7 @@ public AndroidDriver(HttpCommandExecutor executor, Capabilities capabilities) { * @param desiredCapabilities take a look at {@link Capabilities} */ public AndroidDriver(URL remoteAddress, Capabilities desiredCapabilities) { - super(remoteAddress, substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM)); + super(remoteAddress, updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM)); } /** @@ -107,7 +104,7 @@ public AndroidDriver(URL remoteAddress, Capabilities desiredCapabilities) { public AndroidDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { super(remoteAddress, httpClientFactory, - substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM)); + updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM)); } /** @@ -117,7 +114,7 @@ public AndroidDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, * @param desiredCapabilities take a look at {@link Capabilities} */ public AndroidDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) { - super(service, substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM)); + super(service, updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM)); } /** @@ -130,7 +127,7 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities desiredCapab public AndroidDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { super(service, httpClientFactory, - substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM)); + updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM)); } /** @@ -140,7 +137,7 @@ public AndroidDriver(AppiumDriverLocalService service, HttpClient.Factory httpCl * @param desiredCapabilities take a look at {@link Capabilities} */ public AndroidDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities) { - super(builder, substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM)); + super(builder, updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM)); } /** @@ -153,7 +150,7 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilit public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { super(builder, httpClientFactory, - substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM)); + updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM)); } /** @@ -163,7 +160,7 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient * @param desiredCapabilities take a look at {@link Capabilities} */ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { - super(httpClientFactory, substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM)); + super(httpClientFactory, updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM)); } /** @@ -172,7 +169,7 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities desiredC * @param desiredCapabilities take a look at {@link Capabilities} */ public AndroidDriver(Capabilities desiredCapabilities) { - super(substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM)); + super(updateDefaultPlatformName(desiredCapabilities, ANDROID_PLATFORM)); } /** @@ -203,20 +200,6 @@ public AndroidBatteryInfo getBatteryInfo() { "script", "mobile: batteryInfo", "args", Collections.emptyList())).getValue()); } - /** - * Returns capabilities that were provided on instantiation. - * - * @return given {@link Capabilities} - */ - @Nullable - public Capabilities getCapabilities() { - MutableCapabilities capabilities = (MutableCapabilities) super.getCapabilities(); - if (capabilities != null) { - capabilities.setCapability(PLATFORM_NAME, ANDROID_PLATFORM); - } - return capabilities; - } - @Override public synchronized StringWebSocketClient getLogcatClient() { if (logcatClient == null) { diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index 1cd2aa81b..1d668c5de 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -18,7 +18,6 @@ import static io.appium.java_client.MobileCommand.RUN_APP_IN_BACKGROUND; import static io.appium.java_client.MobileCommand.prepareArguments; -import static org.openqa.selenium.remote.CapabilityType.PLATFORM_NAME; import static org.openqa.selenium.remote.DriverCommand.EXECUTE_SCRIPT; import com.google.common.collect.ImmutableMap; @@ -37,7 +36,6 @@ import io.appium.java_client.ws.StringWebSocketClient; import org.openqa.selenium.Alert; import org.openqa.selenium.Capabilities; -import org.openqa.selenium.MutableCapabilities; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.DriverCommand; import org.openqa.selenium.remote.HttpCommandExecutor; @@ -48,7 +46,6 @@ import java.time.Duration; import java.util.Collections; import java.util.Map; -import javax.annotation.Nullable; /** * iOS driver implementation. @@ -69,7 +66,7 @@ public class IOSDriver PushesFiles, CanRecordScreen, HasIOSClipboard, ListensToSyslogMessages, HasBattery { - private static final String IOS_PLATFORM = MobilePlatform.IOS; + private static final String IOS_DEFAULT_PLATFORM = MobilePlatform.IOS; private StringWebSocketClient syslogClient; @@ -82,7 +79,7 @@ public class IOSDriver * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(HttpCommandExecutor executor, Capabilities capabilities) { - super(executor, substituteMobilePlatform(capabilities, IOS_PLATFORM)); + super(executor, updateDefaultPlatformName(capabilities, IOS_DEFAULT_PLATFORM)); } /** @@ -92,7 +89,7 @@ public IOSDriver(HttpCommandExecutor executor, Capabilities capabilities) { * @param desiredCapabilities take a look at {@link Capabilities} */ public IOSDriver(URL remoteAddress, Capabilities desiredCapabilities) { - super(remoteAddress, substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM)); + super(remoteAddress, updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM)); } /** @@ -105,7 +102,7 @@ public IOSDriver(URL remoteAddress, Capabilities desiredCapabilities) { public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { super(remoteAddress, httpClientFactory, - substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM)); + updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM)); } /** @@ -115,7 +112,7 @@ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, * @param desiredCapabilities take a look at {@link Capabilities} */ public IOSDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) { - super(service, substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM)); + super(service, updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM)); } /** @@ -127,8 +124,7 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities desiredCapabilit */ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { - super(service, httpClientFactory, - substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM)); + super(service, httpClientFactory, updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM)); } /** @@ -138,7 +134,7 @@ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClient * @param desiredCapabilities take a look at {@link Capabilities} */ public IOSDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities) { - super(builder, substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM)); + super(builder, updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM)); } /** @@ -151,7 +147,7 @@ public IOSDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities) public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { super(builder, httpClientFactory, - substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM)); + updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM)); } /** @@ -161,7 +157,7 @@ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFact * @param desiredCapabilities take a look at {@link Capabilities} */ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { - super(httpClientFactory, substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM)); + super(httpClientFactory, updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM)); } /** @@ -170,7 +166,7 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapab * @param desiredCapabilities take a look at {@link Capabilities} */ public IOSDriver(Capabilities desiredCapabilities) { - super(substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM)); + super(updateDefaultPlatformName(desiredCapabilities, IOS_DEFAULT_PLATFORM)); } /** @@ -203,21 +199,6 @@ private class InnerTargetLocator extends RemoteTargetLocator { } } - /** - * Returns capabilities that were provided on instantiation. - * - * @return given {@link Capabilities} - */ - @Nullable - public Capabilities getCapabilities() { - MutableCapabilities capabilities = (MutableCapabilities) super.getCapabilities(); - if (capabilities != null) { - capabilities.setCapability(PLATFORM_NAME, IOS_PLATFORM); - } - return capabilities; - } - - class IOSAlert implements Alert { private final Alert alert; diff --git a/src/main/java/io/appium/java_client/windows/WindowsDriver.java b/src/main/java/io/appium/java_client/windows/WindowsDriver.java index acc1f4446..af559f12a 100644 --- a/src/main/java/io/appium/java_client/windows/WindowsDriver.java +++ b/src/main/java/io/appium/java_client/windows/WindowsDriver.java @@ -35,40 +35,40 @@ public class WindowsDriver FindsByWindowsAutomation { public WindowsDriver(HttpCommandExecutor executor, Capabilities capabilities) { - super(executor, substituteMobilePlatform(capabilities, WINDOWS)); + super(executor, updateDefaultPlatformName(capabilities, WINDOWS)); } public WindowsDriver(URL remoteAddress, Capabilities desiredCapabilities) { - super(remoteAddress, substituteMobilePlatform(desiredCapabilities, WINDOWS)); + super(remoteAddress, updateDefaultPlatformName(desiredCapabilities, WINDOWS)); } public WindowsDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { - super(remoteAddress, httpClientFactory, substituteMobilePlatform(desiredCapabilities, WINDOWS)); + super(remoteAddress, httpClientFactory, updateDefaultPlatformName(desiredCapabilities, WINDOWS)); } public WindowsDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) { - super(service, substituteMobilePlatform(desiredCapabilities, WINDOWS)); + super(service, updateDefaultPlatformName(desiredCapabilities, WINDOWS)); } public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { - super(service, httpClientFactory, substituteMobilePlatform(desiredCapabilities, WINDOWS)); + super(service, httpClientFactory, updateDefaultPlatformName(desiredCapabilities, WINDOWS)); } public WindowsDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities) { - super(builder, substituteMobilePlatform(desiredCapabilities, WINDOWS)); + super(builder, updateDefaultPlatformName(desiredCapabilities, WINDOWS)); } public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { - super(builder, httpClientFactory, substituteMobilePlatform(desiredCapabilities, WINDOWS)); + super(builder, httpClientFactory, updateDefaultPlatformName(desiredCapabilities, WINDOWS)); } public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { - super(httpClientFactory, substituteMobilePlatform(desiredCapabilities, WINDOWS)); + super(httpClientFactory, updateDefaultPlatformName(desiredCapabilities, WINDOWS)); } public WindowsDriver(Capabilities desiredCapabilities) { - super(substituteMobilePlatform(desiredCapabilities, WINDOWS)); + super(updateDefaultPlatformName(desiredCapabilities, WINDOWS)); } }