Contexte: Mon objectif ici est de collecter les données de vitesse de connexion que mon fournisseur de services Internet acceptera afin de pouvoir démontrer des baisses spectaculaires de la vitesse de connexion de 1 à 5 minutes que je connaissais immédiatement après le passage à ce nouveau fournisseur de services Internet (même équipement - sans précédent). ces incohérences de vitesse). Ils n'acceptent (et ne peuvent accéder) aux résultats des tests de vitesse de connexion en utilisant leur site Web de test de vitesse que lorsqu'ils sont exécutés à partir d'un ordinateur câblé (c'est-à-dire pas un ordinateur connecté via Wifi).
J'ai donc créé un petit flux de travail automate qui fonctionne généralement… sauf si la vitesse de connexion diminue et si le site Web ne répond pas - ce qui contrecarre tout mon objectif!
J'avais initialement enregistré les actions initiales suivantes dans Watch-me-do:
- Cliquez sur Safari dans le dock
- Cliquez sur un dossier de favoris
- Cliquez sur le signet pour le site Web de test de vitesse
- Cliquez sur le bouton de démarrage du test de vitesse
qui est suivi du traitement des résultats qui fonctionne généralement et est tolérant aux pannes. Cependant, il peut arriver 2 choses qui entraînent une erreur fatale dans le flux de travail:
- La page Web ne se charge pas
- La page Web se charge mais le bouton de démarrage du test de vitesse ne se charge pas (la page affiche initialement un graphique de chargement où le bouton apparaîtra)
Je vais bien avec le test occasionnel échouant. J'ai du code qui analyse le texte de la page et de tels résultats apparaissent dans le journal comme un échec de test avec un horodatage.
Cependant, le script génère une erreur lorsqu'il ne peut pas cliquer sur le bouton et que tous les tests s'arrêtent. J'ai donc essayé de faire glisser l'action clic-bouton depuis le point d'observation vers le flux de travail, ce qui devient un AppleScript éditable. J'ai pensé que je pouvais éditer le script pour changer l'appel d'erreur à l'intérieur du on error
bloc. Le genre de solution résultant des travaux, mais il semble maintenant qu'il pense jamais le bouton est cliqué avec succès et se frappe finalement le temps mort, entre dans on error
et exécute la ligne I ajouté: exit repeat
.
Que se passe-t-il? Pourquoi le script semble-t-il ne pas détecter que l'action de clic a été effectuée avec succès?
Voici le code de l'action click du bouton tiré du 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
- J'ai expurgé les détails des FAI (voir les commentaires ci-dessous).