Skip to content

Commit 9755c98

Browse files
etanolmykola-mokhnach
authored andcommitted
Protect against NullPointerException when using getCapabilities. (#1094)
The WebDriver capabilities field remains as null until the new-session command succeeds, returning the capabilities stated by the server. If an exception happens during session creation, some handling code may try to convert the WebDriver instance to string. In which case, the conversion would throw a NullPointerException, masking the real failure. This change just protects against the NullPointerException, so the real session initiation failures can be easily troubleshooted.
1 parent c5628d4 commit 9755c98

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,8 @@ public List findElementsByXPath(String using) {
157157

158158
@Override
159159
public String toString() {
160+
Capabilities capabilities = getCapabilities();
160161
return String.format("%s, Capabilities: %s", getClass().getCanonicalName(),
161-
getCapabilities().asMap().toString());
162+
capabilities != null ? capabilities.asMap().toString() : "null");
162163
}
163164
}

src/main/java/io/appium/java_client/android/AndroidDriver.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import java.net.URL;
4848
import java.util.Collections;
4949
import java.util.Map;
50+
import javax.annotation.Nullable;
5051

5152
/**
5253
* Android driver implementation.
@@ -206,9 +207,12 @@ public AndroidBatteryInfo getBatteryInfo() {
206207
*
207208
* @return given {@link Capabilities}
208209
*/
210+
@Nullable
209211
public Capabilities getCapabilities() {
210212
MutableCapabilities capabilities = (MutableCapabilities) super.getCapabilities();
211-
capabilities.setCapability(PLATFORM_NAME, ANDROID_PLATFORM);
213+
if (capabilities != null) {
214+
capabilities.setCapability(PLATFORM_NAME, ANDROID_PLATFORM);
215+
}
212216
return capabilities;
213217
}
214218

src/main/java/io/appium/java_client/ios/IOSDriver.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import java.time.Duration;
4949
import java.util.Collections;
5050
import java.util.Map;
51+
import javax.annotation.Nullable;
5152

5253
/**
5354
* iOS driver implementation.
@@ -207,9 +208,12 @@ private class InnerTargetLocator extends RemoteTargetLocator {
207208
*
208209
* @return given {@link Capabilities}
209210
*/
211+
@Nullable
210212
public Capabilities getCapabilities() {
211213
MutableCapabilities capabilities = (MutableCapabilities) super.getCapabilities();
212-
capabilities.setCapability(PLATFORM_NAME, IOS_PLATFORM);
214+
if (capabilities != null) {
215+
capabilities.setCapability(PLATFORM_NAME, IOS_PLATFORM);
216+
}
213217
return capabilities;
214218
}
215219

0 commit comments

Comments
 (0)