PageObject (з англійської «об'єкт сторінки») — шаблон проєктування, що використовується при написанні автоматизованих тестів, який дає змогу абстрагуватись від окремих елементів HTML і інкапсулювати їх у функції доступу до елементів інтерфейсу вищого рівня, як їх бачить користувач. PageObject є об'єктом ООП, і містить методи, на основі яких створюється DSL для керування застосунком на основі якої пишуть варіанти тестування. Хоча в назві міститься слово «сторінка», один PageObject не обов'язково відповідає одній сторінці, він відповідає певній частині інтерфейсу, можливою правильнішою назвою була б Panel Object, але поточна назва вже стала поширеною.
Цей шаблон уперше застосували в проєкті WebDriver, який пізніше об'єднався з Selenium.
Переваги
- Розділення логіки роботи та представлення
- Зменшення дублювання коду для пошуку елементів керування застосунком
- При змінах інтерфейсу, що не зачіпають логіки, потрібно буде змінити лише PageObject, а не логіку тестів.
Структура
Page Object зазвичай містить лише код для доступу до елементів керування і не містить ніяких тестових припущень. Єдині перевірки, які здійснюються під час створення об'єкта — це те, що інтерфейс та елементи керування на ньому завантажились і відобразились коректно.
З елементами керування можна або взаємодіяти, або отримувати від них інформацію. Наприклад, галочка може відображатись у змінну типу boolean
Приклади
Цей паттерн можна реалізувати на різних об'єктно орієнтованих мовах. Існують реалізації на Java, JavaScript, Python, Ruby
Приклад мовою 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!'); }); });
Див. також
Посилання
- . Архів оригіналу за 10 березня 2016. Процитовано 11 березня 2016.
- Фаулер, Мартін. . martinfowler.com. Архів оригіналу за 12 березня 2016. Процитовано 11 березня 2016.
- . The Pragmatic Bookshelf. Архів оригіналу за 8 травня 2016. Процитовано 20 квітня 2016.
- . TOOLSQA. Архів оригіналу за 27 квітня 2016. Процитовано 20 квітня 2016.
- . Архів оригіналу за 13 березня 2016. Процитовано 12 березня 2016.
- . Архів оригіналу за 25 квітня 2016. Процитовано 20 квітня 2016.
- . CheezyWorld. Архів оригіналу за 7 травня 2016. Процитовано 20 квітня 2016.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
PageObject z anglijskoyi ob yekt storinki shablon proyektuvannya sho vikoristovuyetsya pri napisanni avtomatizovanih testiv yakij daye zmogu abstraguvatis vid okremih elementiv HTML i inkapsulyuvati yih u funkciyi dostupu do elementiv interfejsu vishogo rivnya yak yih bachit koristuvach PageObject ye ob yektom OOP i mistit metodi na osnovi yakih stvoryuyetsya DSL dlya keruvannya zastosunkom na osnovi yakoyi pishut varianti testuvannya Hocha v nazvi mistitsya slovo storinka odin PageObject ne obov yazkovo vidpovidaye odnij storinci vin vidpovidaye pevnij chastini interfejsu mozhlivoyu pravilnishoyu nazvoyu bula b Panel Object ale potochna nazva vzhe stala poshirenoyu Cej shablon upershe zastosuvali v proyekti WebDriver yakij piznishe ob yednavsya z Selenium PerevagiRozdilennya logiki roboti ta predstavlennya Zmenshennya dublyuvannya kodu dlya poshuku elementiv keruvannya zastosunkom Pri zminah interfejsu sho ne zachipayut logiki potribno bude zminiti lishe PageObject a ne logiku testiv StrukturaPage Object zazvichaj mistit lishe kod dlya dostupu do elementiv keruvannya i ne mistit niyakih testovih pripushen Yedini perevirki yaki zdijsnyuyutsya pid chas stvorennya ob yekta ce te sho interfejs ta elementi keruvannya na nomu zavantazhilis i vidobrazilis korektno Z elementami keruvannya mozhna abo vzayemodiyati abo otrimuvati vid nih informaciyu Napriklad galochka mozhe vidobrazhatis u zminnu tipu booleanPrikladiCej pattern mozhna realizuvati na riznih ob yektno oriyentovanih movah Isnuyut realizaciyi na Java JavaScript Python Ruby Priklad movoyu C Priklad realizaciyi 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 lt string gt GetTitle return await Page InputValueAsync title public async Task ClickButton public async Task EnterText vikoristannya v yunit testi 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 Priklad movoyu TypeScript Priklad realizaciyi export class AppPage navigateTo return browser get getParagraphText return element by css app root h1 getText clickButton enterText vikoristannya v yunit testi describe AppPage gt it should display welcome message gt Arrange const page new AppPage Act page navigateTo Assert expect page getParagraphText toEqual Welcome to client Div takozhSelenium MVC Fasad shablon proyektuvannya Posilannya Arhiv originalu za 10 bereznya 2016 Procitovano 11 bereznya 2016 Fauler Martin martinfowler com Arhiv originalu za 12 bereznya 2016 Procitovano 11 bereznya 2016 The Pragmatic Bookshelf Arhiv originalu za 8 travnya 2016 Procitovano 20 kvitnya 2016 TOOLSQA Arhiv originalu za 27 kvitnya 2016 Procitovano 20 kvitnya 2016 Arhiv originalu za 13 bereznya 2016 Procitovano 12 bereznya 2016 Arhiv originalu za 25 kvitnya 2016 Procitovano 20 kvitnya 2016 CheezyWorld Arhiv originalu za 7 travnya 2016 Procitovano 20 kvitnya 2016