【问题标题】:Selenium error: No response from server for url http://localhost:7055Selenium 错误:服务器对 url http://localhost:7055 没有响应
【发布时间】:2012-09-01 13:36:02
【问题描述】:

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

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

这是堆栈跟踪:

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

.####.##.#####.#########.#####.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。我的测试有时会失败。调试模式下的测试失败率低于发布模式。

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

【问题讨论】:

  • 检查您的 Windows 防火墙设置?
  • 只是想知道,您是否尝试过切换到不同的选择器?只是想知道错误是否仅在使用特定选择器时发生(有时)。

标签: c# selenium nunit


【解决方案1】:
【解决方案2】:

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

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

 _driver = new InternetExplorerDriver(_ieDriverServerPath, options);

我在测试中的 TextFixtureSetup 方法中使用它。

【讨论】:

  • InitialBrowserUrl 属性 nothing 与 IE 驱动程序“缺少”任何东西有关。在用户无法设置浏览器的保护模式设置的情况下,它只是一个小帮手,因为他们的机器被过分热心的系统管理员错误地锁定了。如果您能够在您的环境中设置 IE 的保护模式属性,您应该这样做。 This blog post 给出了为什么需要这个 hack 的历史原因。
  • 感谢您的洞察力,Jim,总是很高兴获得一些背景故事(尤其是来自内部人士)。但是保护模式设置对我不起作用,也没有反映在 OP 文本(或错误)中。这并没有改变这样一个事实,即如果您尝试在不设置此选项的情况下执行请求,您可能会遇到上述问题(正如我所拥有的那样)。测试脚本从未见过初始请求,您会收到“无响应”文本。
【解决方案3】:

我遇到了同样的问题,用这种方法解决:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 2012-02-23
    • 2017-07-16
    • 2014-02-22
    相关资源
    最近更新 更多