【问题标题】:SpecFlow + Selenium2 + ASP.NET MVC + TeamCity Not WorkingSpecFlow + Selenium2 + ASP.NET MVC + TeamCity 不工作
【发布时间】:2011-10-05 09:14:22
【问题描述】:

我有一些 SpecFlow 功能正在使用 Selenium 2 来自动化 ASP.NET MVC 3 应用程序的一些 UI 测试。当我在本地运行这些时,它运行良好并且测试通过。一旦将我的更改提交到 Git 并将提交推送到我们的远程存储库以供我们的 TeamCity 实例获取,测试就会运行并且需要更长的时间,但会失败并出现以下情况。

Test(s) failed. OpenQA.Selenium.WebDriverException : No response from server for url http://localhost:7055/hub/session/1ada0501-154a-45f7-b0a3-487af59f7a0b/timeouts/implicit_wait

我曾尝试四处寻找各种解决方案,但发现任何与远程相关的东西都是零运气。如果有人可以链接到任何可以让我的生活更轻松的资源,请随时分享。或者帮助解决这个问题。

【问题讨论】:

    标签: asp.net-mvc-3 teamcity selenium-webdriver specflow


    【解决方案1】:

    我不知道答案,但以下设置对我们有用的管道代码:

    • TeamCity (6.0.3)
    • IIS(来自修复虚拟文件夹)
    • ASP.NET MVC3
    • SeleniumDotNet v2.0.3
    • FireFox 驱动,
    • 服务器上的 Firefox 版本:3.6.17
    • TeamCity 作为本地系统运行(默认)

    硒设置:

    public static readonly TimeSpan DefaultTimeout = TimeSpan.FromSeconds(10);
    
    private BrowserContext()
    {
        //browser = new InternetExplorerDriver();
        browser = new FirefoxDriver();
        browser.Manage().Timeouts().ImplicitlyWait(DefaultTimeout);
    }
    

    使用 SpecFlow 事件设置/拆卸 firefox:

            [BeforeScenario]
            public void BeforeWebScenario()
            {
                if (!BrowserContext.IsRunning) 
                    BrowserContext.Start();
    
                BrowserContext.Current.Browser.NavigateTo("/Test/RecreateDatabase");
                BrowserContext.Current.Browser.FindElement(By.ClassName("success-message"));
            }
    
            [AfterScenario]
            public void AfterWebScenario()
            {
                if (ScenarioContext.Current.TestError != null)
                {
                    Console.WriteLine("Browser page source for failing test: {0}",
                        BrowserContext.Current.Browser.PageSource);
                }
    
                bool browserPerScenario;
                if (bool.TryParse(ConfigurationManager.AppSettings["browserPerScenario"], out browserPerScenario) && browserPerScenario)
                    BrowserContext.Stop();
            }
    
            [AfterTestRun()]
            public static void StopBrowser()
            {
                if (BrowserContext.IsRunning) 
                    BrowserContext.Stop();
            }
    

    【讨论】:

    • IsRunning 属性和Start()Stop() 方法的作用是什么。你能发布完整的相关BrowserContext吗?
    【解决方案2】:

    大胆猜测,我认为这是罪犯:

    :7055
    

    很可能,您在本地运行内置的 ASP.NET 开发服务器,并在另一台服务器上运行在功能更全的 Web 服务器(很可能是 IIS)上。除非您让服务器使用非标准端口(上面提到的端口)运行,否则您将失败。

    要考虑的一件事是从 ASP.NET 开发服务器迁移到 IIS(或 IIS Express)。然后,您可以使用 localhost 而没有端口来设置站点。

    【讨论】:

    • 我在本地和构建服务器上使用 IIS Express 从目录托管,并且它在两者的相同端口上运行。我粘贴的行中的 URL 用于 Selenium 2,它显然尝试连接到它或其他东西,它不是我的 Web 项目的 URL。
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多