Перейти к содержимому

Фотография

Автоматизация flash. Adobe Genie + Webdriver + TestNG

Selenium Webdriver Adobe Genie

  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 DKarunas

DKarunas

    Новый участник

  • Members
  • Pip
  • 13 сообщений
  • ФИО:Карунас Дмитрий


Отправлено 04 марта 2014 - 12:22

Всем привет.

 

Наверное каждый QA инженер сталкивался с проблемой автоматизации флеша. Когда я слышу эту тему, в голове возникают термины - Eggplant, Sikuli, Selenium-flash... И никакого позитива :)

Недавно мне встретилась статья об Automated UI Tester for Adobe ActionScript или если кратко - Genie. Как понятно из названия – это инструмент тестирования флеш - приложений.  Его легко установить, он бесплатный и довольно удобный. Если честно, то я не планировал писать ознакомительную статью, но я думаю, что инструмент достоин внимания.

Если вы заинтересовались тогда, пожалуйста, почитайте вот эти замечательные статьи:

Или, для отчаянных - мануал.

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

 

Мне бы хотелось пойти чуть дальше и описать простой пример интеграции Genie с Selenium Webdriver и TestNg. Писать всё будем, конечно, на Java.

Мы прочитали мануал, статьи и теперь знаем, как запустить отдельный скрипт Genie. Но давайте представим, что мы тестируем онлайн-игру. Или несколько игр. Нам бы хотелось сначала открыть страницу с игрой, прокрутить Genie-скрипт, а потом как-то посмотреть, что флешка корректно взаимодействует со страницей. Тогда хорошо бы и Genie сервер запускать и останавливать автоматически. Да и вообще неплохо бы обернуть всё нами написанное в тесты под какими-нибудь jUnit  или TestNG.

Давайте попробуем.

 

1.                Автоматический запуск и остановка Genie сервера.

Давайте изначально условимся, что наш проект лежит по вот такому пути: C:\Projects\Java\GenieTestNG. Для запуска сервера можно пойти самым простым путём – добавить в проект командный файлик runServer.bat. Он будет запускать файл GenieSocketServer.jar, который, в свою очередь, входит в пакет файлов Genie и лежит по адресу C:\Libs\Genie\GenieServer\GenieSocketServer.jar. Потому наш командный файл будет выглядеть так:

 

cd C:\Libs\Genie\GenieServer\
start "GenieServer" java -Dfile.encoding=UTF-8 -Xms512M -Xmx512M -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -jar GenieSocketServer.jar

 

Поступим точно также и с остановкой сервера. Напишем командный файлик stopServer.bat:

taskkill /FI "WINDOWTITLE eq GenieServer"

 

А теперь сделаем  методы запуска и остановки:

private void startGenieServer() {

       ExecuteBatch("cmd /c start runServer.bat");

}

      

private void stopGenieServer() {

       ExecuteBatch("cmd /c start stopServer.bat");

}

      

private void ExecuteBatch(String command){

       try {

             Runtime.getRuntime().exec(command);

       } catch (IOException e) {

             e.printStackTrace();

       }

            

}

 

2.                Запуск Genie скриптов.

Вариант запуска скриптов, предложенный в мануале, нас не вполне устраивает. Нам не нужна отдельная конфигурация запуска под каждый Genie-скрипт. Нужно чтобы мы могли запускать любой скрипт, внутри тестов, передавая путь к скрипту, как параметр. Давайте создадим класс GenieScriptsExecutor и в нём метод ExecuteScript:

 

public class GenieScriptsExecutor {

       public static void ExecuteScript(String path)  {

          try {

             String[] path_arr = new String[]{path};

             Executor.startExecution(path_arr);

          }

          catch (ClassNotFoundException e) {

             e.printStackTrace();

          }

       }

}

 

 

Я умолчал, что предварительно, нужно было добавить файл Executor.jar в Buildpath нашего проекта. Этот файлик находится среди других файлов пакета Genie: Genie-binary\Genie\GenieScripts\Executor.jar.

Вернёмся к коду. Команда выполнения скрипта будет теперь выглядеть так:

GenieScriptsExecutor.ExecuteScript("Path to GenieScript.class");

 

3.                Связка с Webdriver.

Мы уже умеем выполнять нужные нам скрипты внутри кода. Можно оборачивать их в любую нужную нам логику.  Например - в тесте нужно открыть страницу с игрой, сделать несколько действий во флешке, затем проверить, что на странице появился нужный нам элемент с локатором id=“gameEnd”. Тестовый метод будет выглядеть так:

 

public void testGame(){

       openUrl("http://testsite/gamepage/");

       GenieScriptsExecutor.ExecuteScript("C:\\Projects\\Java\\GenieTestNG\\bin\\genieScripts\\GenieScript.class");

       waitforElementPresent(By.id("gameEnd"));

       }

      

      

private void openUrl(String testUrl){

             driver.get(testUrl);

       }

      

       private void waitforElementPresent(By locator) {

             try{  

                    for (int second = 0; second<10; second++) {

                           if (driver.findElements(locator).size()>0){

                                  return ;

                           }

                    Thread.sleep(1000);

                    }     

             }

             catch (Exception e) {e.printStackTrace();}

       }            

 

4.                Связка с TestNG.

Нам остаётся совсем немного.  Обернём нашу логику в тесты под testNG.  Для этого добавим к тестовому методу аннотацию @Test:

 

       @Test

public void testGame(){

       openUrl("http://testsite/gamepage/");

       GenieScriptsExecutor.ExecuteScript("C:\\Projects\\Java\\GenieTestNG\\bin\\genieScripts\\GenieScript.class");

       waitforElementPresent (By.id("gameEnd"));

       }

 

       Запуск Genie-сервера и вебдрайвера вынесем в отдельный метод и будем запускать их перед всеми тестами. Для этого создадим метод Setup и пометим его аннотацией @BeforeTest:

 

       public WebDriver driver;

      

       @BeforeTest

       public void Setup(){

             startGenieServer();

             driver = new FirefoxDriver();

             driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

       }

      

       Остановку вебдрайвера и Genie сервера также вынесем в отдельный метод. Назовём его TearDown и пометим аннотацией @AfterTest, чтобы выполнять после прохождения всех тестов.

 

       @AfterTest

       public void TearDown(){

             stopGenieServer();

             driver.close();

             driver.quit();

       }

      

Напомню, что методы startGenieServer() и stopGenieServer() мы создали в первой части статьи.

 

На этом всё.  Пример прост, без использования каких-либо паттернов проектирования или хитростей, но я надеюсь, что так получилось доступнее.

 

Спасибо.


  • 4

#2 OHuzenko

OHuzenko

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Oleksandra Huzenko


Отправлено 28 февраля 2017 - 14:41

Прошу прощения, что в старой теме, но на данный момент пробую Genie и эклипс(неон) плагин не видит. Genie еще жив?

 

Поставила портэйбл эклипс и все ожило.


  • 0



Темы с аналогичным тегами Selenium Webdriver, Adobe Genie

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных