2010-02-12 5 views
9

Il semble que le code que j'ai essayé n'a aucun effet. Mon intention est de fermer toutes les invites JavaScript qui peuvent apparaître en cliquant sur le bouton "OK". Le problème est, mon script n'a aucun effet sur les invites qui apparaissent. En d'autres termes, cela ne fait rien.Ruby Watir: En cliquant sur OK sur les alertes JavaScript?

Voici ce que j'ai:

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

Le code HTML:

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

Le texte dans les messages peuvent changer, mon intention est de frapper OK, peu importe ce qui est à l'intérieur de l'alerte/confirmation rapide . PS: J'utilise Ubuntu.

Répondre

6

Le meilleur moyen consiste à empêcher le déclenchement des pop-ups.

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 

Voir: http://watirmelon.com/2010/10/31/dismissing-pesky-javascript-dialogs-with-watir/ pour plus de détails.

0

Les pop ups sont de la magie noire pour moi. Avez-vous essayé les solutions d'ici?

Je suggère également poster votre question à watir-general.

+0

En utilisant la solution n ° 3 travaillé pour moi dans le deuxième lien Željko ci-dessus. J'ai légèrement modifié la méthode startClicker pour prendre un paramètre de variable de navigateur, mais c'est celui qui a finalement fonctionné. –

0

Je pense que votre fx.button (: id, "OK"). Click était en attente d'un changement.
Mais la boîte de dialogue javascript ne change pas d'état.
Ainsi votre watir vous attendra pour toujours.
Si ce n'est pas comme ça, je ne sais pas.

L'action ne changera pas d'état, ne la retournera jamais.
Il faut donc cliquer sans attendre.
Quand j'utilise watir (pas firewatir), @ ie.button (: id, 'OK'). Click_no_wait.
Alors mieux vaut attendre 1 ~ 3 secondes pour popup.
Ensuite, comme vous le souhaitez.
Et de plus si vous voulez contrôler msg-box (popup), besoin d'AutoIT. --C'est échantillon pour attendre msg-box et cliquez sur OK pour IE popup--

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

Il est possible que tout je ne comprends pas ce que vous voulez dire. Si c'est le cas, ignorez cela.

0

Consultez /var/lib/gems/1.8/gems/firewatir-1.6.5/unittests/html/JavascriptClick.html (en supposant que votre gemme firewatir soit installée). J'ai couru le test et cela a fonctionné pour moi. Peut-être que la lecture du test vous donnera un aperçu de la façon dont startClicker est censé fonctionner.

0

cela a été demandé il y a une éternité alors je vais juste ajouter quelque chose d'un peu plus mis à jour qu'il a fait pour moi

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

premier retournera une seconde booléen on ok quelle que soit l'action que vous êtes invité à faire et le troisième fermera l'alerte sans

Questions connexes