我在使用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版本。如果我错了,请纠正我。
答案 0 :(得分:0)
感谢指针@Arran。切换到Firefox驱动程序修复了该问题。我猜这个错误必须位于Internet Explorer驱动程序的某个地方。
[SetUp]
public void SetupTest()
{
Driver = new FirefoxDriver();
}