2017-01-16 20 views
2

Given:このコードでC#でRemoteWebDriverを使用しようとしています。Selenium:http:// localhost:4444/wd/hubはNullPointerExceptionを返します。私は間違って何をしていますか。

:タイムアウトがありますまで

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

の上に新しいRemoteWebDriverコードは、私がSeleniumサーバーにこれらのパラメータを使用して、私のハブを始めました...

詳細

を応答しません。

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

そして

。これらのPARMSを使用してノードを登録
-jar "C:\SomeFolder\selenium-server-standalone-3.0.1.jar" -role node -hub http://localhost:4444/grid/register -port 9662 

私はハブを開始した後、このURLを入力すると、それが登録されているノードがあることを示し

のデバッグ:

http://location:4444/grid/console

しかし、ハブを開始した後、このURLを入力するとき

http://localhost:4444/wd/hub

ブラウザは、誰もが私のためにスタックトレースを解釈できるこの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$2","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$3","methodName":"run","lineNumber":555},{"className":"java.lang.Thread","methodName":"run","lineNumber":-1}]}} 

を指して示しており、どのようなこの作業を取得するために行うには?

ありがとうございます!

答えて

0

このコードでは、問題の症状は接続タイムアウトの例外でした。

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

根本原因

それは私のデバッグセッション中に、ために発生していました。私は前にこの声明にプログラムを終了:

wd.Quit(); 

私のハブは、一つのノードのみのために設定されているため、前のデバッグセッションがまだハブの孤立したセッションを持っていました。ハブをリブートするとその問題は解決しましたが、必要な数のノードを構成することもできます。

ハブロジックのもう1つの障害は、孤立ノードが構成で設定された正しいタイムアウトでクリーンアップされないことです。これは、孤立したノードがタイムアウトよりもはるかに長く生き続けることを示唆しています...設定オプションを確認して自分で確認してください。 "x seccondsのアクティビティがない場合"と言っている休止タイマーがセッションを強制終了するはずです。

一つの解決策

(最低でも)あなたがあなたのソリューションをデバッグしながら、あなたが必要とする複数のノードを許可するようにハブを構成していることを確認してください。

+0

'Hubロジックのもう一つの障害は、孤立したノードが設定で設定された適切なタイムアウトでクリーンアップされないということです。これにより、孤立したノードは、タイムアウトよりもはるかに長く生き続けるようになります...自分で確認するために設定オプションをチェックしてください。 「x seccondsにアクティビティがないとセッションを終了しない」という非アクティブタイマーがあるはずです 私は同様の問題がありますが、これを解決する方法を教えていただけますか? https://stackoverflow.com/questions/47427026/orphaned-nodes-are-not-cleaned-up-after-waiting-more-than-the-specified-duration –

2

最後には何も問題はありません。

URL http://localhost:4444/wd/hubは、あなたの操作でPAYLOADを期待するように設計されています。目的のペイロードを提供していないので、NullPointerExceptionが表示されています。

このURLはブラウザで開くことは想定されていません。 Selenium w3c spec

+0

[OK] URLを何も入力しないと、Webブラウザのスタックトレースについて説明しています。しかし、実際の問題は、私が新しいRemoteWebDriverを作成しようとしている時間を扱っています。その部分にヒントはありますか? –

+0

RemoteWebDriverのインスタンス化時に発生するエラーの詳細をplsで共有できますか? –

+0

私は常にタイムアウトを取得していました。理由は、私のデバッグ環境では、ブラウザのリクエストを後続のセッションで実行していたからです。テストを開始するたびに、ハブとノードをリセットする必要があることを修正しました。プロダクションモードでは、各IWebdriverはテスト終了時に閉じられていました。 –

関連する問題