java Selenium:http://localhost:4444/wd/hub 返回 NullPointerException,我做错了什么

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/41682885/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 06:02:52  来源:igfitidea点击:

Selenium: http://localhost:4444/wd/hub returns a NullPointerException, what am I doing incorrectly

javac#seleniumselenium-webdriver

提问by John Peters

Given: Attempting to use a RemoteWebDriver in C# with this code.

鉴于:尝试在 C# 中使用带有此代码的 RemoteWebDriver。

var url = new Uri("http://localhost:4444/wd/hub");
var wd = new RemoteWebDriver(url, DesiredCapabilities.Chrome());

The new RemoteWebDriver code above doesn't respond until there's a timeout...

上面的新 RemoteWebDriver 代码在超时之前不会响应......

More Details

更多细节

I've started my Hub with these parameters to the Selenium Server:

我已经使用这些参数启动了我的集线器到 Selenium 服务器:

-jar "C:\SomeFolder\selenium-server-standalone-3.0.1.jar" -port 4444 -role hub

And registered a Node using these parms..

并使用这些参数注册了一个节点..

-jar "C:\SomeFolder\selenium-server-standalone-3.0.1.jar" -role node -hub http://localhost:4444/grid/register -port 9662 

Debugging

调试

If I type in this URL after starting the Hub, It shows there is a registered Node:

如果我在启动集线器后输入这个 URL,它显示有一个注册的节点:

http://location:4444/grid/console

http://location:4444/grid/console

But when typing in this url after starting the Hub

但是在启动 Hub 后输入这个 url 时

http://localhost:4444/wd/hub

http://localhost:4444/wd/hub

The browser shows this java (json) stack trace pointing to ExternalSessionKey.java

浏览器显示此 java (json) 堆栈跟踪指向 ExternalSessionKey.java

{"status":13,"value":{"class":"java.lang.NullPointerException","stackTrace":[{"fileName":"ExternalSessionKey.java","className":"org.openqa.grid.internal.ExternalSessionKey","methodName":"fromWebDriverRequest","lineNumber":77},{"fileName":"WebDriverRequest.java","className":"org.openqa.grid.web.servlet.handler.WebDriverRequest","methodName":"extractSession","lineNumber":62},{"fileName":"RequestHandler.java","className":"org.openqa.grid.web.servlet.handler.RequestHandler","methodName":"getSession","lineNumber":231},{"fileName":"RequestHandler.java","className":"org.openqa.grid.web.servlet.handler.RequestHandler","methodName":"process","lineNumber":118},{"fileName":"DriverServlet.java","className":"org.openqa.grid.web.servlet.DriverServlet","methodName":"process","lineNumber":83},{"fileName":"DriverServlet.java","className":"org.openqa.grid.web.servlet.DriverServlet","methodName":"doGet","lineNumber":61},{"fileName":"HttpServlet.java","className":"javax.servlet.http.HttpServlet","methodName":"service","lineNumber":687},{"fileName":"HttpServlet.java","className":"javax.servlet.http.HttpServlet","methodName":"service","lineNumber":790},{"fileName":"ServletHolder.java","className":"org.seleniumhq.jetty9.servlet.ServletHolder","methodName":"handle","lineNumber":808},{"fileName":"ServletHandler.java","className":"org.seleniumhq.jetty9.servlet.ServletHandler","methodName":"doHandle","lineNumber":587},{"fileName":"SessionHandler.java","className":"org.seleniumhq.jetty9.server.session.SessionHandler","methodName":"doHandle","lineNumber":221},{"fileName":"ContextHandler.java","className":"org.seleniumhq.jetty9.server.handler.ContextHandler","methodName":"doHandle","lineNumber":1127},{"fileName":"ServletHandler.java","className":"org.seleniumhq.jetty9.servlet.ServletHandler","methodName":"doScope","lineNumber":515},{"fileName":"SessionHandler.java","className":"org.seleniumhq.jetty9.server.session.SessionHandler","methodName":"doScope","lineNumber":185},{"fileName":"ContextHandler.java","className":"org.seleniumhq.jetty9.server.handler.ContextHandler","methodName":"doScope","lineNumber":1061},{"fileName":"ScopedHandler.java","className":"org.seleniumhq.jetty9.server.handler.ScopedHandler","methodName":"handle","lineNumber":141},{"fileName":"HandlerWrapper.java","className":"org.seleniumhq.jetty9.server.handler.HandlerWrapper","methodName":"handle","lineNumber":97},{"fileName":"Server.java","className":"org.seleniumhq.jetty9.server.Server","methodName":"handle","lineNumber":499},{"fileName":"HttpChannel.java","className":"org.seleniumhq.jetty9.server.HttpChannel","methodName":"handle","lineNumber":310},{"fileName":"HttpConnection.java","className":"org.seleniumhq.jetty9.server.HttpConnection","methodName":"onFillable","lineNumber":257},{"fileName":"AbstractConnection.java","className":"org.seleniumhq.jetty9.io.AbstractConnection","methodName":"run","lineNumber":540},{"fileName":"QueuedThreadPool.java","className":"org.seleniumhq.jetty9.util.thread.QueuedThreadPool","methodName":"runJob","lineNumber":635},{"fileName":"QueuedThreadPool.java","className":"org.seleniumhq.jetty9.util.thread.QueuedThreadPool","methodName":"run","lineNumber":555},{"className":"java.lang.Thread","methodName":"run","lineNumber":-1}]}}

Can anyone interpret the Stack Trace for me, and what to do to get this working?

任何人都可以为我解释堆栈跟踪,以及如何使其工作?

Thanks!

谢谢!

采纳答案by John Peters

The symptom of the issue was a connection timeout exception in this code.

问题的症状是此代码中的连接超时异常。

var url = new Uri("http://localhost:4444/wd/hub");
var wd = new RemoteWebDriver(url, DesiredCapabilities.Chrome());

Root Cause

根本原因

It was being caused because, during my debugging session; I ended the program prior to this statement:

这是因为,在我的调试会话期间;我在此声明之前结束了程序:

wd.Quit();

Because my Hub was configured for only one node, the prior debug session still had an orphaned session on the hub. Rebooting the Hub fixed that problem, but there's also the ability to configure as many Nodes as one wants.

因为我的集线器只配置了一个节点,所以之前的调试会话在集线器上仍然有一个孤立的会话。重新启动集线器解决了这个问题,但也可以配置任意数量的节点。

Another fault of the Hub logic is that orphaned nodes are not cleaned up in the proper timeout as set in the configuration. This causes orphaned nodes to remain alive for far longer than the timeout suggests... Check out the configuration options to see for yourself. There should be an inactivity timer that says "if no activity in x secconds" kill the session.

集线器逻辑的另一个错误是孤立节点没有在配置中设置的正确超时时间内清理。这会导致孤立节点保持活动状态的时间比超时建议的时间长得多……请查看配置选项以亲自查看。应该有一个不活动计时器,上面写着“如果在 x 秒内没有活动”会终止会话。

One Solution

一个解决方案

Make sure that (at a minimum) you configure your hubs to allow more nodes that you need while debugging your solution.

确保(至少)您将集线器配置为在调试解决方案时允许更多节点。

回答by Krishnan Mahadevan

There is nothing wrong at your end.

你的结局没有错。

The URL http://localhost:4444/wd/hubis designed such that it expects a PAYLOAD with your operation. Since you haven't provided the desired payload you are seeing a NullPointerException.

URLhttp://localhost:4444/wd/hub的设计使其期望在您的操作中收到 PAYLOAD。由于您尚未提供所需的有效负载,因此您会看到 NullPointerException。

This URL is not supposed to be opened up in a browser. Its meant to be consumed via Http operations with a proper payload that adheres to the Selenium w3c spec

不应在浏览器中打开此 URL。它旨在通过 Http 操作使用符合Selenium w3c 规范的适当负载