playwright-python — правило для GitHub Copilot: суть и установка
Задаёт стандарты генерации тестов на Playwright Python в Pytest. Помогает Copilot писать надёжные проверки через expect и ролевые локаторы без хардкодных пауз.
.github/instructions/playwright-python.instructions.mdЧто делает playwright-python
Правило инструктирует ассистента генерировать тесты по официальным стандартам Playwright для Python. При создании сценариев Copilot отдаёт приоритет доступным селекторам get_by_role, get_by_label и get_by_text вместо хрупких путей к элементам. Код организуется вокруг синхронного интерфейса from playwright.sync_api import Page, expect с фикстурой page: Page.
Вместо стандартного assert или явных пауз инструкция предписывает использовать проверки с автоповтором: to_have_text(), to_have_count() и to_have_url(). Тестовые файлы размещаются в каталоге tests/ с именами по шаблону test_<feature-or-page>.py для автоматического обнаружения через pytest.
Инструкция жёстко привязана к синхронному модулю playwright.sync_api. Если ваш проект написан под асинхронный async_api, сгенерированные тесты сразу сломаются.
Какие задачи решает
- настроить автогенерацию тестов на Playwright Python в Pytest
- избавиться от нестабильных селекторов через
get_by_role - заменить стандартный
assertна проверки с автоповторомexpect - убрать жёсткие таймауты и лишние паузы из тестовых сценариев
Примеры запросов агенту
- Напиши тест на Playwright для проверки ссылки Get Started на главной странице
- Создай файл test_auth.py для проверки формы входа с ролевыми локаторами
- Добавь в Pytest проверку заголовка страницы и URL с помощью expect
Как установить playwright-python
Вручную: положить файлы
.github/instructions/playwright-python.instructions.mdПоле applyTo задаёт, к каким файлам применять
Вручную: положить файлы
.claude/rules/playwright-python.mdПоле paths во frontmatter ограничивает файлы: applyTo из источника → paths
AGENTS.md
Codex читает AGENTS.md: вставьте текст правила туда
Вручную: положить файлы
.cursor/rules/playwright-python.mdcВо frontmatter: description, globs, alwaysApply. applyTo из источника → globs, иначе правило само не подключится
Вручную: положить файлы
.devin/rules/playwright-python.mdВручную: положить файлы
.clinerules/playwright-python.mdПо шагам, с командами для каждой платформы: AGENTS.md и CLAUDE.md: что это, кто читает и какой выбрать
Вопросы о playwright-python
Как установить playwright-python в GitHub Copilot?
Сохраните файл правила по пути .github/instructions/playwright-python.instructions.md в своём репозитории. GitHub Copilot автоматически подхватит инструкции при создании тестов.
Что делает правило playwright-python?
Оно задаёт структуру тестов для Pytest: требует импортировать Page и expect из playwright.sync_api, использовать ролевые локаторы и проверки expect вместо обычного assert.
Поддерживает ли правило асинхронный Playwright?
Инструкции прямо требуют импорта from playwright.sync_api import Page, expect. Правило рассчитано только на синхронный запуск тестов.
Исходный текст
playwright-python.instructions.md · MIT
---
description: 'Playwright Python AI test generation instructions based on official documentation.'
applyTo: '**'
---
# Playwright Python Test Generation Instructions
## Test Writing Guidelines
### Code Quality Standards
- **Locators**: Prioritize user-facing, role-based locators (get_by_role, get_by_label, get_by_text) for resilience and accessibility.
- **Assertions**: Use auto-retrying web-first assertions via the expect API (e.g., expect(page).to_have_title(...)). Avoid expect(locator).to_be_visible() unless specifically testing for a change in an element's visibility, as more specific assertions are generally more reliable.
- **Timeouts**: Rely on Playwright's built-in auto-waiting mechanisms. Avoid hard-coded waits or increased default timeouts.
- **Clarity**: Use descriptive test titles (e.g., def test_navigation_link_works():) that clearly state their intent. Add comments only to explain complex logic, not to describe simple actions like "click a button."
### Test Structure
- **Imports**: Every test file should begin with from playwright.sync_api import Page, expect.
- **Fixtures**: Use the page: Page fixture as an argument in your test functions to interact with the browser page.
- **Setup**: Place navigation steps like page.goto() at the beginning of each test function. For setup actions shared across multiple tests, use standard Pytest fixtures.
### File Organization
- **Location**: Store test files in a dedicated tests/ directory or follow the existing project structure.
- **Naming**: Test files must follow the test_<feature-or-page>.py naming convention to be discovered by Pytest.
- **Scope**: Aim for one test file per major application feature or page.
## Assertion Best Practices
- **Element Counts**: Use expect(locator).to_have_count() to assert the number of elements found by a locator.
- **Text Content**: Use expect(locator).to_have_text() for exact text matches and expect(locator).to_contain_text() for partial matches.
- **Navigation**: Use expect(page).to_have_url() to verify the page URL.
- **Assertion Style**: Prefer `expect` over `assert` for more reliable UI tests.
## Example
```python
import re
import pytest
from playwright.sync_api import Page, expect
@pytest.fixture(scope="function", autouse=True)
def before_each_after_each(page: Page):
# Go to the starting url before each test.
page.goto("https://playwright.dev/")
def test_main_navigation(page: Page):
expect(page).to_have_url("https://playwright.dev/")
def test_has_title(page: Page):
# Expect a title "to contain" a substring.
expect(page).to_have_title(re.compile("Playwright"))
def test_get_started_link(page: Page):
page.get_by_role("link", name="Get started").click()
# Expects page to have a heading with the name of Installation.
expect(page.get_by_role("heading", name="Installation")).to_be_visible()
```
## Test Execution Strategy
1. **Execution**: Tests are run from the terminal using the pytest command.
2. **Debug Failures**: Analyze test failures and identify root causes
© github · MIT · github/awesome-copilot