31/10/2010

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)

En savoir plus

  1. | #1

    Ça m’a l’air très sympathique ce petit langage pour automatiser certaines tâches :) Je le garde sous la main.

  2. egan
    | #2

    Les dépendances libcvaux4 libhighgui4 sont-elles disponibles sous Debian Squeeze ?

  3. LeSanglier
    | #3

    Merci, pour l’article !!
    Ce logiciel est extra, à titre indicatif il fonctionne sur Kubuntu 9.10 après l’avoir préalablement compilé.

  4. | #4

    Fort sympathique, fallait y penser ! :p

  5. | #5

    @egan Je pense que sous Debian c’est libcvaux1 et libhighgui1 mais je ne peux pas t’assurer la compatibilité avec cette version. Il faudra peut-être trouver des versions plus récentes de cette librairie.

  6. LeSanglier
    | #6

    @Tito
    Perso, sous Kubuntu 9.10, il n’y a pas les bonnes version de OpenCV, mais en compilant à la mano Sikuli, çà fonctionne quand même bien.

  1. Pas encore de trackbacks