Перейти до вмісту

PageObject

Очікує на перевірку
Матеріал з Вікіпедії — вільної енциклопедії.

PageObject (з англійської «об'єкт сторінки») — шаблон проєктування, що використовується при написанні автоматизованих тестів[1], який дає змогу абстрагуватись від окремих елементів HTML і інкапсулювати їх у функції доступу до елементів інтерфейсу вищого рівня, як їх бачить користувач. PageObject є об'єктом ООП, і містить методи, на основі яких створюється DSL для керування застосунком на основі якої пишуть варіанти тестування. Хоча в назві міститься слово «сторінка», один PageObject не обов'язково відповідає одній сторінці, він відповідає певній частині інтерфейсу, можливою правильнішою назвою була б Panel Object, але поточна назва вже стала поширеною.[2]

Цей шаблон уперше застосували в проєкті WebDriver, який пізніше об'єднався з Selenium.[3]

Переваги

[ред. | ред. код]
  • Розділення логіки роботи та представлення
  • Зменшення дублювання коду для пошуку елементів керування застосунком
  • При змінах інтерфейсу, що не зачіпають логіки, потрібно буде змінити лише PageObject, а не логіку тестів.[1]

Структура

[ред. | ред. код]

Page Object зазвичай містить лише код для доступу до елементів керування і не містить ніяких тестових припущень. Єдині перевірки, які здійснюються під час створення об'єкта — це те, що інтерфейс та елементи керування на ньому завантажились і відобразились коректно.[1]

З елементами керування можна або взаємодіяти, або отримувати від них інформацію. Наприклад, галочка може відображатись у змінну типу boolean

Приклади

[ред. | ред. код]

Цей паттерн можна реалізувати на різних об'єктно орієнтованих мовах. Існують реалізації на Java[4], JavaScript[5], Python[6], Ruby[7]

Приклад мовою C #

[ред. | ред. код]
Приклад реалізації
public class HomePage
{
        private const string PagePath = "https://localhost:6001/home-page";

        private IBrowser _browser;
        private IPage _page;

        public HomePage()
        {
            Browser = await Playwright
              .Create()
              .Chromium.LaunchAsync(new BrowserTypeLaunchOptions());
        }

        public async Task Navigate()
        {
            Page = await Browser.NewPageAsync();
            await Page.GotoAsync(PagePath);
        }

        public async Task<string> GetTitle()
        {
            return await Page.InputValueAsync("#title");
        }

        public async Task ClickButton() { . . . }
        public async Task EnterText() { . . . }
}
}}

// використання в юніт-тесті

[Fact]
public async Task HomePage_should_have_correct_title()
{
            // Arrange
            var page = new HomePage();

            // Act
            await page.Navigate();
            var title = await page.GetTitle();

            // Assert
            Assert.Equal(expected: "Home", actual: title);
}

Приклад мовою TypeScript

[ред. | ред. код]
Приклад реалізації
export class AppPage {
	navigateTo() {
		return browser.get('/');
	}

	getParagraphText() {
		return element(by.css('app-root h1')).getText();
	}

	clickButton() { . . . }
    enterText() { . . . }
}

// використання в юніт-тесті

describe('AppPage', () => {
	it('should display welcome message', () => {
        // Arrange
        const page = new AppPage();

        // Act
		page.navigateTo();
		
        // Assert
        expect(page.getParagraphText()).toEqual('Welcome to client!');
	});
});

Див. також

[ред. | ред. код]

Посилання

[ред. | ред. код]
  1. а б в Test Design Considerations — Selenium Documentation. Архів оригіналу за 10 березня 2016. Процитовано 11 березня 2016.
  2. Фаулер, Мартін. PageObject. martinfowler.com. Архів оригіналу за 12 березня 2016. Процитовано 11 березня 2016.
  3. Page Objects in Python. The Pragmatic Bookshelf. Архів оригіналу за 8 травня 2016. Процитовано 20 квітня 2016. [Архівовано 2016-05-08 у Wayback Machine.]
  4. Set up Page Object Model (POM) in Selenium Automation Framework. TOOLSQA. Архів оригіналу за 27 квітня 2016. Процитовано 20 квітня 2016.
  5. Protractor - end to end testing for AngularJS. Архів оригіналу за 13 березня 2016. Процитовано 12 березня 2016.
  6. 6. Page Objects — Selenium Python Bindings 2 documentation. Архів оригіналу за 25 квітня 2016. Процитовано 20 квітня 2016.
  7. UI Tests – Introducing a simple DSL. CheezyWorld. Архів оригіналу за 7 травня 2016. Процитовано 20 квітня 2016.