Follow me
RSS feed
My sources
My Viadeo

Utiliser Sikuli avec JRuby

Greg | 26 May 2010

Projets Sikuli est un outil permettant de simuler l'utilisation d'une interface utilisateur en se basant sur des images. Dans les faits, Sikuli est un langage de script dans lequel vous allez indiquer les différentes étapes d'une simulation en vous basant sur des captures. Voici un exemple :

sikuli

Comme vous pouvez le voir, le principe est très parlant.

Etant écrit en Java, il est très facile d'utiliser Sikuli dans un script JRuby. C'est ce que nous allons faire aujourd'hui. Avant toute chose, je dois vous avouer qu'étant sous Mac, je n'ai absolument pas testé ce qui va suivre sous Windows ou Linux.

Pour utiliser Sikuli, nous avons avant tout besoin du JAR sikuli-script.jar. Pour obtenir ce fichier, téléchargez Sikuli-IDE. Sous Windows et Linux, vous trouverez ce JAR dans le répertoire d'installation. Sous Mac il est situé dans Sikuli-IDE.app/Contents/Resources/Java/.

Sikuli utilise OpenCV. La solution la plus simple est de l'installer par vous même. En ce qui me concerne, j'ai choisi la simplicité. En effet, OpenCV est livré avec Sikuli et se trouve dans Sikuli-IDE.app/Contents/Frameworks/. J'ai donc simplement copié le répertoire Frameworks dans l'arborescence de mon application JRuby est j'ai ensuite modifié la variable d'environnement DYLD_LIBRARY_PATH en lui ajoutant le chemin vers cette copie. Ce n'est pas très propre, mais pour faire ce test cela sera largement suffisant ;)

La partie code est très simple. Nous commençons pas importer le JAR et les classes nécessaires. La documentation originale indique que nous avons besoin de trois classes : Region, Screen, et SikuliScript. Si vous souhaitez plus de détails sur les classes disponibles, vous pouvez consulter la JavaDoc.

require "java"
import 'java.lang.System'

require "sikuli-script.jar"
import 'edu.mit.csail.uid.Region'
import 'edu.mit.csail.uid.Screen'
import 'edu.mit.csail.uid.SikuliScript'

L'étape suivante consiste à lister les actions, comme nous l'avons vu dans le script Sikuli. Pour cela nous utilisons les méthodes de la classe Screen. Vous remarquerez cependant que Screen ne contient pas de méthode openApp nécessaire pour ouvrir une application. En effet, cette méthode se trouve dans la classe SikuliScript. C'est donc par elle que nous allons commencer :

script = SikuliScript.new()
script.openApp( "Safari" )

Nous pouvons maintenant utiliser les méthodes de la classe Screen pour refaire la même chose que dans le script présenté ci-dessus :

IMAGE_PATH = File.dirname(File.expand_path($0))

screen = Screen.new()
screen.wait( "#{IMAGE_PATH}/safari.png" )
screen.click( "#{IMAGE_PATH}/file.png", 0 )
screen.click( "#{IMAGE_PATH}/new.png", 0)
screen.wait( "#{IMAGE_PATH}/search.png")
screen.type("#{IMAGE_PATH}/search.png", "sikuli\n", 0)
screen.wait( "#{IMAGE_PATH}/google.png")
screen.click( "#{IMAGE_PATH}/sikuli.png", 0)
screen.wait( "#{IMAGE_PATH}/home.png")
screen.click( "#{IMAGE_PATH}/home.png", 0)

Vous noterez l'utilisation de IMAGE_PATH. En effet, il semble (sous Mac en tout cas) que les méthodes de la classe Screen ne supportent pas de recevoir des images sans chemin absolu.

Voilà, il ne reste plus qu'à faire les captures pour chaque action. Afin de vous éviter cela, voici en vrac celles que j'utilise :

sikuli sikuli sikuli sikuli sikuli sikuli sikuli


Projets Pour terminer, je voulais m'excuser pour l'indisponibilité de ce site pendant ces derniers jours. Nous avons subi un gros plantage du système dû à une mauvaise manipulation. Il en a résulté une impossibilité de redémarrer la machine et la nécessité d'une intervention sur place. C'est malheureusement aussi le signe qu'il est temps de changer de serveur. Il n'est donc pas improbable que nous subissions encore ce genre de facétie pendant les semaines à venir. J'ai donc déplacé algorithmique.net sur un serveur temporaire qui n'offre malheureusement pas la même qualité de service. En attendant nous sommes de nouveau en ligne ;)

Copyright © 2009 - 2011 Grégoire Lejeune.
All documents licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License, except ones with specified licence.
Powered by Jekyll.