Introduction
Introduction
Welcome to Prométhée UI. This library provides a professional, opinionated structure for writing automated UI tests using Selenium and Pytest.
Unlike simple wrappers, Prométhée enforces the Page Object Model (POM) pattern to ensure your tests remain maintainable as your project scales.
Bienvenue sur Prométhée UI . Cette bibliothèque fournit une structure professionnelle et "opinionated" pour écrire des tests UI automatisés avec Selenium et Pytest.
Contrairement à de simples wrappers, Prométhée impose le modèle Page Object Model (POM) pour garantir que vos tests restent maintenables à mesure que le projet grandit.
Philosophy & Architecture
Philosophie & Architecture
The Prométhée Philosophy
La Philosophie Prométhée
Prométhée is built on three core principles:
- Separation of Concerns: Tests should describe what to test (business logic), while Page Objects describe how to interact with the page (implementation details).
- Composition over Inheritance: Use the robust functional API of
selenium-ui-test-toolinside your Page Objects, rather than creating deep inheritance chains. - Data-Driven: Test data and execution logic should be decoupled.
Prométhée est bâti sur trois principes clés :
- Séparation des responsabilités : Les tests décrivent quoi tester (logique métier), tandis que les Page Objects décrivent comment interagir avec la page (détails d'implémentation).
- Composition plutôt qu'Héritage : Utilisez l'API fonctionnelle robuste de
selenium-ui-test-toolà l'intérieur de vos Page Objects, plutôt que de créer des chaînes d'héritage complexes. - Piloté par les données : Les données de test et la logique d'exécution doivent être découplées.
Recommended Project Structure
Structure de Projet Recommandée
When you run promethee init, we create a structure designed for scalability:
Lorsque vous lancez promethee init, nous créons une structure conçue pour
l'évolutivité :
my_project/
├── scenarios/ # Your Page Objects (The "How")
│ └── login_page.py
├── tests/ # Your Test Scripts (The "What")
│ └── test_login.py
├── data/ # Test Data (CSV, JSON)
│ └── credentials.csv
├── utils/ # Custom Helpers
│ └── scenario_provider.py
└── conftest.py # Test Configuration & Lifecycle
Understanding Scaffolded Components
Comprendre les Composants Générés
1. conftest.py
1. conftest.py
This is the heartbeat of your test suite. It uses Pytest fixtures to manage the browser lifecycle.
What it does: It automatically starts the browser driver before your test runs
and closes it immediately after, ensuring a clean state for every test. You don't need to write
driver = WebDriver() or driver.quit() yourself.
C'est le cœur de votre suite de tests. Il utilise les fixtures Pytest pour gérer le cycle de vie du navigateur.
Ce qu'il fait : Il démarre automatiquement le driver du navigateur avant votre
test et le ferme immédiatement après, garantissant un état propre pour chaque test. Vous n'avez
pas besoin d'écrire driver = WebDriver() ou driver.quit() vous-même.
2. utils/scenario_provider.py
2. utils/scenario_provider.py
Hardcoding credentials in scripts is a security risk. The ScenarioProvider solves
this.
What it does: It reads a CSV file (like data/credentials.csv),
loads specific rows based on a scenario key, and injects sensitive values into environment
variables at runtime. This allows you to switch environments (staging/prod) without changing
code.
Coder des identifiants en dur dans les scripts est un risque de sécurité. Le
pip install promethee-seleniumésout ce problème.
Ce qu'il fait : Il lit un fichier CSV (comme data/credentials.csv),
charge des lignes spécifiques basées sur une clé de scénario, et injecte les valeurs sensibles
dans des variables d'environnement au moment de l'exécution. Cela vous permet de changer
d'environnement (staging/prod) sans toucher au code.
Tutorial: Writing a Test
Tutoriel : Écrire un Test
Step 1: The Page Object
Étape 1 : Le Page Object
Inherit from Base for driver access, but import interaction functions
from selenium_ui_test_tool.
Héritez de Base pour l'accès au driver, mais importez les fonctions
d'interaction depuis selenium_ui_test_tool.
from promethee.base import Base
from selenium.webdriver.common.by import By
# Import interaction tools directly
from selenium_ui_test_tool import fill_input, click_element, wait_for_element
class LoginPage(Base):
def login(self, username, password):
self.open_url("https://example.com/login")
# We pass self.driver explicitly to these functional tools
fill_input(self.driver, By.ID, "user_field", username)
fill_input(self.driver, By.ID, "pass_field", password)
click_element(self.driver, By.ID, "login_button")
def is_welcome_displayed(self):
element = wait_for_element(self.driver, By.ID, "welcome_msg")
return element is not None
API Reference
Référence API
Class promethee.base.Base
Classe promethee.base.Base
The foundational class for all Page Objects.
La classe fondamentale pour tous les Page Objects.
__init__(driver, url=None): Initializes the page with a driver. If URL is provided, navigates to it.Initialise la page avec un driver. Si une URL est fournie, navigue vers celle-ci.open_url(url): Navigate to a specific URL.Naviguer vers une URL spécifique.get_title(): Returns the current page title.Retourne le titre de la page courante.refresh(): Refreshes the page.Rafraîchit la page.
External Interactions
Interactions Externes
Prométhée recommends using selenium-ui-test-tool for all element interactions. Key imports:
Prométhée recommande d'utiliser selenium-ui-test-tool pour toutes les interactions avec les éléments. Imports clés :
from selenium_ui_test_tool import (
click_element,
fill_input,
wait_for_element,
get_text
)