После еще нескольких поисков я нашел две вещи, которые, похоже, помогли в повторяющихся тестах:
Сначала я добавил ImplicitlyWait на 5 секунд. Не уверен, что это применимо ко всем функциям FindElement, но я перестал получать большую часть NoSuchElementException, который я получал.
OpenQA.Selenium.IE.InternetExplorerDriver driver = new OpenQA.Selenium.IE.InternetExplorerDriver();
driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 0, 5, 0));
//driver.Manage().Speed = Speed.Medium;
Во-вторых, у меня возникли проблемы с функцией выхода из системы и я изменил код на:
public LoginPageObject Logout() {
Driver.FindElement(By.LinkText("Logout")).Click();
OpenQA.Selenium.Support.UI.IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(Driver, TimeSpan.FromSeconds(5));
IWebElement element = wait.Until(driver => driver.FindElement(By.Name("username")));
LoginPageObject lpage = new LoginPageObject(Driver);
return lpage;
}
Кажется, что явное ожидание обрабатывает то, что ImplicitlyWait не перехватывает (я думаю, из-за перенаправлений).
http://code.google.com/p/selenium/source/browse/trunk/support/src/csharp/webdriver-support/UI/WebDriverWait.cs?r=10855