Sikuli – технология автоматизации пользовательского интерфейса с помощью скриншотов

Posted: 26.09.2010 in testing
Метки:,

1.Краткий обзор Sikuli
2.Пример теста — соединение с FTP-сервером через Total Commander
3.Пример теста — регистрация в Bigmir

1.Краткий обзор Sikuli
На самом деле об этой программе давно писали на хабре и других ресурсах, и только когда ее выложили на dvd, который прилагается к журналу «Хакер» — обратила внимание.
Программка пока что сыровата и в ней довольно много багов, но все равно уже сейчас она много чего умеет делать.
С помощью Sikuli можно писать скрипты для управления любыми программами в ОС (Windows, Mac OS X, Linux). Таким образом, она позволяет автоматизировать все, что видно на экране при помощи скриншотов. Sikuli подкупает тем, что скрипты может писать любой пользователь, поэтому
прошу обратить особое внимание не программистов ;). Если же освоить азы python мы будем писать более сложные скрипты.
Sikuli IDE — это интегрированная среда разработки для написания скриптов. Выглядит так:

Кстати, скачать можно здесь
При написании скриптов используются простые команды:
click(img) — кликает на самом подходящем элементе интерфейса на экране или в области
switchApp(app) — открывает приложение с именем app (на Windows мы указываем полный путь)
dragDrop(img, img) — перетаскивает первый компонет и бросает его на второй. Очень удобно!
type(text) — вводит текст в текущее окно в фокусе
и т.д.
Sikuli я сразу полюбила из-за того, что с ее помощью очень удобно тестировать флешовые сайты (и не только). В общем, это отличное дополнение к нашему тестерскому инструментарию )).
Вы найдете довольно много примеров на официальном сайте, а после просмотра этого видео сами сможете написать что-то простенькое.
Собственно, с простенького и начнем — чтобы все было понятно.

2.Пример теста — соединение с FTP-сервером через Total Commander
Я редко захожу на FTP и нигде не сохраняю пароли, поэтому решила написать простенький скриптец открытия нового FTP-соединения. Мы просто укажем хост и введем свой логин+пароль.
Вот как все это выглядит:

Чтобы было понятнее, в каком месте и из-за чего вылетает ошибка, мы воспользуемся Exception FindFailed (подробнее об этом здесь)
try:
NewFtpConnection = Region(find(img))
except FindFailed:
popup("Unable to find new ftp connection")
exit(1)

Т.е. если по какой-то причине мы не сможем найти регион — вылетит попап с ошибкой "Unable to find new ftp connection" и кодом 1.
Пример настолько прост, что больше здесь и говорить не о чем, перейдем к следующему.

3.Пример теста — регистрация в Bigmir
Собственно, здесь тоже ничего сложного (смотрим скриншот):

Мы снова используем Exception FindFailed чтобы знать, в каком месте вылетит ошибка в случае чего.
Далее мы используем класс Key для нажатия клавиш. Т.е. type("d",KEY_ALT) = Alt+d выделяет текст в адресной строке, затем мы вводим URL и нажимаем клавишу Enter -> type(Key.ENTER)

type("d",KEY_ALT)
type("http://passport.bigmir.net/registration")
type(Key.ENTER)

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

endOfCycle = False

while not endOfCycle:
type(Key.PAGE_DOWN)
wait(2)
click(Pattern(img).targetOffset(-82,-2))
userInput = input("Enter captcha")
RegistrationPage.click(Pattern(img).targetOffset(-88,-1))
type(userInput)
click(img)
wait(2)
if not exists(img):
endOfCycle = True
exit(0)

- комментарии
  1. Прикольная цяцька, нужно попробывать на досуге.
    Только у нее есть один существенный недостаток — это если поменяется верстка, то все перестанет работать. =)

  2. вообще они писали, если изменения незначительные, то все должно работать (например, если кнопка поменяет цвет). К тому же, переделать скриншот очень просто.
    Правда, сейчас там больше багов на винде, чем на маках (( Надеюсь, это временно.

  3. vredin:

    добрый день, заинтересовала фраза «тестировать флешовые сайты». могли бы рассказать подробней? каким образом данное решение считывает события во флешевом объекте?

  4. оно привязано исключительно к визуальному отображению. Таким образом, вы можете эмулировать поведение обычного пользователя.

  5. в приложении надо около 50 рас кликать на одно и то же место как это сделать?
    click — один рас
    doubleClick — 2 раза
    а есть больше?

  6. Alex:

    Как справиться с кодировкой и вводом в поля русских букв?

Оставьте комментарий