вторник, 2 июля 2013 г.

Свой опыт с Genie

Итак, теперь, когда мы имеем немого представления об инструменте, я попытаюсь рассказать о своем опыте его использования. Что нужно, что бы записать простой скрипт с Geine? Запущенный сервер, Эклипс и зеленый треугольник UT на флешке (не забываем коннектиться к SWFке). Жмем на значок и запись скрипта пошла! При этом значок становится красным квадратом (ВНЕЗАПНО!), при нажатии на кортоый запись, соответственно, прекращается. Но об этом чуть позже.
Если перед записью скрипта мы выбрали в выпадающем меню пункт "Запись с тупняками" (Record Script At Application Pace),  то все задержки между кликами будут учтены в скрипте.  Запишем что-нибудь самое простецкое, закрытие входных pop-up'ов. Загружаем игру и когда появляется газета, запускаем запись. Покликали, закрыли и остановили. После остановки записи Джин любезно вываливает на окошко с телом скрипта и кнопками "скопировать" и "закрыть" - наше дело сохранить этот скрипт либо в файлик, либо пока прямо в панель Эклипса со скриптами. Получится примерно такое: 


package scripts;
import com.adobe.genie.genieCom.SWFApp;
import com.adobe.genie.executor.GenieScript;
import com.adobe.genie.executor.components.*;
import com.adobe.genie.executor.uiEvents.*;
import static com.adobe.genie.executor.GenieAssertion.*;
import com.adobe.genie.executor.enums.GenieLogEnums;

/**
 * This is a sample Genie script.
 *
//Change name of the class
public class Unnamed extends GenieScript {

public Unnamed() throws Exception

super();
}

@Override
public void start() throws Exception {
//Turn this on if you want script to exit
//when a step fails
EXIT_ON_FAILURE = false;
//Turn this on if you want a screenshot
//to be captured on a step failure
CAPTURE_SCREENSHOT_ON_FAILURE = false;

SWFApp app1=connectToApp("[object Preloader]");
(new GenieDisplayObject("SP^NewspaperPopup:::FP^NEWSPAPER:::SE^closeBtn::PX^0::PTR^0::IX^9::ITR^0",app1)).click(7,11,704,60,0,0,3,false);
(new GenieMovieClip("SP^MessageWindow:::FP^CloseButton:::SE^htmc::PX^25::PTR^0::IX^1::ITR^0",app1)).click(27,18,740,22,0,0,3,true);
}
}

где выделенны маркером те самые Genie ID и после них команда click (). Если аргументы click оставлять пустыми, то нажатие будет выполнено без подведения курсора на элемент. Теперь для того, чтобы запустить наш скрипт, нам понадобится сбросить его в текстовый файлик, обозвать его xxx.java (где xxx должен быть такой же, как и Unnamed - не забыть задать имя в теле скрипта), открыть в эклипсе. Если есть ошибки, редактор эклипса их выделит (в готовом скрипте ошибок конечно нет, но при модификации мы вполне можем что-нибудь напортачить). Следующий этап запуска - выбрать пункт Run Configuration... и в открывшемся окне в пункте New configuration во вкладке Arguments в доме, который построил Джек  строке Program Arguments указать перед .class имя скрипта (оно же имя из public class Unnamed extends GenieScript и
{
public Unnamed() throws Exception:

Т.е. если у меня скрипт называется MC, но и в теле скрипта тоже стоит MC и в классе тоже MC. Возможно, для программистов это очевидно, но я в этом объезьяна, как сказали, как написано в документе, так и описываю :) После этого кликаем Run и переходим к нашей флешке. Во время выполнения скрипта значок на SWFке вверху меняется на красный треугольник без фона.
Как видно, сам кусочек с кликами занимает всего ничего - закрыли пару окон, получили пару строчек. Но это если нам нужно сделать всего пару действий, при более сложных задачах конечно конструкции становятся сложнее. К примеру, скрипт на прохождение HOG-сцены включал в себя считывание текста с плашки, сопоставление текста с соответствующим ему объектом и клик уже непосредственно по идентифицированному объекту. Предметов в HOGe у нас от 60 до 75, для каждой сцены приходилось делать такие библиотеки со связками "текст-объект". И тем не менее, скрипт работает! Если бы получилось таки добить остальные куски и соединить их в комплект, у меня был тест, выполняющий максимальное покрытие вширь функционала за минимальное время. Подозреваю, что на этапе соединения тоже были бы свои проблемы, но увы, опыта в этом деле мне обрести пока не удалось. 

Комментариев нет:

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