Альтернативные Page Object подходы.

Page Object и Thucydides

Одним из альтернативных подходов является использование фреймворка Thucydides. Он переводится как Фукиди́д , который был древнегреческим историком и полководцем, который во время Пелопоннесской войны прославился именно качественными репортами, отсюда и название этого фреймворка.

Thucydides — это бесплатный проект с открытым исходным кодом. Разрабатываемый с 2011 года. Проект постоянно обновляется по мере добавления новой функциональности в новых версиях Selenium.

Фреймворк реализует Page Object паттерн и позволяет уменьшить дублирование кода за счет использования еще одного типа классов между тестами и страницами, так называемых «степов».

Посмотрим, как выглядят класс "степов" и page object класс:

public class StepsinBook extends ScenarioSteps {
    public StepsinBook(Pages pages) {
        super(pages);
    }
    public BookPage getPageBook()
    {
        return  getPages().currentPageAt(BookPage.class);
    } 
    @Step
    public void getMain(String url)
    {
        getPageBook().getMainPage(url);
    } 
    @Step
    public void AllBooks()
    {
        getPageBook().allBooks();
    } 
    @Step
    public void search(){
        getPageBook().search("Книга");
    }
    @Step
    public void catalog(){
        getPageBook().catalog();
    }
}

public class BookPage extends PageObject {
    @FindBy(linkText = "Все книги")
    WebElement allbooksButton;

    @FindBy(linkText = "Поиск")
    WebElement searchButton;

    @FindBy(name = "query")
    WebElement searchField;

    @FindBy(css = "button")
    WebElement searchBegin;

    public BookPage(WebDriver driver) {
        super(driver);
    }

    public void getMainPage(String url) {
        getDriver().get(url);

    }

    public void allBooks() {
         allbooksButton.click();
    }

    public void search(String searchWord) {
        searchButton.click();
        searchField.sendKeys(searchWord);
        searchBegin.click();

    }

}

Thucydides позволяет запускать тесты во всех браузерах, поддерживаемых Selenium, и полностью берет на себя работу с драйвером, его настройку, запуск и остановку.

HTML Elements

Фреймворк HTML Elements — инструмент для простой работы с элементами веб-страниц в тестах.

HTML Elements позволяет собирать page-объекты как конструктор. Из типизированных элементов вы можете собирать нужные вам блоки, которые можно объединять, комбинировать друг с другом и собирать из них page-объекты. Это значительно повышает степень переиспользования кода, делает его более читаемым и наглядным, а написание тестов — более простым.

Основной репозиторий: https://github.com/yandex-qatools/htmlelements.

Документация: https://github.com/yandex-qatools/htmlelements/blob/master/README.md.

Также документирован код проекта.

Примеры: https://github.com/yandex-qatools/htmlelements-examples.