Como posso usar o Autoit para fechar todos os alertas e confirmações do JavaScript que podem aparecer?
-
19-09-2019 - |
Pergunta
Estou testando no selênio e tenho várias coisas que acontecem na carga da página. Eu descobri o Autoit e estava pensando que ele poderia lidar com todos os problemas de diálogo JavaScript. Eu estava pesquisando na web um script automático que poderia lidar com isso ...
Outras opções também seriam úteis!
Não preciso necessariamente de todo o código, mas algum ponto na direção certa seria útil.
Solução
Tudo bem, então essa solução funciona para mim ... pude fechar duas janelas aqui. Além disso, poderei lidar com pop -ups com base no nome deles, o que é legal. Ele sempre funciona em segundo plano depois que eu leu o script. Quando quero que termine, simplesmente fecho o Autoit do gerenciador de tarefas ou da área da barra de tarefas à direita.
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
Além disso, isso é possível de diretamente em Python, detalhes: http://www.parrisstudios.com/?p=308, mas você ainda precisa de autoit3.
Outras dicas
Se você estiver com problemas com caixas de alerta, poderá desativá -las programaticamente ou criar um modo separado no seu código que as desativaria com base em uma condição (ou seja, modo de depuração).
Os programas de gravação de macro não funcionam tão bem quanto você imagina. Normalmente, programas de gravação de macro registram locais de cliques de mouse e tempo das pressões das teclas. Os melhores programas de gravação de macro usam (normalmente processamento de imagens) e (raramente) técnicas de visão computacional. As soluções que usam essas técnicas são tipicamente muito caras. (5k-10k por assento) [Não me lembro de um dos nomes das melhores versões Pode ser rápido, mas foi feito por uma empresa que foi comprada pela HP
Eu estava tentando interagir com uma página da web com o Autoit e os estúpidos alertas de javascript continuaram quebrando tudo e finalmente descobri como desativá -los, então pensei em postar aqui:
#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
Basicamente, o que isso faz é ter uma função é chamada no autoit quando a página está pronta status = 'interativa' (aparentemente isso é depois que a maior parte da página foi carregada, mas antes de "executar" qualquer coisa que eu pense) que insere algum javascript na página para Redefina a função alert () para que não faça nada (não há diálogo alerta para se preocupar em ter que clicar em OK ON). Eu testei isso e funciona.
Se você tiver a função alert () que está sendo chamada de um quadro dentro da página, precisará usar o evento OnreadyStatechange e a propriedade ReadyState do quadro, em vez do documento principal.