diff --git a/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java b/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java index 23e188b22..ad207f449 100644 --- a/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java +++ b/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java @@ -30,10 +30,16 @@ import java.util.List; import java.util.Map; +import static io.appium.java_client.MobileCommand.GET_SESSION; +import static java.util.stream.Collectors.toMap; +import static org.apache.commons.lang3.StringUtils.isBlank; + @SuppressWarnings({"unchecked", "rawtypes"}) abstract class DefaultGenericMobileDriver extends RemoteWebDriver implements MobileDriver { + private ImmutableMap sessionDetails = null; + public DefaultGenericMobileDriver(CommandExecutor executor, Capabilities desiredCapabilities) { super(executor, desiredCapabilities); } @@ -151,6 +157,32 @@ public List findElementsByXPath(String using) { return super.getMouse(); } + /** + * @return a map with values that hold session details. + * + */ + @SuppressWarnings("unchecked") + @Override + public synchronized Map getSessionDetails() { + if (sessionDetails == null) { + 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 + sessionDetails = ImmutableMap.builder() + .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(); + } + return sessionDetails; + } + @Override public String toString() { return String.format("%s: %s", getPlatformName(), diff --git a/src/main/java/io/appium/java_client/HasSessionDetails.java b/src/main/java/io/appium/java_client/HasSessionDetails.java index cefdfdf3d..8042f3139 100644 --- a/src/main/java/io/appium/java_client/HasSessionDetails.java +++ b/src/main/java/io/appium/java_client/HasSessionDetails.java @@ -16,41 +16,21 @@ package io.appium.java_client; -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; - -import org.openqa.selenium.remote.Response; import java.util.Map; import javax.annotation.Nullable; public interface HasSessionDetails extends ExecutesMethod { + + Map getSessionDetails(); + /** - * @return a map with values that hold session details. + * Get the value of the corresponding session detail. * + * @param detail The name of the details to get in the map. + * @return The value of the detail. */ - @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(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 @Nullable Object getSessionDetail(String detail) { return getSessionDetails().get(detail); } @@ -67,7 +47,7 @@ default Map getSessionDetails() { /** * @return current automation name. */ - default @Nullable String getAutomationName() { + default @Nullable String getAutomationName() { return ofNullable(getSessionDetail("automationName")) .map(String::valueOf).orElse(null); } diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractStubWebDriver.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractStubWebDriver.java index d5c5af560..b0096df05 100644 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractStubWebDriver.java +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractStubWebDriver.java @@ -23,6 +23,12 @@ import java.util.concurrent.TimeUnit; public abstract class AbstractStubWebDriver implements WebDriver, HasSessionDetails { + + @Override + public Map getSessionDetails() { + return null; + } + @Override public Response execute(String driverCommand, Map parameters) { return null;