AT.info ПОСИДЕЛКИ  vKontakte   facebook группа  
PageObject

Generics

Всем привет.

Работаю над автоматизацией тестирования веб-магазина(Java, WebDriver, PageObject) и столкнулся со следующей проблемой:

Периодически необходимо возвращать одним методом разные page object'ы. Например, клик по кнопке "Buy" должен возвращать page object страницы CheckOutPage в случае, если юзер авторизован или же страницу SignInPage, если он не авторизован.

Каким образом реализуются такие методы в Java? Я так понимаю необходимо использовать generics, но как-то ничего не получается.

Пока что довольствуюсь следующим:

Видео: автоматическая генерация PageObjects c помощью WebDriver

Оправдано ли использование PageObject паттерна

В последнее время просматривал свои тесты и пришел к выводу что они немного неэстетичны. решил порефакторить. Полистал информацию по PageObject паттерну, с виду все понравилось. попробовал написать небольшой пробный каркас. Написал - понравился вид кода. теперь сижу и думаю, стоит ли строить новый фреймворк и переводить 2-3 десятка тестов под него, учитывая то что разработка фреймворка займет несколько недель.

 

из плюсов вижу: удобночитаемый и удобноподдерживаемый код, рефакторинг существующих тестов(немного набрался опыта и имею новое видение структуры).

Оправдано ли использование PageObject паттерна

В последнее время просматривал свои тесты и пришел к выводу что они немного неэстетичны. решил порефакторить. Полистал информацию по PageObject паттерну, с виду все понравилось. попробовал написать небольшой пробный каркас. Написал - понравился вид кода. теперь сижу и думаю, стоит ли строить новый фреймворк и переводить 2-3 десятка тестов под него, учитывая то что разработка фреймворка займет несколько недель.

 

из плюсов вижу: удобночитаемый и удобноподдерживаемый код, рефакторинг существующих тестов(немного набрался опыта и имею новое видение структуры).

WebDriver: Основные команды

В данной заметке я хочу привести описание и примеры основных (на мой взгляд) команд в Selenium 2.0 WebDriver для автоматизации функционального тестирования web-приложений. В данной заметке я рассказывал, что собой представляет WebDriver. А в данной заметке можно посмотреть пример простейшего тестового сценария на WebDriver и основную вводную информацию про данный инструмент автоматизированного тестирования. Примеры будут представлены на C# Driver, версия библиотек – 2.9.0.

Доступ к основным функциям WebDriver предоставляет одноименная сборка WebDriver. Интерфейс IWebDriver является базовым классом, его методы можно разделить на три категории: Control of the browser (OpenQA.Selenium.IWebElement) – методы для работы с элементами страницы, Key properties and methods (OpenQA.Selenium.IWebDriver.Url) – методы для навигации, установки параметров и т.д., и другие вспомогательные методы (например OpenQA.Selenium.ISearchContext.FindElement). Непосредственно за работу с элементами страницы отвечает интерфейс IWebElement. Так как в WebDriver каждый браузер имеет свой драйвер (список поддерживаемых драйверов), то для каждого драйвера предполагается наличие собственной реализации WebElement. Например, ChromeWebElement для Chrome, FirefoxWebElement для FF и т.д. То есть для каждого поддерживаемого браузера предусмотрен свой нативный интерфейс. Также в WebDriver есть HtmlUnitDriver – кроссплатформенный виртуальный браузер. Примерчики инициализации:

Объявляем драйвер:

IWebDriver driver = new DriverName();
     driver.<user hits space>

Поиск элемента:

IWebElement element = driver.findElement(By.id("some_id"));

В новой версии Selenium организован улучшенный механизм поиска элементов страницы. Перед обращением к элементу страницу необходимо сперва вызвать метод поиска с указанием типа локатора. Также есть метод для поиска группы элементов findElements (By by). В WebDriver доступна работа со следующими типами локаторов: id, name, xpath, tagName, className, cssSelector, linkText, partionalLinkText. Пример инициализации и поиска элемента с использованием разных типов локаторов:

IWebElement element;
     element = driver.FindElement(By.Id("LoginControl_LoginButton"));
     element = driver.FindElement(By.Name("LoginControl$LoginButton"));
     element = driver.FindElement(By.XPath("//tr/td[3]/input[@id='LoginControl_LoginButton']"));

Как и в Selenium 1.0, в Selenium WebDriver можно выделить три типа основных команд:

  • Действия - функциональное действие над элементами веб-страницы или браузером. Например, заполнение полей, нажатие на кнопку и другие;
  • Проверки - выполнение проверок на тестируемой странице. Например, проверка того, что определенное поле формы имеет указанное значение, или проверка заголовка окна и т.д.;
  • Ожидания - организация ожидания наступления определенных событий на странице или со страницей (например, ожидание загрузки страницы или ожидание загрузки ajax запросов, появление на странице определенного элемента и т.д.).

Команды навигации. За навигацию отвечает класс Navigate.

Видео: PageObjects паттерн для ваших тестов (Adam Goucher)

RSS-материал