Cucumber Test Writing Guide
When writing Cucumber tests for this Playwright-Cucumber project, follow these patterns and conventions:
Project Structure
- •Feature files:
tests/features/[FeatureName]/[FeatureName].feature - •Step definitions:
tests/steps/[FeatureName].ts - •Page objects:
tests/pages/[PageName].ts
Feature File Format
gherkin
Feature: [Feature Name]
As a [user type] I should be able to [action/goal]
Scenario: [Descriptive scenario name]
Given I am on the [page/application]
When I [perform action]
And I [additional action if needed]
Then I should [expected outcome]
Step Definition Patterns
typescript
import { Given, Then, When } from '@cucumber/cucumber';
import { expect } from '@playwright/test';
import { Fixture } from 'tests/support/world';
Given('I am on the [page] website', async function (this: Fixture) {
await this.[pageName].navigate();
});
When('I [action description]', async function (this: Fixture) {
// Implementation using page object methods
});
Then('I should [expected outcome]', async function (this: Fixture) {
// Assertions using expect from @playwright/test
});
Page Object Pattern
typescript
import { expect, Locator, Page } from '@playwright/test';
export default class [PageName]Page {
constructor(private readonly page: Page) {}
get [elementName](): Locator {
return this.page.getByRole('[role]', { name: '[name]' });
}
async [methodName](): Promise<void> {
// Implementation
}
async [assertionMethod](): Promise<boolean> {
try {
await expect(this.[element]).toBeVisible();
return true;
} catch {
return false;
}
}
}
Best Practices
- •Use descriptive scenario names that explain the business value
- •Keep scenarios focused on a single behavior
- •Use the existing Fixture type for step definitions
- •Leverage page object methods for reusability
- •Use environment variables for sensitive data (SF_USERNAME, SF_PASSWORD)
- •Follow the Given-When-Then structure strictly
- •Use Playwright locators with roles and accessible names
- •Include error handling for missing environment variables
Running Tests
- •All tests:
npm run test - •Specific feature:
npx cucumber-js tests/features/[FeatureName]/[FeatureName].feature - •Generate Allure reports:
npm run allure