Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid enforcing the platform name while creating drivers #1164

Merged
merged 4 commits into from
Jun 25, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions src/main/java/io/appium/java_client/AppiumDriver.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -136,14 +137,34 @@ 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);
dc.setCapability(PLATFORM_NAME, newPlatform);
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) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

DesiredCapabilities dc = new DesiredCapabilities(originalCapabilities);
dc.setCapability(PLATFORM_NAME, defaultName);
return dc;
}
return originalCapabilities;
}

@Override
public List<T> findElements(By by) {
return super.findElements(by);
Expand Down Expand Up @@ -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);
}
}
}
35 changes: 9 additions & 26 deletions src/main/java/io/appium/java_client/android/AndroidDriver.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -40,15 +39,13 @@
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;

import java.net.URL;
import java.util.Collections;
import java.util.Map;
import javax.annotation.Nullable;

/**
* Android driver implementation.
Expand Down Expand Up @@ -84,7 +81,7 @@ public class AndroidDriver<T extends WebElement>
* @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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand Down Expand Up @@ -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) {
Expand Down
39 changes: 10 additions & 29 deletions src/main/java/io/appium/java_client/ios/IOSDriver.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -48,7 +46,6 @@
import java.time.Duration;
import java.util.Collections;
import java.util.Map;
import javax.annotation.Nullable;

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

private static final String IOS_PLATFORM = MobilePlatform.IOS;
private static final String IOS_DEFAULT_PLATFORM = MobilePlatform.IOS;

private StringWebSocketClient syslogClient;

Expand All @@ -82,7 +79,7 @@ public class IOSDriver<T extends WebElement>
* @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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand All @@ -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));
}

/**
Expand Down Expand Up @@ -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;
Expand Down
18 changes: 9 additions & 9 deletions src/main/java/io/appium/java_client/windows/WindowsDriver.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,40 +35,40 @@ public class WindowsDriver<T extends WebElement>
FindsByWindowsAutomation<T> {

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));
}
}