diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index be4900a23..dc7df8727 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -17,9 +17,8 @@ package io.appium.java_client; import static com.google.common.base.Preconditions.checkNotNull; -import static io.appium.java_client.remote.MobileCapabilityType.AUTOMATION_NAME; import static io.appium.java_client.remote.MobileCapabilityType.PLATFORM_NAME; -import static java.util.Optional.ofNullable; +import static org.apache.commons.lang3.StringUtils.containsIgnoreCase; import com.google.common.collect.ImmutableMap; @@ -72,9 +71,6 @@ public class AppiumDriver private URL remoteAddress; private RemoteLocationContext locationContext; private ExecuteMethod executeMethod; - private final String platformName; - private final String automationName; - /** * @param executor is an instance of {@link org.openqa.selenium.remote.HttpCommandExecutor} @@ -89,20 +85,6 @@ public AppiumDriver(HttpCommandExecutor executor, Capabilities capabilities) { locationContext = new RemoteLocationContext(executeMethod); super.setErrorHandler(errorHandler); this.remoteAddress = executor.getAddressOfRemoteServer(); - - Object capabilityPlatform1 = getCapabilities().getCapability(PLATFORM_NAME); - Object capabilityAutomation1 = getCapabilities().getCapability(AUTOMATION_NAME); - - Object capabilityPlatform2 = capabilities.getCapability(PLATFORM_NAME); - Object capabilityAutomation2 = capabilities.getCapability(AUTOMATION_NAME); - - platformName = ofNullable(ofNullable(super.getPlatformName()) - .orElse(capabilityPlatform1 != null ? String.valueOf(capabilityPlatform1) : null)) - .orElse(capabilityPlatform2 != null ? String.valueOf(capabilityPlatform2) : null); - automationName = ofNullable(ofNullable(super.getAutomationName()) - .orElse(capabilityAutomation1 != null ? String.valueOf(capabilityAutomation1) : null)) - .orElse(capabilityAutomation2 != null ? String.valueOf(capabilityAutomation2) : null); - this.setElementConverter(new JsonToMobileElementConverter(this, this)); } @@ -282,15 +264,8 @@ public URL getRemoteAddress() { return remoteAddress; } - @Override public String getPlatformName() { - return platformName; - } - - @Override public String getAutomationName() { - return automationName; - } - @Override public boolean isBrowser() { - return !getContext().toLowerCase().contains("NATIVE_APP".toLowerCase()); + return super.isBrowser() + && !containsIgnoreCase(getContext(), "NATIVE_APP"); } } diff --git a/src/main/java/io/appium/java_client/HasSessionDetails.java b/src/main/java/io/appium/java_client/HasSessionDetails.java index 3106b2905..cefdfdf3d 100644 --- a/src/main/java/io/appium/java_client/HasSessionDetails.java +++ b/src/main/java/io/appium/java_client/HasSessionDetails.java @@ -18,6 +18,7 @@ import static io.appium.java_client.MobileCommand.GET_SESSION; import static java.util.Optional.ofNullable; +import static java.util.stream.Collectors.toMap; import static org.apache.commons.lang3.StringUtils.isBlank; import com.google.common.collect.ImmutableMap; @@ -25,6 +26,7 @@ import org.openqa.selenium.remote.Response; import java.util.Map; +import javax.annotation.Nullable; public interface HasSessionDetails extends ExecutesMethod { /** @@ -34,26 +36,47 @@ public interface HasSessionDetails extends ExecutesMethod { @SuppressWarnings("unchecked") default Map getSessionDetails() { Response response = execute(GET_SESSION); + Map resultMap = Map.class.cast(response.getValue()); + + //this filtering was added to clear returned result. + //results of further operations should be simply interpreted by users return ImmutableMap.builder() - .putAll(Map.class.cast(response.getValue())).build(); + .putAll(resultMap.entrySet() + .stream().filter(entry -> { + String key = entry.getKey(); + Object value = entry.getValue(); + return !isBlank(key) + && value != null + && !isBlank(String.valueOf(value)); + }).collect(toMap(Map.Entry::getKey, Map.Entry::getValue))).build(); } - default Object getSessionDetail(String detail) { + default @Nullable Object getSessionDetail(String detail) { return getSessionDetails().get(detail); } - default String getPlatformName() { - Object platformName = getSessionDetail("platformName"); - return ofNullable(platformName != null ? String.valueOf(platformName) : null).orElse(null); + /** + * @return name of the current mobile platform. + */ + default @Nullable String getPlatformName() { + Object platformName = ofNullable(getSessionDetail("platformName")) + .orElseGet(() -> getSessionDetail("platform")); + return ofNullable(platformName).map(String::valueOf).orElse(null); } - default String getAutomationName() { - Object automationName = getSessionDetail("automationName"); - return ofNullable(automationName != null ? String.valueOf(automationName) : null).orElse(null); + /** + * @return current automation name. + */ + default @Nullable String getAutomationName() { + return ofNullable(getSessionDetail("automationName")) + .map(String::valueOf).orElse(null); } /** * @return is focus on browser or on native content. */ - boolean isBrowser(); + default boolean isBrowser() { + return ofNullable(getSessionDetail("browserName")) + .orElse(null) != null; + } }