2010-02-12 7 views
9

Sembra che nessuno del codice che ho provato abbia alcun effetto. La mia intenzione è quella di chiudere tutti i messaggi di JavaScript che possono venire visualizzati premendo il pulsante "OK". Il problema è che il mio script non ha alcun effetto sulle richieste che appaiono. In altre parole, non fa nulla.Ruby Watir: facendo clic su OK sugli avvisi JavaScript?

Ecco quello che ho:

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

Il codice HTML:

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

Il testo le istruzioni possono cambiare, la mia intenzione è di colpire OK indipendentemente da ciò che si trova all'interno del messaggio di avviso/conferma .

PS: Sto utilizzando Ubuntu.

risposta

6

Il modo migliore è quello di impedire che i popup si attivino.

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 

Vedere: http://watirmelon.com/2010/10/31/dismissing-pesky-javascript-dialogs-with-watir/ per ulteriori dettagli.

0

Penso che il tuo fx.button (: id, "OK"). Clic era in attesa di stato modificato.
Ma la finestra di dialogo javascript non cambia stato.
Quindi il tuo watir ti aspetterà per sempre.
Se non fosse così, non lo so.

L'azione non cambierà stato, non lo restituirà mai.
Quindi è necessario fare clic senza attendere.
Quando uso watir (non firewatir), @ ie.button (: id, 'OK'). Click_no_wait.
Quindi meglio aspettare 1 ~ 3 secondi per popup.
Quindi come più ti piace.
E inoltre se si desidera controllare msg-box (popup), è necessario AutoIT. --Questo è di esempio per attesa msg-box e cliccare su OK per IE popup--

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

E 'possibile che completamente non capisco cosa vuoi dire. Se così ignori questo.

0

Controlla /var/lib/gems/1.8/gems/firewatir-1.6.5/unittests/html/JavascriptClick.html (presupponendo che sia installato il tuo gemma firewatir). Ho eseguito il test e ha funzionato per me. Forse leggere il test ti darà un'idea di come dovrebbe funzionare startClicker.

0

questo è stato chiesto un'eternità fa, quindi sto solo aggiungendo qualcosa di un po 'più aggiornato che ha fatto per me

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

primo restituirà un valore booleano seconda OK si qualsiasi azione viene chiesto di fare e la terza sarà chiudere l'avviso senza