{"id":15102693,"url":"https://github.com/romanow/playwright-page-object","last_synced_at":"2026-02-07T05:02:03.810Z","repository":{"id":248136265,"uuid":"827858402","full_name":"Romanow/playwright-page-object","owner":"Romanow","description":"Page Object pattern for Playwright framework","archived":false,"fork":false,"pushed_at":"2025-07-10T12:31:50.000Z","size":8157,"stargazers_count":1,"open_issues_count":5,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-25T11:33:45.017Z","etag":null,"topics":["java","kotlin","page-object","page-object-pattern","playwright"],"latest_commit_sha":null,"homepage":"https://romanow.github.io/playwright-page-object/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Romanow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-07-12T14:28:24.000Z","updated_at":"2025-07-10T12:28:32.000Z","dependencies_parsed_at":"2024-07-12T16:54:40.600Z","dependency_job_id":"fb9f2358-0916-43d7-879d-2e0fd55903a9","html_url":"https://github.com/Romanow/playwright-page-object","commit_stats":{"total_commits":40,"total_committers":1,"mean_commits":40.0,"dds":0.0,"last_synced_commit":"7ca594afd889d8083f21b3da91fcb58669c7c76b"},"previous_names":["romanow/playwright-page-object-lib"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Romanow/playwright-page-object","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Romanow%2Fplaywright-page-object","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Romanow%2Fplaywright-page-object/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Romanow%2Fplaywright-page-object/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Romanow%2Fplaywright-page-object/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Romanow","download_url":"https://codeload.github.com/Romanow/playwright-page-object/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Romanow%2Fplaywright-page-object/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29186742,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T03:35:06.566Z","status":"ssl_error","status_checked_at":"2026-02-07T03:34:57.604Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","kotlin","page-object","page-object-pattern","playwright"],"created_at":"2024-09-25T19:04:41.830Z","updated_at":"2026-02-07T05:02:03.793Z","avatar_url":"https://github.com/Romanow.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CI](https://github.com/Romanow/playwright-page-object/actions/workflows/build.yml/badge.svg)](https://github.com/Romanow/playwright-page-object/actions/workflows/build.yml)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)\n[![Release](https://img.shields.io/github/v/release/Romanow/playwright-page-object?logo=github\u0026sort=semver)](https://github.com/Romanow/playwright-page-object/releases/latest)\n[![Codecov](https://codecov.io/gh/Romanow/playwright-page-object/branch/master/graph/badge.svg?token=Cckw6pHLh7)](https://codecov.io/gh/Romanow/playwright-page-object)\n[![License](https://img.shields.io/github/license/Romanow/playwright-page-object)](https://github.com/Romanow/playwright-page-object/blob/master/LICENSE)\n\n# Реализация паттерна Page Object для Playwright\n\n## Подключение\n\n### Maven\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003eru.romanow-alex\u003c/groupId\u003e\n  \u003cartifactId\u003eplaywright-page-object\u003c/artifactId\u003e\n  \u003cversion\u003e${playwright-page-object.version}\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Gradle\n\n```groovy\ntestImplementation \"ru.romanow-alex:playwright-page-object:$playwrightPageObjectVersion\"\n```\n\n## Шаблон проектирования _Page Object_\n\n_Page Object_ – это шаблон проектирования, который помогает инкапсулировать работу с отдельными элементами страницы, что\nпозволяет уменьшить количество кода и его поддержку. Если, к примеру, дизайн одной из страниц изменён, то нам нужно\nбудет переписать только соответствующий класс, описывающий эту страницу.\n\nОсновные преимущества:\n\n* Разделение кода тестов и описания страниц.\n* Объединение всех действий по работе с веб-страницей в одном месте.\n\n_Page Object_ описывает действия над элементами страницы, при этом не выставляя наружу элементы страницы: т.е.\nкоммуникация со страницей выполняются внутри метода, тест лишь вызывает действия более высокого уровня (обычно это\nхорошо ложится на шаги теста).\n\n## Основные элементы Playwright\n\n* `Page` – предоставляет метод для взаимодействия со страницей браузера.\n* `Locator` – объект для поиска элемента на странице. Вычисляется в момент обращения к\n  элементу (`click()`, `isVisible()` и т.п.).\n\n## Структура проекта\n\nТ.к. страницы могут содержать большое количество элементов, для большей читабельности вводится понятие _Component\nObject_ – элемент страницы. _Component Object_ на _Page Object_ описывается с помощью\nаннотации [`@Component`](src/main/kotlin/ru/romanow/playwright/annotations/Component.kt) и инициализируется\nавтоматически с помощью `ComponentFactory` наравне с полями, помеченными аннотацией `@FindBy`.\n\n### ComponentFactory\n\n[`ComponentFactory`](src/main/kotlin/ru/romanow/playwright/ComponentFactory.kt) – фабрика для создания _Page Object_.\nПринимает на вход `Page` (объект Playwright) и класс `PageObject`, который нужно создать. С помощью reflection обходит\nаннотации `@FindBy` и `@Component`.\n\n### Локаторы `@FindBy`\n\nЛокатор [`@FindBy`](src/main/kotlin/ru/romanow/playwright/annotations/FindBy.kt) используется для задания условия поиска\nэлемента на странице. В момент создания страницы элемент может отсутствовать на странице, поиск производится в момент\nобращения к Location.\n\nЕсть 4 условия поиска, при этом если задано одно условие, то другие не выполняются (кроме `byRole` и `byText` – они\nмогут идти вместе). Условия поиска перечислены в порядке приоритета:\n\n* `byTestId` – поиск по `data-testid`;\n* `byCss` – поиск по CSS селектор;\n* `byRole` – поиск по атрибуту `role`;\n* `byXpath` – поиск XPath;\n* `byText` – поиск по тексту (может применяться совместно с фильтром `byRole`);\n* `parent` – используется, если нужно выделить поддерево, в рамках которого выполнять дальнейший поиск\n  элементов ([`Parent`](src/main/kotlin/ru/romanow/playwright/annotations/Parent.kt) – `byCss`, `byTestId`, `byXpath`,\n  `byRole`).\n\n## Соглашения о разработке\n\n### Структура пакетов теста\n\n* _pages_ и _components_ – классы, описывающие _Page Object_ и_Component Object_.\n* _components_ – компоненты внутри страницы.\n* _tests_ – тесты, внутри нужно делить по функциональности.\n* _utils_ – утильные инструменты, константы и т.п.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromanow%2Fplaywright-page-object","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fromanow%2Fplaywright-page-object","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromanow%2Fplaywright-page-object/lists"}