Skip to content

Commit d16ecd2

Browse files
cjayswalbarancev
authored andcommitted
[java] Fixing null pointer exception in RemoteWebDriver instantiated by no-arg constructor.
When driver object created using default constructor, capabilities is null, results in null pointer exception in executeScript(). Signed-off-by: Alexei Barantsev <[email protected]>
1 parent 67dd6ac commit d16ecd2

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

java/client/src/org/openqa/selenium/remote/RemoteWebDriver.java

+9-4
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public class RemoteWebDriver implements WebDriver, JavascriptExecutor, HasInputD
112112

113113
// For cglib
114114
protected RemoteWebDriver() {
115-
init(new ImmutableCapabilities());
115+
this.capabilities=init(new ImmutableCapabilities());
116116
}
117117

118118
public RemoteWebDriver(Capabilities capabilities) {
@@ -129,7 +129,7 @@ public RemoteWebDriver(CommandExecutor executor, Capabilities capabilities) {
129129
}
130130
this.executor = executor;
131131

132-
init(capabilities);
132+
capabilities=init(capabilities);
133133

134134
if (executor instanceof NeedsLocalLogs) {
135135
((NeedsLocalLogs) executor).setLocalLogs(localLogs);
@@ -153,7 +153,7 @@ public static RemoteWebDriverBuilder builder() {
153153
return new RemoteWebDriverBuilder();
154154
}
155155

156-
private void init(Capabilities capabilities) {
156+
private Capabilities init(Capabilities capabilities) {
157157
capabilities = capabilities == null ? new ImmutableCapabilities() : capabilities;
158158

159159
logger.addHandler(LoggingHandler.getInstance());
@@ -185,6 +185,8 @@ private void init(Capabilities capabilities) {
185185
LoggingHandler.getInstance(), logTypesToInclude);
186186
localLogs = LocalLogs.getCombinedLogsHolder(clientLogs, performanceLogger);
187187
remoteLogs = new RemoteLogs(executeMethod, localLogs);
188+
189+
return capabilities;
188190
}
189191

190192
/**
@@ -286,6 +288,9 @@ protected void setCommandExecutor(CommandExecutor executor) {
286288

287289
@Override
288290
public Capabilities getCapabilities() {
291+
if(capabilities == null){
292+
return new ImmutableCapabilities();
293+
}
289294
return capabilities;
290295
}
291296

@@ -480,7 +485,7 @@ public Object executeAsyncScript(String script, Object... args) {
480485
}
481486

482487
private boolean isJavascriptEnabled() {
483-
return capabilities.is(SUPPORTS_JAVASCRIPT);
488+
return getCapabilities().is(SUPPORTS_JAVASCRIPT);
484489
}
485490

486491
@Override

java/client/test/org/openqa/selenium/remote/RemoteWebDriverUnitTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -785,4 +785,10 @@ public void canHandleResponseWithErrorCodeButNoExceptionReturnedByCommandExecuto
785785
fixture.verifyCommands(
786786
new CommandPayload(DriverCommand.GET_CURRENT_URL, emptyMap()));
787787
}
788+
789+
@Test
790+
public void noArgConstuctorEmptyCapabilitiesTest() {
791+
RemoteWebDriver driver = new RemoteWebDriver() {}; // anonymous subclass
792+
assertThat(driver.getCapabilities()).isEqualTo(new ImmutableCapabilities());
793+
}
788794
}

0 commit comments

Comments
 (0)