4

私は、MSTestへのコマンドライン呼び出しによって実行されている一連のSelenium WebDriver(Selenium RCではなく、Selenium-Serverを使用していない)テストに取り組んでいます。テストを計画しているブラウザ(現時点ではChrome、Firefox、IE9)ごとにテストクラスに分割しました。各テストクラスには、テスト対象のシステムにログインして、要求されたテストを実行する起動メソッドがあります。 WebDriver.Quit()を使用してブラウザを閉じるTearDownメソッド。

私の開発マシンではすべてが厄介ですが、ビルドマシンでは、クラスの初期化/起動メソッドが正常に実行され、サイトにログインしますが、最初の実際のテストが開始されるとすぐに、テストランナーはエラーメッセージで閉じます。

OpenQA.Selenium.WebDriverException: Unexpected error. System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:59982

明らかに、テストされているブラウザに応じてポートが変わります。スイート全体を実行すると、IE、Firefox、Chromeのテストで異なるポートでエラーが発生します-ブラウザごとに2つのエラーが発生します(スイートには現在、ブラウザごとに2つのテストがあるため)

ビルドマシンではWindowsファイアウォールがオフになっており、テストを実行する前にnetstatを確認すると、ポートが使用されていないことがわかります。テストをデバッグし、スタートアップコードの実行後、テストの実行前に停止した場合、もちろんポートは使用中です。127.0.0.1とlocalhostも同じです。

コマンドラインからテストを呼び出すか、VSテストツールを使用してVisual Studio内からテストを実行/デバッグするか、Process.Start()を介してMSTestを呼び出すコンソールアプリを実行するかどうかにかかわらず、同じエラーが発生します。例外は、最初のFindElement()呼び出しでスローされます。

開発ボックスではなくビルドマシンでこれが失敗する理由をどこで調べ始めることができますか?

4

2 に答える 2

6

ここでの問題は、起動時にいくつかのより堅牢なエラー処理を実装しようとして、ログイン コードにラップされた try/catch の finally ブロックに Teardown コードへの呼び出しを配置することでした。テスト ハーネスがログインを完了するとすぐにWebDriver インスタンスを閉じてクリーンアップしていたので、テストが実行されたときに、通信する WebDriver がありませんでした。

私の開発マシンで「同じ」コードを見ていると、実際に実行されていたライブラリにはそのブロックが含まれていなかったのではないかと思います。

于 2012-11-08T17:25:13.600 に答える
0

Visual Studioからアプリケーションを実行すると、特定のポートでリッスンしているサーバーが起動します。あなたの場合59982。

テストを実行する前に、実際にWebアプリケーションをテスト環境で単独で実行する必要があります。

開発マシンでは、アプリケーションはそのポートで実行されています。私はあなたのリモートマシンではそうではないと推測しています。

于 2012-11-07T19:26:18.637 に答える