Использование маппинга пользовательского интерфейса в Selenium RC


(Mykhailo Poliarush) #1

Карта пользовательского интерфейса (UI map) - это хранилище идентификаторов-указателей на элементы пользовательского интерфейса приложения. Карта создается чтобы тестовый скрипт через нее обращался к тестируемым элементам. UI map также хранит в себе объекты тестового скрипта, которые соответствуют элементам интерфейса тестируемого приложения.


В чем же польза UI map? Основное назначение это упрощение управлением тестовыми скриптами. Например, если вам требуеться изменить указатель, то вместо прочесывания всего кода в распоряжении имеется централизованное место хранения, где его можно легко отыскать. Большим преимуществом будет внесение изменений лишь в одном месте карты, чем в нескольких местах кода или, еще хуже, нескольких скриптах.


Суммируя, можно выделить два основных  преимущества UI Mapping: 



  • Использование централизованного места для хранения объектов пользовательского интерфейса вместо поддержки разбросанных по всему коду элементов.

  • Скрытые идентификаторы и имена HTML можно заменить более понятными, что значительно облегчит читабельность тестовых скриптов

Рассмотрим следующий пример (java) selenium тестов для сайта:

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; } public void testNew() throws Exception {
selenium.open("http://www.test.com");
selenium.type("loginForm:tbUsername", "xxxxxxxx");
selenium.click("loginForm:btnLogin");
selenium.click("adminHomeForm:_activitynew");
selenium.waitForPageToLoad("30000");
selenium.click("addEditEventForm:_IDcancel");
selenium.waitForPageToLoad("30000");
selenium.click("adminHomeForm:_activityold");
selenium.waitForPageToLoad("30000");
}
{/syntaxhighlighter}


Этот скрипт вряд ли будет понятен кому-то, кто не знаком с исходной страницей авторизации. Даже постоянные пользователи приложения будут иметь трудности с пониманием работы скрипта. Гораздо лучше выглядят следующие строки:

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; } public void testNew() throws Exception {
selenium.open("http://www.test.com");
selenium.type(admin.username, "xxxxxxxx");
selenium.click(admin.loginbutton);
selenium.click(admin.events.createnewevent);
selenium.waitForPageToLoad("30000");
selenium.click(admin.events.cancel);
selenium.waitForPageToLoad("30000");
selenium.click(admin.events.viewoldevents);
selenium.waitForPageToLoad("30000");
}
{/syntaxhighlighter}


В примере выше по-прежнему отсутствуют комментарии, однако он удобочитаем за счет использования ключевых слов. (Имейте ввиду, что UI Map не является заменой комментариев! Комментарии по прежнему очень важны при разработке автоматизированных тестов.) И еще красивее будет выглядеть следующий пример:  

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }public void testNew() throws Exception {

         // Открыть url приложения.
         selenium.open("http://www.test.com");

         // Введите имя администратора.
         selenium.type(admin.username, "xxxxxxxx");

         // Щелкните кнопку Login.
         selenium.click(admin.loginbutton);

         // Щелкните кнопку Create New Event.
         selenium.click(admin.events.createnewevent);
         selenium.waitForPageToLoad("30000");

         // Щелкните кнопку Cancel.
         selenium.click(admin.events.cancel);
         selenium.waitForPageToLoad("30000");

         // Щелкните кнопку View Old Events.
         selenium.click(admin.events.viewoldevents);
         selenium.waitForPageToLoad("30000");

}
{/syntaxhighlighter}


Основная идея состоит в использовании централизированного места для объектов и использования удобочитаемых названий для этих объектов.


Чтобы применить этот подход на практике, можно использовать java файлы, описывающие свойства (*.properties). Такие файлы содержат пары ключ/значение, где каждый ключ и значения являются строками.


Рассмотрим файл prop.properties, в котором легко понятные идентификаторы присваиваются как ‘псевдонимы’ для ранее использованных HTML объектов.

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }admin.username = loginForm:tbUsername
admin.loginbutton = loginForm:btnLogin
admin.events.createnewevent = adminHomeForm:_activitynew
admin.events.cancel = addEditEventForm:_IDcancel
admin.events.viewoldevents = adminHomeForm:_activityold
{/syntaxhighlighter}


Указатели по-прежнему ссылаются на объекты HTML, однако мы определяем слой абстракции между тестовым скриптом и элементрами пользовательского интерфейса. Значения, считываемые из файла свойств (*.properties) представляют собой карту пользовательского интерфейса, то есть UI Map. Более подробно Map файл будет рассмотрен в следующем выпуске.