Seleniumを何ヶ月も使用していますが、これを使用して社内のテストプロセスの一部を自動化しています。スクリプトは問題なく通過しています。最近、FF 27.01を使用してC#2.40.0 webdriverにアップグレードしましたが、スクリプトがランダムな場所で次のエラーで失敗します。
[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
----> System.Net.WebException : The operation has timed out
[09:01:20]
[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
----> System.Net.WebException : The operation has timed out
at OpenQA.Selenium.Support.UI.DefaultWait`1.PropagateExceptionIfNotIgnored(Exception e)
at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
at Portal.Test.Helpers.Process_Bookings.OpenBookings.SelectBooking(String bookingnumber)
at Portal.SmokeTest.SmokeRunTest.Booking() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 68
--WebException
at System.Net.HttpWebRequest.GetResponse()
at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
--TearDown
at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(Command commandToExecute)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebDriver.Close()
at Portal.Test.Helpers.Setup.CloseWebdriver()
at Portal.SmokeTest.SmokeRunTest.TearDown() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 162
--WebException
at System.Net.HttpWebRequest.GetResponse()
at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
私が管理した最新のエラーは、1行のコードまで追跡できました。
_setup.driver.FindElement(By.XPath("//button[@class='buttonSmall lockBookingButton']")).Click();
厄介なことは、ローカルマシンでテストを実行する場合と同じようにデバッグをパスするように、問題を解決しようとすることが困難であることです。さらに、テストを実行しているビルドマシンでNUNITランナーを介して実行すると、テストも成功します。 Teamcityを使用する場合、自動ビルド実行プロセスの一部としてのみ失敗するようです。私が言ったように、これは何ヶ月も前から問題なく実行されており、変更されたのはSelenium Webdriverキットだけです。
デバッグ中にこの問題を経験しましたが、Click()
行のコードが呼び出されると、Firefoxがロックアップしたように見え、テストを停止するだけでFirefoxを続行できました。ここには、Webdriverソースの変更など、いくつかの提案がありますか?他の誰かが提案を提供できる場合は、可能であればそのルートをたどらないようにします。
new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));
上記のコード行を使用してブラウザを起動します。それは私のために働いた。
Chromeドライバー(v2.23)を使用して、TeamCityを介してテストを実行すると、同様の問題が発生しました。 「no-sandbox」フラグをChromeオプションに追加することで問題を修正できました。
var options = new ChromeOptions();
options.AddArgument("no-sandbox");
FFドライバーに同様のオプションがあるかどうかはわかりません。私が理解していることから、この問題は、SYSTEMアカウントでSeleniumを実行しているTeamCityと関係があります。
私はこの問題に数か月前に(click()
コマンドでも)初めて遭遇しました。それ以来、私にとっては問題でした。 .NET Seleniumバインディングに関する何らかの問題のようです。 IEドライバーで動作する男によるこのブログ投稿は、何が起こっているのかを説明するのに役立ちます。
http://jimevansmusic.blogspot.com/2012/11/net-bindings-whaddaymean-no-response.html
残念ながら、この問題の本当の解決策はないようです。この問題がSelenium開発者に提起されたときはいつでも( こちら を参照)、これは 典型的な応答です :
再現可能なシナリオが必要です。このシナリオには、問題を再現できるサンプルページまたは公開サイトのページへのリンクを含める必要があります。
一貫して再現可能なテストケースを送信できる場合、このバグを永久に解決するのに非常に役立ちます。
そうは言っても、おそらくこの間、この回避策を試すことができます。 click()
にしようとしているHTMLボタンにJavascriptを含むonclick
属性がある場合、 JavascriptExecutor を使用して実行することを検討してくださいclick()
コマンドを呼び出すのではなく、そのコードを直接。 onclick
Javascriptを実行すると、一部のテストに直接パスできることがわかりました。
同様の問題が発生しました。ドライバーのコンストラクターでより多くの時間を設定してみてください。
var timespan = TimeSpan.FromMinutes(3);
var driver = new FirefoxDriver(binary, profile, timeSpan);
私の場合、ボタンのタイプはsubmit
ではなくbutton
であり、Click
をSumbit
に変更すると、すべてうまくいきます。以下のようなもの、
driver.FindElement(By.Id("btnLogin")).Click();
から
driver.FindElement(By.Id("btnLogin")).Submit();
へ
ところで、私はこの投稿のすべての答えを試されましたが、私のために働いていません。
この問題は、Webドライバーオブジェクトにアクセスしようとしたときに発生すると思います
1)ウィンドウが閉じており、まだ親に切り替えていない
2)まだ準備ができていないウィンドウに切り替えて、切り替えてから更新された
windowhandles.count
が期待するものになるのを待つことは、ページのコンテンツもdocument.readyも考慮しません。私はまだこの問題の解決策を探しています
私の場合、chrome更新フォルダーを削除したためです。 chrome再インストール後、正常に動作しています。
問題は、ビルド環境でClick()
の評価がタイムアウトすることです。Click()
で何が起こるかを掘り下げたい場合があります。
また、ネットワーク速度などに応じて評価に時間がかかることがあるため、Click()
の再試行を追加してみてください。
私の場合、チームビルドサーバーでこのエラーが発生しています。テストは、ローカルの開発マシンで機能しました。
問題は、ターゲットWebサイトがビルドサーバーで正しく構成されていないため、ブラウザーを正しく開けなかったことです。
chromeドライバーを使用していましたが、それが違いを生むかどうかわかりません。
selenium.WebDriver.ChromeDriverを2.40.0から2.27.0に変更しても問題ありません
私の場合、問題は SendKeys()and Remote Desktop にありました。私がこれまでに持っている回避策を投稿する:
VSphereでホストされ、RDPで管理されているノードでJenkinsジョブの一部として実行すると失敗するSeleniumテストがありました。いくつかのトラブルシューティングの後、リモートデスクトップが接続されてフォーカスされている場合は成功しますが、リモートデスクトップが切断されているか最小化されている場合は例外で失敗します。
回避策として、RDPの代わりにvSphereコンソールを使用してログインし、vSphereを閉じた後でもテストが失敗しなくなりました。これは回避策ですが、RDPを介してログインせず、常にvSphere Consoleを介してのみ管理するように注意する必要があります。
同じ問題がありました。この場合、ブラウザはログインポップアップ(Windows認証)によってブロックされたため、60秒後に戻りません。 WindowsアカウントChromeに正しいアクセス権を追加すると、問題が解決しました。
new FirefoxDriver(binary, profile, timeSpan)
は廃止されました。
代わりにnew FirefoxDriver(FirefoxDriverService.CreateDefaultService(), FirefoxOptions options, TimeSpan commandTimeout)
を使用できます。
new FirefoxDriver(string geckoDriverDirectory, FirefoxOptions options, TimeSpan commandTimeout)
もあり、機能します。ただし、文書化されていないため、geckoDriverDirectory
に既に存在する場合でも、手動でPath
を指定する必要があります。