Comment puis-je utiliser Autoit pour fermer toutes les alertes javascript et confirmations qui peuvent apparaître?
-
19-09-2019 - |
Question
Je teste en sélénium et j'ai un tas de choses qui se passe sur la charge de page. J'ai découvert AutoIt, et je pensais qu'il pourrait traiter toutes les questions de dialogue javascript. Je cherchais sur le web pour un script AutoIt qui pourrait gérer cela ...
D'autres options seraient utiles aussi bien!
Je ne dois pas nécessairement tout le code, mais un certain point dans la bonne direction serait utile.
La solution
D'accord si cette solution fonctionne pour moi ... j'ai pu fermer 2 fenêtres ici. Aussi je serai en mesure de gérer les popups en fonction de leur nom qui est cool. Il fonctionne toujours en arrière-plan après avoir lauched le script. Quand je veux que ça je finis tout simplement près autoit de gestionnaire de tâches ou de la tâche bar à droite.
While True
If WinWait('Name of your Popup', '', 1) == 1 Then
;Wait for page to load if found
Sleep(10000)
;Close Page
Send('!{F4}')
Sleep(5000)
;Confirm Dialog
Send('{ENTER}')
Sleep(1000)
;Close Lanucher Page
Send('!{F4}')
Sleep(5000)
;Confirm Dialog
Send('{ENTER}')
EndIf
;Let another thread have a turn
sleep(3)
WEnd
Aussi est-ce possible directement à partir de python, les détails: http://www.parrisstudios.com /? p = 308 , mais vous avez encore besoin AutoIt3.
Autres conseils
Si vous rencontrez des problèmes avec des boîtes d'alerte vous pouvez les désactiver programme ou créer un mode séparé dans votre code qui les désactiver en fonction d'une condition (à savoir le mode de débogage).
Les programmes d'enregistrement de macro ne fonctionnent pas aussi bien que vous pourriez penser. Typiquement programmes macro-enregistrement emplacements d'enregistrement de clics de souris et le calendrier des touches. Les meilleurs programmes macro-enregistrement utilisent (généralement le traitement d'images) et (rarement) des techniques de vision par ordinateur. Les solutions qui utilisent ces techniques sont généralement très coûteux. (5k-10k par siège) [Je ne me souviens pas l'un des noms des meilleures versions Peut-être QuickTest , mais elle a été faite par une société qui a été racheté par HP]
Je suis en train d'interagir avec une page Web avec AutoIt et les alertes javascript stupides n'arrêtais pas tout casser et j'ai finalement compris comment les désactiver si je pensais que je posterais ici:
#include <ie.au3>
$oIE = _IEAttach('https://www.site.com','URL')
$EventObject=ObjEvent($oIE.document,"IEEvent_")
Func IEEvent_onreadystatechange()
$readystate=$oIE.document.readystate
ConsoleWrite ($readystate & @CRLF )
if $readystate='interactive' then killalert()
EndFunc
while 1
sleep(100)
WEnd
func killalert()
Local $o_head = $oIE.document.all.tags("HEAD").Item(0)
Local $o_script = $oIE.document.createElement("script")
With $o_script
.language = "jscript"
.type = "text/javascript"
.text = 'function alert(message) {};'
EndWith
$o_head.appendChild($o_script)
EndFunc
En fait ce que cela fait est d'avoir une fonction s'appelle à AutoIt lorsque la page état prêt = (apparemment, c'est après la majeure partie de la page chargée, mais avant qu'il ne « fonctionne » tout ce que je pense) « interactif » qui insère javascript dans la page de redéfinir la fonction d'alerte () de sorte qu'il ne fait rien (pas de dialogue d'alerte à se soucier d'avoir à cliquer sur OK). Je l'ai testé et il fonctionne.
Si vous avez la fonction d'alerte () étant appelée à partir d'un cadre à l'intérieur de la page, alors vous devrez utiliser l'événement onreadystatechange et la propriété readystate du cadre au lieu du document principal.