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
Selenium: http://localhost:4444/wd/hub returns a NullPointerException, what am I doing incorrectly
提问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 时
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/hub
is 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 规范的适当负载