Sikuli : programmez avec des screenshots
Il nous arrive souvent de devoir refaire la même chose encore et encore sur nos ordinateurs. Et pourtant, ce sont eux les machines! Évidemment les plus érudits ont déjà tout un tas de scripts bash (ou un autre langage obscur) pour leur simplifier la vie.
Mais il reste toujours certaines interactions qu’on n’arrive pas à automatiser : celles qui touchent aux interfaces graphiques (lorsqu’aucune API n’est présente/utile). Je vous présente donc Sikuli, le moyen d’automatiser simplement ce qu’on voit à l’écran à partir de screenshots.
Installation
Sikuli est un programme open-source en Jython (un interpréteur Python en Java, silence dans le fond de la salle~) et dispose de versions compatibles avec Windows, MacOS et évidemment Linux (32 ou 64bits). Je vous renvoie donc sur la page de téléchargements du projet pour télécharger la dernière version.
Assurez-vous d’avoir toutes les dépendances:sudo apt-get install sun-java6-jre libcv4 libcvaux4 libhighgui4
Rien à compiler, décompressez le tout et lancez sikuli-ide.sh
Scripts simples
Je ne pense pas que tout vous expliquer soit réellement utile ici, l’application est très intuitive. Les instructions principales sont évidemment click(…), rightClick(…) ou type(“…”). Tout est renseigné dans la colonne de gauche.
Pour insérer un screenshot je vous recommande le raccourci clavier Ctrl+Maj+2 ou, s’il ne fonctionne pas à l’endroit où vous souhaitez le faire, utilisez le bouton de screenshot de Sikuli qui a un délai configurable dans les préférences.
Voici par exemple un script qui change la résolution de mon écran (oui, je sais, je pourrais le faire avec xrandr mais ici c’est vraiment à la portée de n’importe qui) :
Remarquez que sur certains des screenshots il y a un point rouge. Il correspond à l'endroit précis qui sera cliqué, appelé Target Offset dans Sikuli et programmable en cliquant sur le bouton représentant le screenshot.
Scripts un peu plus intelligents
Bien sûr Sikuli est proche d’un vrai langage de programmation et permet donc des scripts plus puissants, plus intelligents. On peut faire des boucles, des conditions, des wait, etc.
Voici quelques exemples simples qui parlent d’eux-même.
value = input("Entre la bonne valeur : ")
type(value + "\\n")
Beaucoup d’autres exemples sont consultables dans la documentation de Sikuli.
C’est bien beau pour les n00bs, mais pour les geeks comme moi?
Bon j’ai du me détruire le cerveau à trouver une utilité à Sikuli pour les geeks durs de dur qui savent tout faire en bash… Et j’ai trouvé!
Si vous développez des interfaces graphiques, Sikuli peut faire des unitTests sur celles-ci ! On peut aussi utiliser les possibilités de Sikuli dans ses propres logiciels Java.
On peut aussi interagir avec des grosses méchantes applications web en AJAX… Si vous trouvez d’autres utilités, laissez-les en commentaire
Lancer un script
On peut évidemment lancer un script depuis l’interface graphique de Sikuli mais le plus intéressant est de le faire depuis un terminal ou un raccourci. Rien de plus simple, il suffit d’appeler Sikuli avec le paramètre –run :/chemin/vers/sikuli/sikuli-ide.sh --run /chemin/vers/script.sikuli
J’en ai même un assigné à un raccourcis clavier (Google est votre ami, les raccourcis clavier dépendent de votre environnement graphique)