Actualmente estoy colaborando en una prueba de concepto usando Selenium 2/WebDriver con C# contra una aplicación ASP.NET MVC utilizando InternetExplorerDriver.¿Cómo puedo esperar de manera confiable las alertas de JavaScript usando Selenium2/WebDriver?
La aplicación utiliza un patrón estándar para notificar a los usuarios que se ha guardado un registro. Esto funciona mediante la configuración TempData para incluir "Registro guardado satisfactoriamente", y si TempData está presente en la Vista, la vista alertará al mensaje.
Al trabajar en pruebas de Selenium para esta funcionalidad, estamos recibiendo comportamiento inconstitant desde el código de prueba #/selenio por debajo de C:
_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"));
Aproximadamente el 50% de las veces, Selinium fallará con un
OpenQA.Selenium.NoAlertPresentException: No hay alerta activa
Tengo dificultades para encontrar una forma exacta de replicar el problema y me preocupa el aspecto de incoherencia. Si falla sistemáticamente, podemos depurar y rastrear el problema.
Saludos para eso. En realidad, trabajando más, descubrimos que esto no era realmente un problema con el selenio, pero en realidad con nuestra aplicación bajo prueba y el pedido de eventos de JavaScript con un clic de botón (no preguntes ...) De todos modos, el selenio se comportaba solo . @Naishy, tu respuesta se ve muy bien, sin embargo, y lo hubiéramos intentado de otra manera, ¡salud! –
Puede utilizar la sintaxis del grupo de métodos para hacer que la última línea sea un poco más sucinta; 'IAlert alert = wait.Until (AlertIsPresent);'. –
Ahora puede usar ExpectedCondition.AlertIsPresent Ver: http://stackoverflow.com/a/24550934/200824 –