Background: il mio obiettivo qui è quello di raccogliere i dati sulla velocità di connessione che il mio ISP accetterà, così posso dimostrare un calo drammatico della velocità di connessione di 1-5 minuti che ho riscontrato immediatamente dopo il passaggio a questo nuovo ISP (stessa attrezzatura - senza precedenti incongruenze di tale velocità). Accettano (e possono accedere) solo i risultati del test della velocità di connessione utilizzando il loro sito web di test di velocità quando vengono eseguiti da un computer cablato (ad esempio non uno collegato via WiFi).
Così ho creato un rapido flusso di lavoro automatico per l'automaker che generalmente funziona ... a meno che la velocità di connessione non venga eliminata e il sito Web non risponda, il che ostacola il mio intero obiettivo!
Inizialmente avevo registrato le seguenti azioni iniziali in un watch-me-do:
- Fai clic su Safari nel dock
- Fai clic su una cartella dei preferiti
- Fai clic sul segnalibro per il sito web del test di velocità
- Fai clic sul pulsante di avvio del test della velocità
che è seguito dall'elaborazione dei risultati che generalmente funziona e è tollerante ai guasti. Tuttavia, ci sono 2 cose che possono accadere che portano a un errore fatale nel flusso di lavoro:
- La pagina web non viene caricata
- La pagina web viene caricata ma il pulsante di avvio del test di velocità non viene caricato (la pagina mostra inizialmente un grafico di caricamento in cui verrà visualizzato il pulsante)
Sto bene con il fallimento occasionale del test. Ho un codice che analizza il testo sulla pagina e tali risultati vengono visualizzati nel registro come un errore di test con un timestamp.
Tuttavia, lo script genera un errore quando non è in grado di fare clic sul pulsante e tutti gli ulteriori test si interrompono, quindi ho provato a trascinare l'azione del pulsante del watch-me-do nel flusso di lavoro, che diventa un applescript modificabile. Ho pensato di poter modificare lo script per modificare la chiamata di errore all'interno del blocco on error
. Il workaround risultante funziona, ma ora sembra che non pensi MAI che il pulsante venga cliccato con successo e alla fine prenda il time-out, entri in on error
e faccia la riga che ho aggiunto: exit repeat
.
Quindi cosa sta succedendo qui? Perché lo script sembra non rilevare che l'azione di clic è stata eseguita correttamente?
Ecco il codice dall'azione del pulsante clic trascinato dal watch-me-do:
on run {input, parameters}
-- Click the “Start” button.
tell application "Safari" to activate --I added this line
delay 6.095782
set timeoutSeconds to 2.0
set uiScript to "click UI Element \"Start\" of group 1 of group 2 of UI Element 1 of scroll area 1 of group 1 of group 1 of tab group 1 of splitter group 1 of window \"Speed Test\" of application process \"Safari\""
my doWithTimeout(uiScript, timeoutSeconds)
return input
end run
on doWithTimeout(uiScript, timeoutSeconds)
set endDate to (current date) + timeoutSeconds
repeat
try
run script "tell application \"System Events\"
" & uiScript & "
end tell"
exit repeat
on error errorMessage
if ((current date) > endDate) then
exit repeat --I replaced an error call here
end if
end try
end repeat
end doWithTimeout
- Ho cancellato i particolari dell'ISP (vedi i commenti sotto).