Sikuli — program ANYTHING using GUI screenshoots

/15:10 31-Янв-2010

 

Сказка


Представьте на минуту, что Вы — несчастный программист, который каждый день добирается на работу на автобусе, расписание которого невозможно предугадать. В такой ситуации было бы очень удобно, завтракая дома, получать на телефон SMS, сообщающее, что автобус уже через пять минут будет на Вашей остановке.

К счастью, транспортная компания (которая не удосужилась составить четкого расписание) содержит сайт, на котором в реальном времени с помощью Google Maps можно узнать, где сейчас находится тот или иной автобус. И вот в один прекрасный день Ваше терпение лопается и Вы садитесь писать скрипт, который будет отправлять ту желанную SMS-ку. Но все не так просто. Придется долго повозиться, чтобы по карте и маленькому кружочку на ней оценить скорость и время прибытия реального транспортного средства на Вашу остановку. Вы ведь не можете просто написать: «хочу получать SMS, когда вот эта точка попадет вот в этот прямоугольник на карте». Или все-таки можете?



«Глаза Бога»


Именно так переводится «sikuli» с языка мексиканского племени Хуичол.

Sikuli — технология поиска и автоматизации работы с элементами GUI на основе изображений (скриншотов). Авторами проекта являются Rob Miller (профессор Массачусетского технологического института), Tsung-Hsiang Chang (выпускник МИТа) и Tom Yeh (студент Мэрилендского университета). Их проект стал лучшей студенческой работой на конференции «User Interface Software and Technology», проводимой под эгидой ACM (Association for Computing Machinery).

Так что же такое Sikuli? Фактически это API, позволяющее писать сценарии (на языке Python), автоматизирующие работу с пользовательским интерфейсом. Большим преимуществом является то, что нет необходимости иметь доступ к исходникам приложений, с которыми Вы собираетесь работать. Для поиска конкретных элементов GUI Sikuli использует лишь их скриншоты, а для управления приложением — эмулирует такие действия пользователя, как нажатия кнопок мыши и клавиатурный ввод. Как следствие — Вы можете автоматизировать абсолютно любые приложения на любой операционной системе, на которой стоит Sikuli.

Весьма не просто все описать словами, поэтому приведу фрагмент сценария, самостоятельно настраивающего интернет-соединение:



Причем это не диаграмма и не часть какой-нибудь презентации. Это непосредственно код сценария. Не знаю как Вам, но мне не доводилось передавать в функции изображение кнопки =)

IDE


Ясно, что в обычном текстовом редакторе такие сценарии не пишутся. Поэтому разработчики создали весьма лаконичную (но требующую доработки) среду программирования — Sikuli IDE.

Тулбар предоставляет программисту всего пять действий на выбор:
  1. image — выделяем область экрана и она чудесным образом становится литералом (если можно так выразится) в нашем сценарии.
  2. загружаем изображения для последующего использования в сценарии.
  3. image — определяем геометрический регион (прямоугольную область экрана), чтобы сузить область поиска элементов интерфейса.
  4. image — запуск сценария.
  5. image — своего рода отладка. Запускает сценарии, отображая все его действия.

Свое творчество можно сохранить в виде исходников (пачка скриншотов, текстовый python-сценарий и визуальный вариант сценария в html), либо экспортировать в исполняемый skl-файл. Что делать с последним я пока не выяснил.

Установить Sikuli IDE можно на Mac OS X, Linux и Windows. В качестве интерпретатора выступает Jython, поэтому для работы необходимо иметь Java 6+.

Sikuli API


Несколько слов об API, которое предоставляют разработчики. В него входят всего два класса: Key и VDict. Первый — набор констант для специальных (не символьных) клавиш, таких как Enter, Tab, Home и т.д. Второй — аналог python-словарей, использующий изображения в качестве ключей. Помимо этого в распоряжении разработчиков несколько десятков функций, большая часть которых принимает в качестве параметров изображения (скриншоты элементов интерфейса). Вот некоторые из них:

Таким образом Ваш сценарий может сделать всё, что может сделать обычный пользователь компьютера.

Unit testing для GUI


Еще одной возможностью (и вероятно более серьезной) Sikuli является написание скриптов для тестирования интерфейсов.

Опять-таки разработчики Sikuli IDE постарались сократить размер кода, необходимый для выполнения задачи. Тестирующий код автоматически заворачивается в python-класс, производный от junit.framework.TestCase, а разработчику остается лишь реализовать стандартные методы setUp(), tearDown() и непосредственно тестовые методы.

Доступ к панели тестирования можно получить через пункт меню View/Unit Test или же с помощью комбинации Ctrl+U. В ней Вы и найдете кнопку Run, отвечающую за запуск тестирования.

Личные впечатления


Проект определенно интересен. Пока есть лишь beta-версия, которая требует еще немало улучшений как в плане производительности, так и в реализации поиска элементов управления.

Написанный мной сценарий для запуска iTunes, принудительного обновления подкастов, синхронизации подключенного iPod-a, его извлечения и закрытия iTunes задачу пока не выполнил. Вместо этого он запустил iTunes, порылся в аудиокнигах (может что-то искал?), сразу же извлек iPod и закрыл программу =)

Более простую, но менее полезную задачу, с помощью Sikuli мне все-таки удалось решить. Скрипт сумел самостоятельно отправить гуглу привет через google toolbar в firefox. Хотя и не сразу. Пришлось выдать ему информацию, в какой части экрана искать поле ввода для дальнейшего поиска. В противном случае он пытался ввести 'hello' в адресную строку и, забыв про меня, погрузиться в дебри Всемирной паутины.

Возвращаясь к автобусу, можно сказать, что в настоящее время решить данную задачу с такой легкостью и непринужденностью наверно не получиться. Но проект Sikuli — начало нового подхода к программированию, который в скором времени может открыть невиданные возможности для автоматизации такого рода действий. Возможно этот подход выглядит не слишком серьезно, но это не значит, что он бесполезен. Но если Вы все-таки предпочитаете более серьезное программирование, то флаг Вам в руки — внесите свой вклад в этот замечательный open-source проект. Ведь за такой внешней простотой скрывается очень не простая реализация Sikuli.

Демо-видео


Вот официальный ролик, демонстрирующий работу с Sikuli IDE.


 

Поделиться с друзьями

Twitter Mail Facebook MySpace Linkedin Digg Google Delicious Stumbleupon Addthis
Все права на материалы принадлежат их уважаемым авторам. редакция портала не может нести ответственность за достоверность информации, содержащейся в комментариях пользователей.