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:

  1. Separation of Concerns: Tests should describe what to test (business logic), while Page Objects describe how to interact with the page (implementation details).
  2. Composition over Inheritance: Use the robust functional API of selenium-ui-test-tool inside your Page Objects, rather than creating deep inheritance chains.
  3. Data-Driven: Test data and execution logic should be decoupled.

Prométhée est bâti sur trois principes clés :

  1. 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).
  2. 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.
  3. 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
)