Selenium、C#、NUnitを使用してテストを記述していますが、エラーが発生することがあります:-
OpenQA.Selenium.WebDriverException:URLhttр://lоcalhost:7055/hub/session/8dd13f5c-7ca6-4aa6-babc-f0ff6d940f0a/elementに対するサーバーからの応答がありません
スタックトレースは次のとおりです。
OpenQA.Selenium.WebDriverException:OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)のurlhttр:// localhost:7055/hub/session/8dd13f5c-7ca6-4aa6-babc-f0ff6d940f0a/elementに対するサーバーからの応答がありませんc:\ Projects\WebDriver\trunk\dotnet\src\WebDriver\Remote\HttpCommandExecutor.cs:line 115 at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)in c:\ Projects\WebDriver\trunk\dotnet\src\WebDriver\Remote\HttpCommandExecutor.cs:line 96 at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(Command commandToExecute)in c:\ Projects\WebDriver\trunk\dotnet\src\WebDriver\Firefox\Internal\ExtensionConnection.cs :OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute、Dictionary`2 parameters)の128行目c:\ Projects\WebDriver\trunk\dotnet\src\WebDriver\Remote\RemoteWebDriver.cs:OpenQA.Seleniumの795行目c:\ Projects\WebDriver\trunk\dotnet\srの.Remote.RemoteWebDriver.FindElement(文字列メカニズム、文字列値) c:\ Projects\WebDriver\trunk\dotnet\src\WebDriver\Remote\RemoteWebDriver.cs:line431のOpenQA.Selenium.Remote.RemoteWebDriver.FindElementById(String id)のc\WebDriver\Remote\RemoteWebDriver.cs:line 836 OpenQA.Selenium.By。<> c__DisplayClass2.b__0(ISearchContext context)のc:\ Projects\WebDriver\trunk\dotnet\src\WebDriver\By.cs:line102のOpenQA.Selenium.By.FindElement(ISearchContext context) c:\ Projects\WebDriver\trunk\dotnet\src\WebDriver\By.cs:line 272のOpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by)のc:\ Projects\WebDriver\trunk\dotnet\src\WebDriver\Remote\RemoteWebDriver.cs:289行目
。####。##。#####。#########。#####。ShareServicesTest.CreateShareWidget()
このエラーが表示されるコード:
Driver.SwitchTo().Frame(frameElement);
var wait = new WebDriverWait(parentContextable.Context.Driver, Timeout);
IWebElement element = wait.Until(d => Driver.FindElement(By.TagName(Tags.Body))); // error in this line
このエラーは、Selenium実装コードの次の行でのみスローできることがわかりました。
private static Response CreateResponse(WebRequest request)
{
Response commandResponse = new Response();
HttpWebResponse webResponse = null;
try
{
webResponse = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
webResponse = (HttpWebResponse)ex.Response;
}
if (webResponse == null)
{
throw new WebDriverException("No response from server for url " + request.RequestUri.AbsoluteUri);
}
else
{ ...
たぶん誰かがrequest.GetResponse()がnullを返す理由を知っているのでしょうか、それとも失敗した場合はex.Responseもnullを返すのでしょうか?
(09.09.2012)申し訳ありませんが、すべての情報を提供しなかった可能性があります。私はFireFoxドライバー、Win7、Selenium2.25.1を使用しています。私のテストはたまにしか失敗しません。デバッグモードでのテストは、リリースよりも失敗する頻度が低くなります。
ここ これが起こる考えられる理由を見つけました。そして、私がそのようなコードを書くと:
Driver.SwitchTo().Frame(frameElement);
var wait = new WebDriverWait(parentContextable.Context.Driver, Timeout);
Tread.Sleep(250);
IWebElement element = wait.Until(d => Driver.FindElement(By.TagName(Tags.Body)));
テストは正常に実行されます。しかし、Thread.Sleepは悪い解決策です。たぶん誰かが別の、もう少し良い解決策を見つけることができるでしょう。
IEを使用していますか?オブジェクトのconfigを介してベースURLを設定できることがわかるまで、これを取得していました。それ以外の場合、最初のページはSeleniumによって生成されたものであり、「実際の」要求の手がかりを見逃しているようです。
var options = new InternetExplorerOptions()
{
InitialBrowserUrl = _baseUrl,
IntroduceInstabilityByIgnoringProtectedModeSettings = true
};
_driver = new InternetExplorerDriver(_ieDriverServerPath, options);
テストのTextFixtureSetup
メソッドでそれを使用します。
私は同じ問題を抱えていて、このように解決しました:
a)IWebElementsを操作するための「dowity try」などのメソッドは避けてください。この方法では、テストの実行に時間がかかり、不要であり、テストが断続的に失敗するためです。
b)Firefoxバージョンを5にダウングレードします(おそらくFF 3.6から6が正常に機能するまでですが、FFの新しいバージョンは「ハブ/セッションからの応答がありません...」のような断続的な例外をスローします。
c)ページ上のAjaxを介してロードされるテストで要素を処理する必要がある場合は、要素のロードを停止できるjs関数を必ず提供してください。そのため、FindElementおよびdo what you want
の前にWebDdriverからこの関数を呼び出す必要があります。