# PrideForge step phrases

Quick lookup for common Gherkin steps in the reference solution. For guided lessons, see the [course](../course/index.html). For architecture, see [Framework reference](framework-reference.md).

---

## Login

| Step | Notes |
|------|-------|
| `Given I login as user "{userKey}"` | Smart login via server users file |
| `Given I am logged in as user "{userKey}"` | Alias |
| `Given I logout` | Clears session |

**Course:** [Basic Steps](../course/lesson.html?lesson=author-basic-steps&page=login-steps) · [Authentication and Login Strategy](../course/lesson.html?lesson=configure-login-strategy&page=index)

---

## Navigation

| Step | Notes |
|------|-------|
| `When I open page "{name}" from the sitemap` | Direct URL from sitemap JSON |
| `When I navigate to page "{name}" through the menu` | Menu path from sitemap `navs[]` |
| `When I go to url "{pathOrUrl}"` | Relative or absolute URL |

**Course:** [Basic Steps](../course/lesson.html?lesson=author-basic-steps&page=navigation-steps) · [Site Maps and Navigation](../course/lesson.html?lesson=configure-sitemaps-navigation&page=index)

---

## Interaction

| Step | Notes |
|------|-------|
| `When I click on "{locator}"` | Named locator or selector |
| `When I set "{field}" to "{value}"` | Field handler registry |
| `When I hover over "{field}"` | Hover |
| `When I wait for "{locator}"` | Wait for presence |
| `When I wait for {n} seconds` | Fixed delay (use sparingly) |

**Course:** [Basic Steps](../course/lesson.html?lesson=author-basic-steps&page=interaction-steps) · [Field handler primitives](../course/lesson.html?lesson=author-field-handler-primitives&page=index) · [Widget handlers](../course/lesson.html?lesson=author-widget-handlers&page=index)

---

## Validation & presence

| Step | Notes |
|------|-------|
| `Then The "{field}" field should be "{value}"` | Exact match |
| `Then The "{field}" field should contain "{text}"` | Substring |
| `Then The field "{field}" should contain InnerText "{text}"` | Visible inner text |
| `Then The "{field}" field should not contain "{text}"` | Forbidden text |
| `Then The "{field}" field is editable` / `is read-only` | Single field |
| `Then All fields in form "{form}" should be editable` | Whole form |
| `Then All fields in form "{form}" should be read-only` | Whole form locked |
| `Then The "{field}" field should have maximum length of "{n}"` | maxlength |
| `Then I should see element "{nameOrSelector}"` | Present (waits) |
| `Then I should not see element "{nameOrSelector}"` | Absent |
| `Then No alerts are shown` | No error alerts |

**Course:** [Validation & presence](../course/lesson.html?lesson=author-validation-presence&page=index)

---

## Local teaching fixtures

| Step | Opens |
|------|-------|
| `Given I open the primitives fixture` | `Samples/Data/local-site/primitives.html` |
| `Given I open the widgets fixture` | `Samples/Data/local-site/widgets.html` |
| `Given I open the tables fixture` | `Samples/Data/local-site/tables.html` |
| `Given I open the validation fixture` | `Samples/Data/local-site/validation.html` |

**Course:** [Local teaching fixtures](../course/lesson.html?lesson=author-getting-started&page=local-teaching-fixtures)

---

## Tokens & test data

| Step | Notes |
|------|-------|
| `Given I set variable "{name}" to "{value}"` | Scenario variable |
| `Given I load JSON data from "{path}"` | JSON under `Customization/Data/testdata/` |
| `Given I load CSV data from "{path}" as "{prefix}"` | CSV rows as `{prefix.N.col}` |
| `When I set "{var}" to the value of "{field}"` | Capture UI value |

Token examples: `{today}`, `{medium.color}`, `{rows.2.color}`, `{data:file.txt}`

**Course:** [Tokens and Dynamic Values](../course/lesson.html?lesson=author-tokens-dynamic-values&page=index)

---

## Tables (grids)

| Step | Notes |
|------|-------|
| `When I select the row where "{col}" is "{value}"` | Row by column match |
| `Then the table should have {n} rows` | Row count |
| `Then A row matches the following criteria in table "{table}":` | Gherkin criteria table |
| `Then At least one row in the "{col}" column of table "{table}" contains "{text}"` | Column search |

**Course:** [Tables](../course/lesson.html?lesson=author-tables&page=index)

---

## Accessibility

| Step | Notes |
|------|-------|
| `When I check accessibility for "{label}"` | axe scan |
| `Then The page should have no "{severity}" accessibility violations` | Gate on severity |

**Course:** [Accessibility](../course/lesson.html?lesson=author-accessibility&page=index)

---

## Locator syntax

Use `PageName.Member` — e.g. `OrdersPage.CustomerName`. Selectors live in page object properties, not in Gherkin.

**Course:** [Page Objects and Locator Strategy](../course/lesson.html?lesson=author-page-objects-locator-strategy&page=index)
