我目前正在使用Selenium 2/WebDriver与C#针对使用InternetExplorerDriver的ASP.NET MVC应用程序进行概念验证。如何可靠地等待使用Selenium2/WebDriver的JavaScript警报?
该应用程序使用标准模式通知用户记录已保存。这可以通过设置TempData来运行以包含“成功保存记录”,并且如果TempData存在于视图中,视图将提醒该消息。
虽然硒测试工作此功能,我们从下面C#/硒测试码接收inconstitant行为:
_driver.Navigate().GoToUrl(_baseUrl + "/Amraam/List");
_driver.FindElement(By.LinkText("Create New")).Click();
_driver.FindElement(By.Id("txtAmraamSerialNumber")).SendKeys("CC12345");
var selectElement = new SelectElement(_driver.FindElement(By.Id("LocationId")));
selectElement.SelectByText("Tamworth");
_driver.FindElement(By.Id("btnSave")).Click();
var wait = new WebDriverWait(_driver, defaultTimeout);
IAlert alert = wait.Until(drv => drv.SwitchTo().Alert());
_alertText = alert.Text;
alert.Accept();
Assert.That(_alertText, Is.EqualTo("Record successfully saved"));
将约50%的时间,Selinium将失败,
OpenQA.Selenium.NoAlertPresentException:没有警报处于活动状态
我很难找到复制问题的确切方法,并担心不一致方面。如果它一直失败,那么我们可以调试并跟踪问题。
干杯这一点。实际上,进一步工作,我们发现这实际上并不是硒的问题,但实际上与我们的应用程序测试,以及点击按钮上的JavaScript事件的顺序(不要问...)无论如何,硒本身的行为。 @Naishy,你的回应看起来不错,但我们会尝试,否则 - 欢呼。 –
您可以使用方法组语法使最后一行更简洁一点; 'IAlert alert = wait.Until(AlertIsPresent);'。 –
现在您可以使用 ExpectedCondition.AlertIsPresent 请参阅:http://stackoverflow.com/a/24550934/200824 –