2011-03-02 48 views
7
driver.findElement(By.xpath("//input[@value='添加']")).click(); 
//Pops out an Alert and program stops, does not continue 

cómo hacer clic en la alerta?Alerta de manejo en Selenium WebDriver (Selenium 2)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

啊啊啊啊 怎么没有人呢? (TRANS: ahahahahaha why there is no one here to reply my post?) 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
我顶 (TRANS: Let me promote this post!) 
+0

He reformateado un poco su código. ¿Es posible traducir los signos chinos? Quizás revelen alguna información. – GvS

+0

hey, verifique mi respuesta – Johnydep

Respuesta

4

En Selenium 2, actualmente las alertas solo se manejan en el navegador Firefox. No especifica qué idioma está utilizando para sus pruebas, pero a continuación se explica cómo manejar una alerta con ruby. (Esto está tomado del Ruby Bindings page en la wiki de selenio).

Alerta Javascript/Confirma

Se puede utilizar para manejar WebDriver Javascript alerta y confirmar los cuadros de diálogo. La implementación para ambos es la misma.

Nota: En este momento, la API solo está disponible en Firefox (o en Firefox usando el servidor remoto), y solo se pueden capturar las alertas/confirmaciones que se generan después de la carga.

require "selenium-webdriver" 

driver = Selenium::WebDriver.for :firefox 
driver.navigate.to "http://mysite.com/page_with_alert.html" 

driver.find_element(:name, 'element_with_alert_javascript').click 
a = driver.switch_to.alert 
if a.text == 'A value you are looking for' 
    a.dismiss 
else 
    a.accept 
end 
12

A partir de la última versión de selenio 2, esto se puede hacer (por lo menos con el FirefoxDriver):

driver.switchTo().alert().accept(); 
+0

Me gusta esta solución, está funcionando muy bien en mi código. Estoy usando Firefox, no probé este código en otros navegadores. –

+0

¿dónde puedo ver la implementación del código fuente de alert.getAlertText en los archivos de código fuente de webliner de selenio? – rahoolm

+0

@rahoolm, haga clic aquí https://github.com/SeleniumHQ/selenium/blob/ceaf3da79542024becdda5953059dfbb96fb3a90/java/server/src/org/openqa/selenium/remote/server/handler/GetAlertText.java – aaron0207

4

En la versión anterior del Selenio 2 he tenido más remedio que ordenar las alertas en Internet Explorer reemplazando el window.alert en Javascript:

IJavaScriptExecutor js = (IJavaScriptExecutor)driver; 
// Override window.alert to store the prompt and accept it automatically 
js.ExecuteScript("window.alert = function(msg) { document.bAlert = true; document.lastAlert=msg; }"); 

// Do some stuff... 

// Check for alert 
Object o = js.ExecuteScript("return document.bAlert"); 
if (o != null && (bool)o == true) 
{ 
    //retrieve the alert message 
    o = js.ExecuteScript("return document.lastAlert"); 
    // Do something with the alert text 
} 

selenio 2.0b3 tiene soporte para atender las alertas en IE y Firefox, por lo que se puede hacer lo siguiente:

IAlert alert = driver.SwitchTo().Alert(); 
// Get the text from the alert 
string alertText = alert.Text; 
// Accept the alert 
alert.Accept(); 

Sin embargo, no he sido capaz de conseguir lo anterior para trabajar con Sí/No hay alertas (Rechazar() funciona para n más que aceptar() no funciona para Sí). Estoy en el proceso de mirar al IEDriver para descubrir por qué es esto.

2
IWebDriver driver = new ChromeDriver(); 
driver.Navigate().GoToUrl("http://skynet:8081/1.htm"); 

var selenium = new WebDriverBackedSelenium(driver, driver.Url); 
selenium.Start(); 

selenium.Click("css=input[type=button]"); 

Assert.AreEqual(selenium.GetConfirmation(), "Are you sure?"); 
Assert.AreEqual("OK", selenium.GetAlert()); 

// <input type="button" onclick="if(confirm('Are you sure?')) alert('OK'); else alert('Cancel');" value="Alert test" /> 

driver.Quit(); 
1

código C#:

IAlert alert = driver.SwitchTo().Alert(); 
alert.Accept(); 
System.Threading.Thread.Sleep(milliseconds); 
+0

¿Cuál es la diferencia entre "Alerta" e "IAlert"? –

+0

No estoy seguro. Puedes echar un vistazo aquí para empezar. http://selenium.googlecode.com/svn/trunk/docs/api/dotnet/index.html – MacGyver

+0

expanda "OpenQA.Selenium Namespace"> expanda "IAlert Interface" – MacGyver

1
Alert alert = driver.switchTo().alert(); 
alert.accept(); 

Si desea cancelar el pop-up utilice la siguiente:

alert.dismiss(); 

en lugar de

alert.accept(): 
2

Tendrá que manejar excepción y ejecutar su código de controlador de alerta, para Java:

 try{ 
     driver.findElement(By.xpath("//input[@value='添加']")).click(); 
     } catch(org.openqa.selenium.UnhandledAlertException e){ 
     Alert alert = driver.switchTo().alert(); 
     alert.accept(); 
     // you logic here what you want to do next 
     } 

detectar esta excepción, y entonces se puede aceptar o rechazar consecuencia de alerta.

+0

Esto podría funcionar, pero también depende del propósito de el programa. Uso Selenium Webdriver tanto para las pruebas de integración interna como para el rastreo de la web externa. En el caso de prueba, esto oculta un estado de programa inesperado, que consideraría algo malo, mientras que al rastrear la web, podría salvarme de la mala decisión de usabilidad de otra persona. –

Cuestiones relacionadas