我正在使用Selenium、C#和NUnit编写测试,有时会出现以下错误:
OpenQA.Selenium.WebDriverException: 无法从URL httр://localhost:7055/hub/session/8dd13f5c-7ca6-4aa6-babc-f0ff6d940f0a/element 获取服务器响应
下面是堆栈跟踪信息:
OpenQA.Selenium.WebDriverException: 无法从URL httр://localhost:7055/hub/session/8dd13f5c-7ca6-4aa6-babc-f0ff6d940f0a/element 获取服务器响应 at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request) in 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:line 128 at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) in c:\Projects\WebDriver\trunk\dotnet\src\WebDriver\Remote\RemoteWebDriver.cs:line 795 at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value) in c:\Projects\WebDriver\trunk\dotnet\src\WebDriver\Remote\RemoteWebDriver.cs:line 836 at OpenQA.Selenium.Remote.RemoteWebDriver.FindElementById(String id) in c:\Projects\WebDriver\trunk\dotnet\src\WebDriver\Remote\RemoteWebDriver.cs:line 431 at OpenQA.Selenium.By.<>c__DisplayClass2.b__0(ISearchContext context) in c:\Projects\WebDriver\trunk\dotnet\src\WebDriver\By.cs:line 102 at OpenQA.Selenium.By.FindElement(ISearchContext context) in c:\Projects\WebDriver\trunk\dotnet\src\WebDriver\By.cs:line 272 at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by) in c:\Projects\WebDriver\trunk\dotnet\src\WebDriver\Remote\RemoteWebDriver.cs:line 289 at
.####.##.#####.#########.#####.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呢?
(2012年9月9日) 对不起,也许我没有提供所有的信息。我正在使用FireFox驱动程序、Win7和Selenium 2.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不是一个好的解决方案。也许有人能够找到另一个稍微更好的解决方案。