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