Selenium错误:服务器没有响应url http:// localhost:7055

时间:2012-09-07 16:26:24

标签: c# selenium nunit

我正在使用Selenium,C#,NUnit编写测试,有时我会收到以下错误: -

  

OpenQA.Selenium.WebDriverException:服务器没有对url的响应   httр://lоcalhost:7055 /集线器/会话/ 8dd13f5c-7ca6-4aa6-BABC-f0ff6d940f0a /元件

这是堆栈跟踪:

  

OpenQA.Selenium.WebDriverException:服务器没有对url的响应   httр://本地主机:7055 /集线器/会话/ 8dd13f5c-7ca6-4aa6-BABC-f0ff6d940f0a /元件   在   OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest的   请求)   C:\项目\的webdriver \树干\ DOTNET \ SRC \的webdriver \远程\ HttpCommandExecutor.cs:线   115在OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(命令   commandToExecute)in   C:\项目\的webdriver \树干\ DOTNET \ SRC \的webdriver \远程\ HttpCommandExecutor.cs:线   96点   OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(命令   commandToExecute)in   C:\项目\的webdriver \树干\ DOTNET \ SRC \的webdriver \火狐\内部\ ExtensionConnection.cs:线   128在OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String   中的driverCommandToExecute,Dictionary`2参数)   C:\项目\的webdriver \树干\ DOTNET \ SRC \的webdriver \远程\ RemoteWebDriver.cs:线   795 at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String   机制,字符串值)   C:\项目\的webdriver \树干\ DOTNET \ SRC \的webdriver \远程\ RemoteWebDriver.cs:线   836 at OpenQA.Selenium.Remote.RemoteWebDriver.FindElementById(String   id)in   C:\项目\的webdriver \树干\ DOTNET \ SRC \的webdriver \远程\ RemoteWebDriver.cs:线   431在OpenQA.Selenium.By。<> c__DisplayClass2.b__0(ISearchContext   上下文)   c:\ Projects \ WebDriver \ trunk \ dotnet \ src \ WebDriver \ By.cs:102行at at   OpenQA.Selenium.By.FindElement(ISearchContext context)中   c:\ Projects \ WebDriver \ trunk \ dotnet \ src \ WebDriver \ By.cs:第272行   OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by)in   C:\项目\的webdriver \树干\ DOTNET \ SRC \的webdriver \远程\ RemoteWebDriver.cs:线   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?

(09.09.2012)很抱歉,但也许我没有提供所有信息。我正在使用FireFox驱动程序,Win7,Selenium 2.25.1。我的测试有时只会失败。在调试模式下进行测试失败的频率低于Release。

Here我找到了可能发生这种情况的原因。如果我写这样的代码:

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是不好的解决方案。也许有人可以找到另一个更好的解决方案。

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

您使用的是IE吗?我得到这个,直到我发现我可以通过配置对象设置基本URL。否则,它带你去的第一页是Selenium生成的东西,似乎错过了“真实”请求的提示。

 var options = new InternetExplorerOptions()
 {
     InitialBrowserUrl = _baseUrl,
     IntroduceInstabilityByIgnoringProtectedModeSettings = true
 };

 _driver = new InternetExplorerDriver(_ieDriverServerPath, options);

我在测试中使用TextFixtureSetup方法。

答案 2 :(得分:0)

我有同样的问题并以这种方式解决:

a)避免使用像'do wity retry'这样的方法来操作IWebElements,因为这样测试需要花费很多时间才能运行,这是不必要的,并且测试会间歇性地失败。

b)将Firefox版本降级为5(可能从FF 3.6降至6可以正常工作,但新版本的FF会引发间歇性异常,例如“没有来自集线器/会话的响应......”

c)如果您需要处理通过Ajax在页面加载的测试中的元素,请确保提供一个可以停止元素加载的js函数,因此您应该在FindElement和{{1之前从WebDdriver调用此函数}}