Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

SWD.Starter: Стремительный старт автоматизации тестирования UI на C# Selenium WebDriver PageObjects

Anna | 17.06.2014 | нет комментариев
Статья расскажет о том, как настроить фреймворк автоматизированного тестирования пользовательского интерфейса на языке C#, совместно с Selenium WebDriver и паттерном PageObjects.

Стартовый комплект с открытым начальным кодом – SWD.Starter – поможет написать и запустить ваш 1-й тест в течении 10 минут. Помимо этого, предлагая архитектуру фреймворка, основанную на отличных практиках автоматизации тестирования.
Каждый код SWD.Starter может быть всецело настроен под ваши задачи.

Что такое SWD.Starter?

SWD.Starter – это стартовый комплект для вашего фреймворка автоматизации тестирования. Каждый начальный код доступен на GitHub: dzhariy/SWD.Starter, а лицензия плана (unlicense), разрешает вам применять начальный код как желательно, хоть продавать.

SWD.Starter – это теснее настроенный план, содержащий каждый нужный инфраструктурный код для начала создания и запуска тестов пользовательского интерфейса через Selenium WebDriver.

SWD.Starter напористо рекомендует применение паттерна PageObjects. И в случае применения этого паттерна, вы сумеете писать новейший код авто-тестов подлинно стремительно, при этом, сберегая прекрасную архитектуру и читабельность кода.

Что нужно для начала

Для запуска плана, вам будет нужно следующее программное обеспечение:

  1. Visual Studio Express 2013 Desktop Edition (также, теоретически, поддерживаются VS2010 и VS2012)
  2. Git для выкачки плана из Github
  3. Добавочные драйвера браузеров Selenium WebDriver, которые дозволено скачать с официальной страницы плана

Для стремительной и комфортной установки ПО, я рекомендую применять пакетный администратор для Windows – Chocolatey.
Согласно инструкциям на основной странице, откройте cmd.exe, и в консольном окне, легко исполните дальнейший код:

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin

А дальше, в том же консольном окне, исполните следующие команды:

  • cinst VisualStudioExpress2013WindowsDesktop
  • cinst git

Сейчас, в консольном окне (скажем в cmd.exe либо Far Manager), предпочтете папку, куда вы хотите клонировать SWD.Starter – и запустите команду:

git clone https://github.com/dzhariy/SWD.Starter.git

Это непременный шаг, напротив план не скомпилируется:
Скопируйте chromedriver.exe и IEDriverServer.exe в папку SWD.Starter\webdrivers

А вот видео полной установки на чистую виртуалку (которую я скачал с modern.ie )

Следуй за розовым покемоном, Нео!

На каждый случай подмечу, на видео видно, что Windows на виртуальной машине требует активизацию.
Cогласно лицензионным условиям modern.ie я имею право применять такие образы легально в тестовых целях. В пользовательском соглашении сказано, что я не должен активировать Windows в этом случае.

Что такое PageObjects и отчего это настоль значимо?

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

Сейчас ваши тесты не работают со страницей напрямую, вызывая низкоуровневые способы WebDriver, а применяют больше высокоуровневые операции, специфичные для всякой страницы.

Это уменьшает число строк кода в тестах, тем самым делая код больше чиqvmk!br/>
Такой подход может быть оправдан при выполнении одноразовых задач. Скажем, если вам нужно сделать 1000 пользователей через интерфейс приложения – довольно записать создание одного, и с минимальными изменениями разместить код в цикл.
Такой подход будет губительным, если вы верите на автоматизацию тестирования в долгосрочной перспективе.
Вот один маленький пример:

Представим, доступ к одной странице продукта осуществляется из 30-ти тестов. В один красивый день, программисты принимают решение поменять вёрстку страницы:
Сейчас и элементы именуются по иному, и «логика кликов» меняется.
В этом случае, вам будет нужно внести метаморфоза в 30 тестов, взамен того, Дабы сделать это в одном классе.
Как вы думаете, сколько времени эта увлекательнейшая работа займёт?

Bot style

Тесты с применением PageObject-классов

Если легко перенести куски кода и организовать все виде нескольких PageObject-классов, то с кодом теста происходят Удивительные перевоплощения: он стает внятным, возникают действия, которые дозволено переиспользовать в других тестах, взамен того Дабы копи-пастить вызовы WebDriver.
Обратите внимание, что в коде теста стало огромнее строк… Но, это чай только за счёт комментариев и пояснений, которые главны для демонстрации в этой статье, но необязательны в вашем настоящем коде.
Уберите все комментарии и пустые строки – и код все равно останется читабельным и сократится по числу строк.

class PageObjectTest
{
    [Test]
    public void Can_buy_an_Album_when_registered()
    {
        // Традиционно, конструкторы PageObject объектов не исполняют действий на странице. 
        // Они нужны лишь для приобретения ссылки на объект.
        var registerUserPage = new RegisterUserPage();

        // Легко открывает страницу регистрации, при этом, 
        // кликая на все надобные ссылки по пути
        registerUserPage.Invoke();

        // Данный класс применяется для передачи данных. 
        // Некоторые данные могут быть заполнены «по умолчанию», но об этом – позднее        
        var newUserFromData = new UserFromDataData()
        {
            UserName = "HJSimpson",
            Password = "!2345Qwert",
        };

        // Момент заполнения и отправки формы
        registerUserPage.FillForm(newUserFromData);
        registerUserPage.Submit();

        // А дальнейший код выбирает товар из витрины, добавляет его в корзину 
        // и переходит на страницу оформления заказа. 
        var showCasePage = new ShowCasePage();
        showCasePage.Goto("Disco");
        showCasePage.SelectProduct("showCasePage");
        showCasePage.AddToCard();
        showCasePage.Checkout();

        var checkOutForm = new CheckOutForm();

        // .DefaultValues возвращает класс с теснее заполненными данными по умолчанию. 
        // Если нас что-то не устраивает – неизменно дозволено заменить. 
        var checkoutFromData = UserCheckoutFromData.DefaultValues;

        // Вот как раз это и не устраивает! А давайте JavaScript инъекцию добавим!
        checkoutFromData.Email = @"chunkylover53@aol.com<script type=""text/javascript"">
                                   /* <![CDATA[ */
                                   (function(){try{var s,a,i,j,r,c,l,b=document.getElementsByTagName(""script"");l=b[b.length-1].previousSibling;a=l.getAttribute('data-cfemail');if(a){s='';r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j =2){c=parseInt(a.substr(j,2),16)^r;s =String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})();
                                    /* ]]> */
                                   </script>";

        CheckoutCompletePage  checkoutCompletePage = checkOutForm.Submit();

        Assert.IsTrue(checkoutCompletePage.GetPageTitle().Contains("Checkout Complete"));
    }
}

Page Object
Ну что? Хотите создавать тесты, применяя PageObject?

1-й Smoke-тест в SWD.Starter

Если вы задаётесь вопросом: с чего начать автоматизацию тестирования? То, у меня для вас есть дюже примитивный результат, тот, что подойдёт в 99% случаев.
Начните со смоук тестов для всякой страницы приложения.

Рецепт:

  1. Взять страницу всякого яруса вложенности
  2. Открыть страницу
  3. Проверить, что все значимые элементы – присутствуют на странице.

И в итоге мы получим легкий тест, тот, что в случае удачного прохода говорит:
Что все значимые элементы отдельной страницы до сриложения, и другие библиотечные функции, специфичные для определенного тестируемого приложения.
Традиционно, для отдельного тестируемого приложения должна быть лишь одна библиотека Модели.

  • Demo.TestProject – план, содержащий комплекты тестов. Таких тестовых планов может быть несколько. Вот, скажем, Demo.Tutorial – это тоже план с тестами, и он также как Demo.TestProject использует библиотеку Модели (Demo.TestModel ).
  • Demo.Tutorial – попытка создания начальства по работе с Swd.Starter. Пока ещё не вовсе завершенный, но теснее теперь, дозволено читать файл «Ch00Introduction.cs» и пробовать запускать тесты.

Обратная связь, лицензия и сотрудничество

Лицензия плана разрешает вам изготавливать всякие действия с кодом плана, которые может ограничить лишь ваша фантазия. (http://unlicense.org/)
Код дозволено видоизменять, применять в торговых целях, выкладывать на торренты и майнить биткоины, если хотите.

Но, мне бы было дюже благотворно получить от вас обратную связь. Оставить комментарии дозволено как здесь, так и на странице плана на Github.
А отменнее каждого, если вы отправите настоящий чёткий пацанячий pull-request в репозиторий на github.
Но, если это будет большое метаморфоза с перелапачиванием половины кода, то, недурно было бы сначала его обсудить.

Над чем дозволено трудиться? – Там поле примерно не паханное:

  • Документация
  • Туториал
  • Новейший пригодный код, решающий настоящие задачи
  • Новые демонстрационные планы
  • Инструкции

И ещё. 28-го февраля 2014 в Киеве, я планирую выступать с докладом на конференции Selenium Camp 2014. Отчет будет посвящён плану SWD Page Recorder, но и плану SWD.Starter будет посвящено не немного времени. А позже, запись доклада появится в разделе архива материалов, через 3-4 месяца позже конференции.
Я буду доступен все два дня, и буду готов пообщаться «в живую» как позже моего доклада, так и в течении каждого времени конференции.

Пригодные материалы

Удачной вам автоматизации.

P.S.: SWD расшифровывается как Selenium WebDriver

Это было пригодно?

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

Проголосовало 14 человек. Воздержалось 9 человек.

 

 Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB