Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Couldn't create RemoteWebDriver with v 3.4.0. Null pointer exception in Grid server #4012

Closed
KirillSokolovsky opened this issue May 12, 2017 · 2 comments

Comments

@KirillSokolovsky
Copy link

Meta -

OS: Windows 10 | 8.1 | Server 2016

Selenium Version: 3.4.0

Browser: IE, Chrome, FF

Browser Version: latest

Selenium target platform: .Net

Actual Behavior -

This commit causes null pointer exception in Grid server that prevents any tries to create RemoteWebDriver.

Some details:
E.g. json sent as payload for command to Grid server to create Chrome instance (stat new session) is following:

{
 "desiredCapabilities":
 {
   "browserName":"chrome","version":"","platform":"ANY","javascriptEnabled":true,"chromeOptions":{"args":["disable-infobars"],"prefs":{"download.prompt_for_download":true,"download.default_directory":"NULL"}}
 },
 "capabilities":
 {
  "firstMatch":[{"browserName":"chrome","javascriptEnabled":true,"chromeOptions":{"args":["disable-infobars"],"prefs":{"download.prompt_for_download":true,"download.default_directory":"NULL"}}}]
 }

}

According to logic (of mentioned commit) if there is "capabilities" element in json, "desiredCapabilities" element should be found in "capabilities" and parsed as Map

if (map.has("capabilities")) {
return new JsonToBeanConverter().convert(Map.class, map.getAsJsonObject("capabilities").getAsJsonObject("desiredCapabilities"));
 }

But there is no inner element "desiredCapabilities" in "capabilities" (there is just element "firstMatch").
Verified with creating RemoteWebDriver for FF, Chrome and IE.
So this peace of code return null in all cases of sending request to create new session during creating remote webdriver.
And that cause null pointer exception in Grid.

Actually I could debug just .Net sources and possible I've missed some logic in java code.
But if I remove whole "capabilities" element from request payload all works fine.

Some stacktrace exception info extracted from response in format "{classname} > {method} > {line}":

"java.util.HashMap > putMapEntries > -1"
"java.util.HashMap > putAll > -1"
"org.openqa.selenium.remote.DesiredCapabilities > <init> > 55"
"org.openqa.grid.web.servlet.handler.RequestHandler > process > 104"
"org.openqa.grid.web.servlet.DriverServlet > process > 83"
"org.openqa.grid.web.servlet.DriverServlet > doPost > 67"
"javax.servlet.http.HttpServlet > service > 707"
"javax.servlet.http.HttpServlet > service > 790"
"org.seleniumhq.jetty9.servlet.ServletHolder > handle > 841"
"org.seleniumhq.jetty9.servlet.ServletHandler > doHandle > 543"
"org.seleniumhq.jetty9.server.handler.ScopedHandler > nextHandle > 188"
"org.seleniumhq.jetty9.server.session.SessionHandler > doHandle > 1584"
"org.seleniumhq.jetty9.server.handler.ScopedHandler > nextHandle > 188"
"org.seleniumhq.jetty9.server.handler.ContextHandler > doHandle > 1228"
"org.seleniumhq.jetty9.server.handler.ScopedHandler > nextScope > 168"
"org.seleniumhq.jetty9.servlet.ServletHandler > doScope > 481"
"org.seleniumhq.jetty9.server.session.SessionHandler > doScope > 1553"
"org.seleniumhq.jetty9.server.handler.ScopedHandler > nextScope > 166"
"org.seleniumhq.jetty9.server.handler.ContextHandler > doScope > 1130"
"org.seleniumhq.jetty9.server.handler.ScopedHandler > handle > 141"
"org.seleniumhq.jetty9.server.handler.HandlerWrapper > handle > 132"
"org.seleniumhq.jetty9.server.Server > handle > 564"
"org.seleniumhq.jetty9.server.HttpChannel > handle > 320"
"org.seleniumhq.jetty9.server.HttpConnection > onFillable > 251"
"org.seleniumhq.jetty9.io.AbstractConnection$ReadCallback > succeeded > 279"
"org.seleniumhq.jetty9.io.FillInterest > fillable > 112"
"org.seleniumhq.jetty9.io.ChannelEndPoint$2 > run > 124"
"org.seleniumhq.jetty9.util.thread.Invocable > invokePreferred > 122"
"org.seleniumhq.jetty9.util.thread.strategy.ExecutingExecutionStrategy > invoke > 58"
"org.seleniumhq.jetty9.util.thread.strategy.ExecuteProduceConsume > produceConsume > 201"
"org.seleniumhq.jetty9.util.thread.strategy.ExecuteProduceConsume > run > 133"
"org.seleniumhq.jetty9.util.thread.QueuedThreadPool > runJob > 672"
"org.seleniumhq.jetty9.util.thread.QueuedThreadPool$2 > run > 590"
"java.lang.Thread > run > -1"
@KirillSokolovsky
Copy link
Author

From code in RemoteWebDriver.cs line 1100
you could see that element "capabilities" with inner element "firstMatch" is added during any StartSession method call with any desiredCapabilities

protected void StartSession(ICapabilities desiredCapabilities)
        {
            Dictionary<string, object> parameters = new Dictionary<string, object>();
            parameters.Add("desiredCapabilities", this.GetLegacyCapabilitiesDictionary(desiredCapabilities));

            Dictionary<string, object> firstMatchCapabilities = this.GetCapabilitiesDictionary(desiredCapabilities);

            List<object> firstMatchCapabilitiesList = new List<object>();
            firstMatchCapabilitiesList.Add(firstMatchCapabilities);

            Dictionary<string, object> specCompliantCapabilities = new Dictionary<string, object>();
            specCompliantCapabilities["firstMatch"] = firstMatchCapabilitiesList;
            parameters.Add("capabilities", specCompliantCapabilities);

            Response response = this.Execute(DriverCommand.NewSession, parameters);

            Dictionary<string, object> rawCapabilities = (Dictionary<string, object>)response.Value;
            DesiredCapabilities returnedCapabilities = new DesiredCapabilities(rawCapabilities);
            this.capabilities = returnedCapabilities;
            this.sessionId = new SessionId(response.SessionId);
        }

@jimevans
Copy link
Member

Duplicate of #3808

@lock lock bot locked and limited conversation to collaborators Aug 18, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants