通过NUnit和Cruise Control .NET运行Selenium

时间:2013-06-17 16:06:31

标签: nunit selenium-webdriver cruisecontrol.net

我在使用Cruise Control .NET在NUnit中运行Selenium测试时遇到问题。当我从持续集成服务器上的NUnit GUI运行时,我有一个简单的测试运行正常。但是,当在同一台服务器上从Cruise Control .NET运行NUnit测试时,测试总是失败。不使用Selenium的测试从NUnit GUI和Cruise Control都运行良好。

[SetUp]
    public void SetupTest()
    {
        Driver = new InternetExplorerDriver();
    }



    [TearDown]
    public void TeardownTest()
    {
        Driver.Quit();
    }



    /// <summary>
    /// Test basic Selenium functionality.
    /// </summary>
    [Test]
    public void SeleniumTest()
    {
        Driver.Navigate().GoToUrl(TestConfig.TestURL);
        IWebElement testEle = WaitForElement(Driver, By.Id, "body", TestConfig.TestWaitMS);
        Assert.IsTrue(true);
    }



    private static IWebElement WaitForElement(IWebDriver driver, ByFunc byFunc, string elementId, int waitMs,
        string waitOutput = null, int pause = 50)
    {
        bool elementFound = false;
        int i = 0;
        IWebElement webElement = null;
        while (!elementFound && (i * pause) < waitMs)
        {
        try
        {
            webElement = driver.FindElement(byFunc(elementId));
            elementFound = true;
        }
        catch (NoSuchElementException)
        {
            i++;
            Thread.Sleep(pause);
            if (waitOutput != null)
            Console.Write(waitOutput);
        }
        }
        if (elementFound)
        return webElement;
        else
        throw new NoSuchElementException(string.Format("Could not find element {0} after waiting {1}ms.", elementId, waitMs));
    }

WaitForElement只是一个辅助函数,它允许我为某些元素分配特定的等待,而不是整个测试运行的等待时间。

当从WaitForElement函数引发NoSuchElementException时,测试失败。

我在Google上发现了一些链接,说您需要运行SeleniumRC作为服务才能让它从Cruise Control运行。我认为这不适用于我使用WebDriver版本。如果我错了,请纠正我。

  1. IE版本8
  2. Cruise Control .NET 1.8.3.0
  3. NUnit 2.6
  4. Selenium 2.0.0

1 个答案:

答案 0 :(得分:0)

感谢指针@Arran。切换到Firefox驱动程序修复了该问题。我猜这个错误必须位于Internet Explorer驱动程序的某个地方。

[SetUp]
public void SetupTest()
{
    Driver = new FirefoxDriver();
}