cucumber-test-writing
Guide for writing Cucumber feature files and step definitions in this Playwright-Cucumber project. Use this when asked to create new tests, scenarios, or step definitions.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
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
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
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
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
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-01-26
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!