Skip to content

Commit b335103

Browse files
#567 fix
1 parent 1d3e970 commit b335103

File tree

7 files changed

+32
-61
lines changed

7 files changed

+32
-61
lines changed

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

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ public class AppiumDriver<T extends WebElement>
7676
private ExecuteMethod executeMethod;
7777
private final String platformName;
7878
private final String automationName;
79-
private String currentContext;
8079

8180

8281
/**
@@ -92,35 +91,21 @@ public AppiumDriver(HttpCommandExecutor executor, Capabilities capabilities) {
9291
locationContext = new RemoteLocationContext(executeMethod);
9392
super.setErrorHandler(errorHandler);
9493
this.remoteAddress = executor.getAddressOfRemoteServer();
95-
final AppiumDriver<?> driver = this;
96-
97-
HasSessionDetails hasSessionDetails = new HasSessionDetails() {
98-
@Override
99-
public Response execute(String driverCommand, Map<String, ?> parameters) {
100-
return driver.execute(driverCommand, parameters);
101-
}
102-
103-
@Override
104-
public Response execute(String driverCommand) {
105-
return driver.execute(driverCommand);
106-
}
107-
};
10894

10995
Object capabilityPlatform1 = getCapabilities().getCapability(PLATFORM_NAME);
11096
Object capabilityAutomation1 = getCapabilities().getCapability(AUTOMATION_NAME);
11197

11298
Object capabilityPlatform2 = capabilities.getCapability(PLATFORM_NAME);
11399
Object capabilityAutomation2 = capabilities.getCapability(AUTOMATION_NAME);
114100

115-
platformName = ofNullable(ofNullable(hasSessionDetails.getPlatformName())
101+
platformName = ofNullable(ofNullable(super.getPlatformName())
116102
.orElse(capabilityPlatform1 != null ? String.valueOf(capabilityPlatform1) : null))
117103
.orElse(capabilityPlatform2 != null ? String.valueOf(capabilityPlatform2) : null);
118-
automationName = ofNullable(ofNullable(hasSessionDetails.getAutomationName())
104+
automationName = ofNullable(ofNullable(super.getAutomationName())
119105
.orElse(capabilityAutomation1 != null ? String.valueOf(capabilityAutomation1) : null))
120106
.orElse(capabilityAutomation2 != null ? String.valueOf(capabilityAutomation2) : null);
121107

122108
this.setElementConverter(new JsonToMobileElementConverter(this, this));
123-
currentContext = getContext();
124109
}
125110

126111
public AppiumDriver(URL remoteAddress, Capabilities desiredCapabilities) {
@@ -352,7 +337,6 @@ public void zoom(int x, int y) {
352337
@Override public WebDriver context(String name) {
353338
checkNotNull(name, "Must supply a context name");
354339
execute(DriverCommand.SWITCH_TO_CONTEXT, ImmutableMap.of("name", name));
355-
currentContext = name;
356340
return this;
357341
}
358342

@@ -430,9 +414,6 @@ public URL getRemoteAddress() {
430414
}
431415

432416
@Override public boolean isBrowser() {
433-
if (super.isBrowser()) {
434-
return true;
435-
}
436-
return !currentContext.toLowerCase().contains("NATIVE_APP".toLowerCase());
417+
return !getContext().toLowerCase().contains("NATIVE_APP".toLowerCase());
437418
}
438419
}

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,5 @@ default String getAutomationName() {
5555
/**
5656
* @return is focus on browser or on native content.
5757
*/
58-
default boolean isBrowser() {
59-
Object browserName = getSessionDetail("browserName");
60-
return browserName != null && !isBlank(String.valueOf(browserName));
61-
}
58+
boolean isBrowser();
6259
}

src/main/java/io/appium/java_client/internal/ElementMap.java

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

1919
import com.google.common.collect.ImmutableMap;
2020

21+
import io.appium.java_client.HasSessionDetails;
2122
import io.appium.java_client.MobileElement;
2223
import io.appium.java_client.android.AndroidElement;
2324
import io.appium.java_client.ios.IOSElement;
@@ -69,14 +70,17 @@ public Class<? extends RemoteWebElement> getElementClass() {
6970
}
7071

7172
/**
72-
* @param platform platform name.
73-
* @param automation automation name.
73+
* @param hasSessionDetails something that implements {@link io.appium.java_client.HasSessionDetails}.
7474
* @return subclass of {@link io.appium.java_client.MobileElement} that convenient to current session details.
7575
*/
76-
public static Class<? extends RemoteWebElement> getElementClass(String platform, String automation) {
76+
public static Class<? extends RemoteWebElement> getElementClass(HasSessionDetails hasSessionDetails) {
77+
if (hasSessionDetails == null) {
78+
return RemoteWebElement.class;
79+
}
7780
ElementMap element = Optional.ofNullable(mobileElementMap.get(String
78-
.valueOf(automation).toLowerCase().trim()))
79-
.orElse(mobileElementMap.get(String.valueOf(platform).toLowerCase().trim()));
81+
.valueOf(hasSessionDetails.getAutomationName()).toLowerCase().trim()))
82+
.orElse(mobileElementMap
83+
.get(String.valueOf(hasSessionDetails.getPlatformName()).toLowerCase().trim()));
8084
if (element == null) {
8185
return RemoteWebElement.class;
8286
}

src/main/java/io/appium/java_client/internal/JsonToMobileElementConverter.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,7 @@ public Object apply(Object result) {
8787

8888
protected RemoteWebElement newMobileElement() {
8989
Class<? extends RemoteWebElement> target;
90-
if (hasSessionDetails.isBrowser()) {
91-
target = getElementClass(null, null);
92-
} else {
93-
target = getElementClass(hasSessionDetails.getPlatformName(),
94-
hasSessionDetails.getAutomationName());
95-
}
96-
90+
target = getElementClass(hasSessionDetails);
9791
try {
9892
Constructor<? extends RemoteWebElement> constructor = target.getDeclaredConstructor();
9993
constructor.setAccessible(true);

src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,8 @@ public class AppiumFieldDecorator implements FieldDecorator {
7272
private final String platform;
7373
private final String automation;
7474
private final TimeOutDuration timeOutDuration;
75+
private final HasSessionDetails hasSessionDetails;
7576

76-
private static String extractSessionData(WebDriver driver, Supplier<String> dataSupplier) {
77-
if (driver == null) {
78-
return null;
79-
}
80-
81-
if (!(driver instanceof HasSessionDetails)) {
82-
return null;
83-
}
84-
85-
return String.valueOf(dataSupplier.get());
86-
}
8777

8878
public AppiumFieldDecorator(SearchContext context, long implicitlyWaitTimeOut,
8979
TimeUnit timeUnit) {
@@ -100,10 +90,17 @@ public AppiumFieldDecorator(SearchContext context, long implicitlyWaitTimeOut,
10090
*/
10191
public AppiumFieldDecorator(SearchContext context, TimeOutDuration timeOutDuration) {
10292
this.originalDriver = unpackWebDriverFromSearchContext(context);
103-
platform = extractSessionData(originalDriver, () ->
104-
HasSessionDetails.class.cast(originalDriver).getPlatformName());
105-
automation = extractSessionData(originalDriver, () ->
106-
HasSessionDetails.class.cast(originalDriver).getAutomationName());
93+
if (originalDriver == null
94+
|| !HasSessionDetails.class.isAssignableFrom(originalDriver.getClass())) {
95+
hasSessionDetails = null;
96+
platform = null;
97+
automation = null;
98+
} else {
99+
hasSessionDetails = HasSessionDetails.class.cast(originalDriver);
100+
platform = hasSessionDetails.getPlatformName();
101+
automation = hasSessionDetails.getAutomationName();
102+
}
103+
107104
this.timeOutDuration = timeOutDuration;
108105

109106
defaultElementFieldDecoracor = new DefaultFieldDecorator(
@@ -221,6 +218,6 @@ private Object decorateWidget(Field field) {
221218

222219
private WebElement proxyForAnElement(ElementLocator locator) {
223220
ElementInterceptor elementInterceptor = new ElementInterceptor(locator, originalDriver);
224-
return getEnhancedProxy(getElementClass(platform, automation), elementInterceptor);
221+
return getEnhancedProxy(getElementClass(hasSessionDetails), elementInterceptor);
225222
}
226223
}

src/test/java/io/appium/java_client/appium/element/generation/android/AndroidElementGeneratingTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import io.appium.java_client.remote.MobilePlatform;
1414
import org.junit.Test;
1515
import org.openqa.selenium.remote.DesiredCapabilities;
16-
import org.openqa.selenium.remote.RemoteWebElement;
1716

1817
import java.io.File;
1918
import java.util.function.Supplier;
@@ -49,7 +48,7 @@ public class AndroidElementGeneratingTest extends BaseElementGenerationTest {
4948
}, (by, aClass) -> {
5049
driver.context("WEBVIEW_io.appium.android.apis");
5150
return commonPredicate.test(by, aClass);
52-
}, tagName("a"), RemoteWebElement.class));
51+
}, tagName("a"), AndroidElement.class));
5352
}
5453

5554
@Test public void whenAndroidBrowserIsLaunched() {
@@ -65,6 +64,6 @@ public class AndroidElementGeneratingTest extends BaseElementGenerationTest {
6564
}, (by, aClass) -> {
6665
driver.get("https://www.google.com");
6766
return commonPredicate.test(by, aClass);
68-
}, className("gsfi"), RemoteWebElement.class));
67+
}, className("gsfi"), AndroidElement.class));
6968
}
7069
}

src/test/java/io/appium/java_client/appium/element/generation/ios/IOSElementGenerationTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import org.junit.Test;
1515
import org.openqa.selenium.Capabilities;
1616
import org.openqa.selenium.remote.DesiredCapabilities;
17-
import org.openqa.selenium.remote.RemoteWebElement;
1817

1918
import java.io.File;
2019
import java.util.function.Function;
@@ -89,15 +88,15 @@ public void whenIOSNativeAppIsLaunched() {
8988
}
9089
});
9190
return commonPredicate.test(by, aClass);
92-
}, className("gsfi"), RemoteWebElement.class));
91+
}, className("gsfi"), IOSElement.class));
9392
}
9493

9594
@Test public void whenIOSBrowserIsLaunched() {
9695
assertTrue(check(serverBrowserCapabilitiesSupplier,
9796
clientBrowserCapabilitiesSupplier, (by, aClass) -> {
9897
driver.get("https://www.google.com");
9998
return commonPredicate.test(by, aClass);
100-
}, className("gsfi"), RemoteWebElement.class));
99+
}, className("gsfi"), IOSElement.class));
101100
}
102101

103102
@Test
@@ -117,6 +116,6 @@ public void whenIOSNativeAppIsLaunched2() {
117116
}, clientBrowserCapabilitiesSupplier, (by, aClass) -> {
118117
driver.get("https://www.google.com");
119118
return commonPredicate.test(by, aClass);
120-
}, className("gsfi"), RemoteWebElement.class));
119+
}, className("gsfi"), IOSElement.class));
121120
}
122121
}

0 commit comments

Comments
 (0)