Persona DSL - Framework for implementing Screenplay pattern in Python tests
Project description
persona-dsl: фреймворк для автотестов на Python
persona-dsl — это библиотека для E2E-, API- и интеграционных тестов, построенная вокруг Screenplay-подхода и тесно связанная с runtime/discovery/tooling, которые использует TaaS.
Установка
pip install persona-dsl
python -m playwright install --with-deps
Базовая модель
Публичный слой строится вокруг:
PersonaOpsStepCombinedStep- алиасов
Action,Fact,Expectation,Goal PageиElement
from __future__ import annotations
from persona_dsl import Goal
from persona_dsl.ops.web import Click, CurrentPath, Fill, NavigateTo
from persona_dsl.expectations.generic import IsEqualTo
from persona_dsl.pages import Button, Page, TextField
class LoginPage(Page):
expected_path = "/login"
username = TextField(name="username", accessible_name="Логин")
password = TextField(name="password", accessible_name="Пароль")
submit_button = Button(name="submit_button", accessible_name="Войти")
def test_login_flow(persona) -> None:
login_page = LoginPage()
persona.make(
NavigateTo(login_page),
Fill(login_page.username, "admin"),
Fill(login_page.password, "secret"),
Click(login_page.submit_button),
)
current_path = persona.get(CurrentPath())
persona.check(current_path, IsEqualTo("/dashboard"))
Страницы и элементы
Page наследуется от Element и добавляет:
expected_pathdefault_query_paramsbuild_url(base_url=None)
Element поддерживает:
- declarative class attrs
aria_ref- multi-strategy resolve
.using(...),.robust(),.resolve_or(...)ElementListTableи declarative table DSL
VirtualPage используется для динамической in-memory модели страницы.
Генерация page object'ов
PageGenerator и GeneratePageObject генерируют declarative page objects.
Для обычных generated страниц текущий контракт такой:
- committed generated file не содержит
def __init__(...) - не содержит
self.add_element(...) - не содержит
self.add_element_list(...) - хранит
expected_path, snapshot/screenshot paths иaria_ref - для повторяющихся анонимных контролов может выпускать declarative group, доступную по индексу как
page.otp_kod[0] - внутри таких групп item-level
aria_refможет намеренно отсутствовать, чтобы resolve шёл через container scope иrole + index - поддерживает merge/regeneration
- использует footer-секции unresolved/archived diagnostics
CLI:
persona-page-gen --url http://localhost:8080 --output tests/pages/home_page.py
Из теста:
from persona_dsl.ops.web import GeneratePageObject, NavigateTo
def test_generate_home_page(persona) -> None:
persona.make(NavigateTo("/"))
persona.make(
GeneratePageObject(
class_name="HomePage",
output_path="tests/pages/home_page.py",
wait_for_state="networkidle",
sleep_before=1,
)
)
Таблицы
Актуальный table contract включает:
Column(...)TableColumntable.filters.*row.elements.*row.element(column)row.value(column)row.detailstable.select_all_checkbox
Generator использует этот DSL и для обычных, и для сложных таблиц.
Конфигурация
Конфигурация проекта живёт в config/{env}.yaml и tests/conftest.py. Для запуска:
pytest --env=dev tests/
Если нужен локальный генератор страниц или шаблонный проект, ориентируйтесь на example_template.
Где смотреть дальше
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file persona_dsl-2026.4.8rc106.tar.gz.
File metadata
- Download URL: persona_dsl-2026.4.8rc106.tar.gz
- Upload date:
- Size: 335.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6060b47cf3fc5f2484d274c58b6d0b7794c55b63f7ac9007512c5e2dce942c9
|
|
| MD5 |
64fdcecb7c6027100e9cf82d4a0b0ad7
|
|
| BLAKE2b-256 |
e74b3c5a412cf69e1f6882795f074f36906253238857ed62c2d26d2da5ee595a
|
File details
Details for the file persona_dsl-2026.4.8rc106-py3-none-any.whl.
File metadata
- Download URL: persona_dsl-2026.4.8rc106-py3-none-any.whl
- Upload date:
- Size: 423.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9dbbe624e91bf337ea1993291a6b5a243ad9c443891db67f7a6afb91b5aba17d
|
|
| MD5 |
cf02b26e14fcdceebaa2bfcc75571abb
|
|
| BLAKE2b-256 |
1af02a8836f613db3248d974ae08d07f4ac24b42106c5f857eda7cd2e7a72bd5
|