Antecedentes: mi objetivo aquí es recopilar datos de velocidad de conexión que mi ISP aceptará para poder demostrar caídas dramáticas en la velocidad de conexión de 1 a 5 minutos que experimenté inmediatamente después de cambiar a este nuevo ISP (el mismo equipo - sin antes tales inconsistencias de velocidad). Solo aceptan (y pueden acceder) a los resultados de las pruebas de velocidad de conexión utilizando su sitio web de prueba de velocidad cuando se ejecutan desde una computadora con cable (es decir, no una conectada a través de Wifi).
Así que creé un pequeño y rápido flujo de trabajo de automatización que generalmente funciona ... a menos que la velocidad de conexión se desactive y el sitio web no responda, ¡lo que entorpece todo mi objetivo!
Inicialmente había grabado las siguientes acciones iniciales en un programa de "ver y hacer":
- Haz clic en Safari en el muelle
- Haz clic en una carpeta de marcadores
- Haga clic en el marcador para el sitio web de prueba de velocidad
- Haz clic en el botón de inicio de la prueba de velocidad
seguido de un procesamiento de los resultados que generalmente funciona y es tolerante a fallos. Sin embargo, hay 2 cosas que pueden suceder que conducen a un error fatal en el flujo de trabajo:
- La página web no se carga
- La página web se carga, pero el botón de inicio de la prueba de velocidad no se carga (la página muestra inicialmente un gráfico de carga donde aparecerá el botón)
Estoy bien con la prueba ocasional que falla. Tengo un código que analiza el texto en la página y dichos resultados aparecen en el registro como un error de prueba con una marca de tiempo.
Sin embargo, la secuencia de comandos emite un error cuando no puede hacer clic en el botón y todas las pruebas posteriores se detienen, por lo que intenté arrastrar la acción de hacer clic con el botón desde el botón de ver y hacer al flujo de trabajo, que se convierte en un script de manzana editable. Pensé que podría editar el script para cambiar la llamada de error dentro del bloque on error
. El tipo de solución resultante funciona, pero ahora parece que NUNCA cree que el botón se haga clic con éxito y finalmente llegue al tiempo de espera, entre en on error
y ejecute la línea que agregué: exit repeat
.
Entonces, ¿qué está pasando aquí? ¿Por qué parece que la secuencia de comandos no detecta que la acción de clic se realizó correctamente?
Aquí está el código de la acción de hacer clic en el botón que se arrastró desde 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
- Redacté los detalles del ISP (vea los comentarios a continuación).