четверг, 27 июня 2013 г.

Genie, основные элементы

UPD: великодушно простите что скрины протухли
Обманула - перед тем, как начать разбираться со скриптами, нам нужно научиться работать с основными элементами, чем мы и займемся.
Итак, мы подняли Genie у себя и запустили эклипс с соответствующим плагином. А дальше? Рассмотрим основные элементы и что умеет наш Джин.
Для начала, чтобы можно было сразу проверять элементы в действии, законнектимся к нашей  SWFке (предварительно запущенной в браузере) - названия в списке могу быть другими, но это ваша SWF

После коннекта мы получим дерево с объектами, а в таблице ниже будут свойства выбранного и, самое важное, genieID - тот самый уникальный идентификатор для каждого (!) объекта.

К объекту можно обращаться через этот идентификатор. Свойства (Property) могут не показывать последнее состояние приложения, однако их можно вызвать - это будет освещено позже.
Итак, мы в коннекте с нашей SWF, видим дерево объектов. Но как в этом дереве найти нужный нам объект? Для этого рассмотрим панельку [тут был скрин, простите, гугл его скушал]
Начнем со значка Лупа. Именно этот элемент позволит нам, кликнув на объекте в SWF, увидеть его в дереве. У этого значка есть два состояния (помимо выключенного):
[тут был скрин, простите, гугл его скушал]
Первое - обычное - позволит найти объект и провзаимодействовать с ним (скликнуть). Второе:
[тут был скрин, простите, гугл его скушал]
кликнет на объект, но без взаимодействия - оно нужно, если вам нужно найти его в дереве, но не скликивать из рабочей области. К примеру, в HOG сцене ( (Hidden Object Game - игры, где на картинке нужно найти заданные объекты) мне нужен ID элемента, но если я кликну на него с взаимодействием (первое состояние), то объект будет отмечен как найденный и просто "уйдет" со сцены, что, мягко говоря, неудобно, если с ним требуется дальнейшая работа. В этом случае второе состояние поиска просто незаменимо. Третье нажатие на Лупу отключит поиск.
Кисточка позволит нам подстветить в SWF выбранный в дереве объект. Просто выделите объект, кликните на кисточку и в SWF вы увидите, что он выделился красным контуром:
[тут был скрин, простите, гугл его скушал]
Линейка позволит получить локальные координаты выбранного объекта. Честно говоря, не пользовалась и в моем случае координаты - не совсем то, к чему хотелось бы привязываться, но все равно круто. Панель с координатами появится в SWF прямо под значком Genie, водите по объектам, а в панельке показываются цифры.
Камера делает скриншот, через который тоже можно будет обратиться к элементу, указав путь и степень толерантности (точность совпадения, с которой будет сравниваться указанный рисунок с искомым на экране - от 0 до 100, чем ниже толерантность, тем точнее Genie будет пытаться определить объект). Эта функция очень удобна, если вдруг в игре или на экране имеется HTMLный элемент, к которому необходимо обратиться. Нужно отметить, что не стоит увлекаться чрезмерной точностью совпадения - при достаточно высокой толерантности Джин может просто не найти объект, соотвественно, при низкой - кликнуть не на тот, что нам нужен. Область скриншота лучше брать с захватом побольше - выше вероятность, что будет кликнут именно указанный, а не похожий объект. Как пользоваться камерой: жмем на значок, затемняется область и появляется крестик, выделяем нужную нам область и после отжатия клавиши мыши будет показано окно с рисунком и кнопками:

Сохранить понятно что делает, Recapture переснимает, с закрытием тоже понятно, а Add Hotspot добавляет на рисунок область, непосредственно в которую будет сделан клик. Т.е. по умолчанию клик буден сделан в центр, но если нам нужно кликнуть на кнопку, которая на рисунке не в центре, то просто задаем "горячую точку" и можем не беспокоится.
Добавить в скрипт клик на указанный рисунок можно используя класс функций Com.adobe.genie.executor.uiEvents.UIImage, например:
new UIImage().clickImage(String imagePath , int… tolerance) 
new UIImage ().clickImageHotspot (String imagePath , int… tolerance)
Запросить свойства объекта (Request Genie Properties of Object) вот та функция, которая пригодится нам в случае, когда просто Property не показывают последние изменения в SWF. К примеру, у меня меняется плашка в SWF, а Genie в свойствах показывает старый текст, нажимаем "Запросить свойства объекта" и получаем развернутый список, где поле text уже обновлено и содержит текущий текст.
Обновить дерево объектов - ну тут понятно, обновляется дерево, однако иногда это не помогает получить обновленные свойства и их нужно запрашивать предыдущей кнопкой.
И наконец несколько пунктов, которые не вынесены на панель, а появляются по клику на стрелочку [тут был скрин, простите, гугл его скушал]
Hide Genie Icon убирает значок  UT с флешки (иногда здорово мешает), минус в том, что только на время пока запущен Эклипс. Впрочем, иногда в разных браузерах значок сам отваливается.
Record Script At Application Pace скрипт будет записан с простоями, т.е. ваши паузы будут учтены в виде wait'ов
Disconect SWF с этим все ясно, отсоединиться от флешки.
Find component by GenieID тоже не требует особых пояснений.
Save Tree XML in File ясно что делает, но у меня не открылось сохраненное дерево, увы. Может кто-то лучше меня разбирается что с этим потом делать, поделитесь.
Вот, собственно, все функции Джина и их с головой достаточно чтобы сделать что-то удобоваримое. К сожалению, на проекте урезали бюджет и я пока не занимаюсь дальнейшей автоматизацией, все что у меня получилось - несколько тестов, не соединенных в слитный комплект, но ни с одни инструментом кроме Джина мне не удавалось добиться даже такого результата: получилось сделать скрипт на прохождение HOG сцен (сцены с предметами, которые нужно найти на ней), делать оплаты (фейковые, с элементами HTML - вот где пригодилось распознавание картинок), пройти туториал. Вероятно, Джин можно использоваться в связке с селениумом, может получится плодотворное сотрудничество. Возможно, опробую на сайте с флешем, если таковой дадут погонять :)
UPD: вот тут как раз человечище связал таки Genie c Webdriver и TestNG, получилось удобно

2 комментария: