首页 文章

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

提问于
浏览
15

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

OpenQA.Selenium.WebDriverException:服务器没有响应url htt://lоcalhost:7055 / hub / session / 8dd13f5c-7ca6-4aa6-babc-f0ff6d940f0a / element

这是堆栈跟踪:

OpenQA.Selenium.WebDriverException:OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest请求)中没有服务器对url htt:// localhost:7055 / hub / session / 8dd13f5c-7ca6-4aa6-babc-f0ff6d940f0a / element的响应在c:\ Projects \ WebDriver \ trunk \ dotnet \ src \ WebDriver \ Remote \ HttpCommandExecutor.cs:第115行,位于c:\ Projects \ WebDriver \ trunk \ dotnet \中的OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(命令commandToExecute) src \ WebDriver \ Remote \ HttpCommandExecutor.cs:位于c:\ Projects \ WebDriver \ trunk \ dotnet \ src \ WebDriver \ Firefox \ Internal \ ExtensionConnection中的OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(命令commandToExecute)的第96行 . cs:OpenQA中的第128行.Relenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute,Dictionary`2参数)位于OpenQA的c:\ Projects \ WebDriver \ trunk \ dotnet \ src \ WebDriver \ Remote \ RemoteWebDriver.cs:第795行 . Selenium.Remote.RemoteWebDriver.FindElement(字符串机制,字符串值)在c:\ Projects \ WebDriver \ trunk \ dotnet中\ src \ WebDriver \ Remote \ RemoteWebDriver.cs:第8行,位于c:\ Projects \ WebDriver \ trunk \ dotnet \ src \ WebDriver \ Remote \ RemoteWebDriver.cs中的OpenQA.Selenium.Remote.RemoteWebDriver.FindElementById(String id):line 431 at OpenQA.Selenium.By . <> c__DisplayClass2.b__0(ISearchContext context)位于c:\ Projects \ WebDriver \ trunk \ dotnet \ src \ WebDriver \ By.cs:第102行,位于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:\ 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,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 回答

  • 3

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

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

    我在我的测试中使用了 TextFixtureSetup 方法 .

  • 1

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

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

    b)将Firefox版本降级为5(可能从FF 3.6降级到6可以正常工作,但是新版本的FF会抛出一个间歇性的异常,比如'没有来自集线器/会话的响应......'

    c)如果您需要处理通过页面上的Ajax加载的测试中的元素,请务必提供可以停止元素加载的js函数,因此您应该在FindElement和 do what you want 之前从WebDdriver调用此函数 .

相关问题