2010-02-12 14 views
9

Parece que ninguno de los códigos que he probado tiene algún efecto. Mi intención es cerrar todos y cada uno de los mensajes de JavaScript que puedan aparecer al presionar el botón "Aceptar". El problema es que mi script no afecta las indicaciones que surgen. En otras palabras, no hace nada.Ruby Watir: ¿haciendo clic en Aceptar en Alertas de JavaScript?

Esto es lo que tengo:

fx = FireWatir::Firefox.start(somepage) 
fx.startClicker("OK") 
fx.button(:id, "OK").click 
fx.button(:id, "CONFIRM").click 

El HTML:

<script type="text/javascript"> 
    alert("Alert!"); 
    window.confirm("Confirm?"); 
</script> 

El texto de las instrucciones pueden cambiar, mi intención es golpear bien, independientemente de lo que está dentro del mensaje de alerta/confirmación .

PD: Estoy ejecutando Ubuntu.

Respuesta

6

La mejor manera es evitar que los pop-ups se disparen.

require 'watir' 
b = Watir::Browser.start "http://somepagewithdialogs" 
# don't return anything for alert 
b.execute_script("window.alert = function() {}") 

# return some string for prompt to simulate user entering it 
b.execute_script("window.prompt = function() {return 'my name'}") 

# return null for prompt to simulate clicking Cancel 
b.execute_script("window.prompt = function() {return null}") 

# return true for confirm to simulate clicking OK 
b.execute_script("window.confirm = function() {return true}") 

# return false for confirm to simulate clicking Cancel 
b.execute_script("window.confirm = function() {return false}") 

# interact with some element which would trigger the pop up 
b.button(:id => "dialogTrigger").click 

Ver: http://watirmelon.com/2010/10/31/dismissing-pesky-javascript-dialogs-with-watir/ para obtener más detalles.

0

Las ventanas emergentes son magia negra para mí. ¿Has probado las soluciones desde aquí?

También sugeriría publicar su pregunta en watir-general.

+0

Utilizando la solución # 3 trabajado para mí en Zeljko segundo enlace anterior. He modificado el método startClicker ligeramente para tener un parámetro variable navegador, pero esto fue la que finalmente funcionó. –

0

Creo que su fx.button (: id, "OK"). Clic estaba esperando el estado cambiado.
Pero el cuadro de diálogo de javascript no cambia de estado.
Así que su watir estará esperando por siempre.
Si no es así, no sé.

La acción no cambiará de estado, nunca la devuelva.
Por lo tanto, es necesario hacer clic en No esperar.
Cuando uso watir (no firewatir), @ ie.button (: id, 'OK'), click_no_wait.
Entonces espere mejor 1 ~ 3 segundos para emergente.
Luego, como quieras.
Y, además, si desea controlar msg-box (popup), necesita AutoIT. --Esta es la muestra de espera msg-caja y haga clic en OK para IE popup--

autoit=WIN32OLE.new('AutoItX3.Control') 
autoit.WinWait('Windows Internet Explorer') 
autoit.WinActive('Windows Internet Explorer') 
autoit.ControlClick('Windows Internet Explorer','','OK') 

Es posible que completamente no entiendo lo que quieres decir. Si es así, ignore esto.

0

Eche un vistazo a /var/lib/gems/1.8/gems/firewatir-1.6.5/unittests/html/JavascriptClick.html (suponiendo que esté donde está instalada su gema firewatir). Ejecuté la prueba y funcionó para mí. Tal vez leer la prueba le dará una idea de cómo se supone que startClicker debe funcionar.

0

esto se le pidió hace una eternidad así que estoy añadiendo algo un poco más actualizado que lo hizo por mí

@browser.alert.exists? @browser.alert.ok @browser.alert.close

primero devolverá un booleano segunda será bien cualquier acción que se le pide que haga y tercero se cerrará la alerta sin

Cuestiones relacionadas