create-playwright-page-objects
Read @.ai/Component/Playwright/CONTEXT.md for the POM pattern and ui-testing-library architecture.
Page objects live in the ui-testing-library, not in the core repo.
1. Listing page object
Create bo{Domain}Page (extends the appropriate BO base page):
- Selectors: grid table, filter inputs, bulk action checkboxes, row action buttons, toggle switches, pagination
- Methods: all return values, never assert
getNumberOfElementInGrid(page): Promise<number>
filterTable(page, filterBy, value): Promise<void>
resetAndGetNumberOfLines(page): Promise<number>
getTextColumn(page, row, column): Promise<string>
goToAddNewPage(page): Promise<void>
goToEditPage(page, row): Promise<void>
deleteRow(page, row): Promise<string> — returns alert text
bulkAction(page, action): Promise<string> — returns alert text
getToggleColumnValue(page, row): Promise<boolean>
setToggleColumnValue(page, row, value): Promise<string>
Selector naming: {name}{Type} camelCase — e.g. gridTable, filterNameInput, bulkActionDropdownButton, confirmDeleteButton
2. Create/Edit page object
Create bo{Domain}CreatePage (extends BO base page):
- Selectors: form inputs, dropdowns, file uploads, save button, tab navigation (if tabs)
- Methods:
createEdit{Domain}(page, data): Promise<string> — fills all fields, clicks save, returns alert text
getPageTitle(page): Promise<string>
getValue(page, inputName): Promise<string> — for verification after reload
- Properties:
pageTitleCreate: string — expected page title for create mode
pageTitleEdit: string — expected page title for edit mode
successfulCreationMessage: string
successfulUpdateMessage: string
3. Conventions
See Playwright/CONTEXT.md for POM conventions (never assert, selector naming, inheritance, library location). Skill-specific reminders:
- One page object per distinct BO page (listing page, create/edit page)
- Prefer
data-test attribute selectors when available over CSS classes
- Check if page objects already exist before creating new ones
Reference: check existing page objects in the ui-testing-library for the exact inheritance pattern and method signatures.
1---2name: create-playwright-page-objects3description: Create BO page object classes in the ui-testing-library for a new migrated page. Follows the Page Object Model pattern: encapsulate selectors and interactions, never assert. Trigger: "create page objects for {Domain}".4---5
6# create-playwright-page-objects
7
8Read `@.ai/Component/Playwright/CONTEXT.md` for the POM pattern and ui-testing-library architecture.
9
10Page objects live in the **[ui-testing-library](https://github.com/PrestaShop/ui-testing-library)**, not in the core repo.
11
12## 1. Listing page object
13
14Create `bo{Domain}Page` (extends the appropriate BO base page):
15
16- **Selectors:** grid table, filter inputs, bulk action checkboxes, row action buttons, toggle switches, pagination
17- **Methods:** all return values, never assert
18 - `getNumberOfElementInGrid(page): Promise<number>`
19 - `filterTable(page, filterBy, value): Promise<void>`
20 - `resetAndGetNumberOfLines(page): Promise<number>`
21 - `getTextColumn(page, row, column): Promise<string>`
22 - `goToAddNewPage(page): Promise<void>`
23 - `goToEditPage(page, row): Promise<void>`
24 - `deleteRow(page, row): Promise<string>` — returns alert text
25 - `bulkAction(page, action): Promise<string>` — returns alert text
26 - `getToggleColumnValue(page, row): Promise<boolean>`
27 - `setToggleColumnValue(page, row, value): Promise<string>`
28
29**Selector naming:** `{name}{Type}` camelCase — e.g. `gridTable`, `filterNameInput`, `bulkActionDropdownButton`, `confirmDeleteButton`
30
31## 2. Create/Edit page object
32
33Create `bo{Domain}CreatePage` (extends BO base page):
34
35- **Selectors:** form inputs, dropdowns, file uploads, save button, tab navigation (if tabs)
36- **Methods:**
37 - `createEdit{Domain}(page, data): Promise<string>` — fills all fields, clicks save, returns alert text
38 - `getPageTitle(page): Promise<string>`
39 - `getValue(page, inputName): Promise<string>` — for verification after reload
40- **Properties:**
41 - `pageTitleCreate: string` — expected page title for create mode
42 - `pageTitleEdit: string` — expected page title for edit mode
43 - `successfulCreationMessage: string`
44 - `successfulUpdateMessage: string`
45
46## 3. Conventions
47
48See [Playwright/CONTEXT.md](../../CONTEXT.md) for POM conventions (never assert, selector naming, inheritance, library location). Skill-specific reminders:
49
50- One page object per distinct BO page (listing page, create/edit page)
51- Prefer `data-test` attribute selectors when available over CSS classes
52- Check if page objects already exist before creating new ones
53
54**Reference:** check existing page objects in the ui-testing-library for the exact inheritance pattern and method signatures.