


Page Transactions as a new way to organize your testing automation
Photo by Mateus Campos Felipe
The vibrant scarlet ibis ( Eudocimus ruber ), also known as the red ibis, is a striking member of the Threskiornithidae bird family. This tropical avian species graces the landscapes of South America and parts of the Caribbean. While its form mirrors that of other ibis species, its brilliant scarlet plumage sets it apart. A symbol of national pride, it's one of Trinidad and Tobago's two national birds, and its Tupi-Guarani name, "guará," is even incorporated into the names of several Brazilian coastal municipalities.
Guará: A Python Implementation of the Page Transactions Pattern
Guará, a Python library, embodies the Page Transactions design pattern. It's less a tool and more a flexible programming paradigm applicable to various automation drivers beyond Selenium, encompassing Linux, Windows, and mobile automation.
The core aim of this pattern is to streamline test automation. Drawing inspiration from Page Objects, App Actions, and Screenplay, Guará centers on user actions (transactions) within an application—actions like logging in, logging out, or submitting forms.
This approach enhances the readability, maintainability, and adaptability of automation test code without requiring new tools or complex abstractions. A key advantage is its driver-agnostic nature; testers aren't locked into using Selenium. Guará seamlessly integrates with Helium, Dogtail, PRA Python, Playwright, or any preferred driver. No additional plugins or specialized knowledge are needed.
To reiterate: Guará is a Python implementation of the Page Transactions design pattern, prioritizing the pattern over being a standalone tool.
Guará utilizes the Command Pattern (GoF) to bundle user interactions (button presses, text input) into transactions. While termed a framework, it's not a new tool.
Instead of focusing on individual UI elements, Guará emphasizes the user's journey. The complexity is encapsulated within transactions, resulting in test statements that read like natural language. Testers can also create and integrate custom assertions.
Guará in Action: A Language Switching Example
This example showcases a user switching languages on a webpage:
from selenium import webdriver from guara.transaction import Application from guara import it, setup import home def test_language_switch(): app = Application(webdriver.Chrome()) # Open the application app.at(setup.OpenApp, url="https://example.com/") # Change language and assert app.at(home.ChangeToPortuguese).asserts(it.IsEqualTo, "Conteúdo em Português") app.at(home.ChangeToEnglish).asserts(it.IsEqualTo, "Content in English") # Close the application app.at(setup.CloseApp)
Each transaction resides in its own class (e.g., ChangeToPortuguese
), extending AbstractTransaction
. Testers simply override the do
method; Guará handles the rest.
from guara.transaction import AbstractTransaction class ChangeToPortuguese(AbstractTransaction): def do(self, **kwargs): self._driver.find_element(By.CSS_SELECTOR, ".btn-pt").click() return self._driver.find_element(By.CSS_SELECTOR, ".content").text
Post-test logs display transactions and assertions:
<code>test_demo.py::test_language_switch 2025-01-24 21:07:10 INFO Transaction: setup.OpenApp 2025-01-24 21:07:10 INFO url: https://example.com/ 2025-01-24 21:07:14 INFO Transaction: home.ChangeToPortuguese 2025-01-24 21:07:14 INFO Assertion: IsEqualTo 2025-01-24 21:07:14 INFO Actual Data: Conteúdo em Português 2025-01-24 21:07:14 INFO Expected: Conteúdo em Português 2025-01-24 21:07:14 INFO Transaction: home.ChangeToEnglish 2025-01-24 21:07:14 INFO Assertion: IsEqualTo 2025-01-24 21:07:14 INFO Actual Data: Content in English 2025-01-24 21:07:14 INFO Expected: Content in English 2025-01-24 21:07:14 INFO Transaction: setup.CloseApp</code>
Fixtures (setup/teardown) manage test initialization and completion. Standard testing tools like pytest or unittesting are fully compatible.
Benefits of Using Guará
- Improved Code Reusability: Each class represents a complete user transaction.
- Enhanced Readability: Code resembles plain English, facilitating collaboration.
- Customizable Assertions: Create and share custom assertions.
- Driver Agnosticism: Works with various automation tools beyond Selenium.
- Versatile Application: Automates REST APIs, unit tests, desktop, and mobile tests.
Getting Started with Guará
- Install:
pip install guara
- Create transactions using
AbstractTransaction
. - Use
Application
,at
, andasserts
to invoke transactions. - Run tests with detailed logging using Pytest:
python -m pytest -o log_cli=1 --log-cli-level=INFO
Conclusion
Guará offers a fresh approach to test code organization, prioritizing readability, maintainability, and driver independence. It fosters collaboration and allows for the creation and sharing of custom assertions. Give Guará a try!
The above is the detailed content of Page Transactions as a new way to organize your testing automation. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Solution to permission issues when viewing Python version in Linux terminal When you try to view Python version in Linux terminal, enter python...

How to avoid being detected when using FiddlerEverywhere for man-in-the-middle readings When you use FiddlerEverywhere...

When using Python's pandas library, how to copy whole columns between two DataFrames with different structures is a common problem. Suppose we have two Dats...

How does Uvicorn continuously listen for HTTP requests? Uvicorn is a lightweight web server based on ASGI. One of its core functions is to listen for HTTP requests and proceed...

Fastapi ...

How to teach computer novice programming basics within 10 hours? If you only have 10 hours to teach computer novice some programming knowledge, what would you choose to teach...

Using python in Linux terminal...

Understanding the anti-crawling strategy of Investing.com Many people often try to crawl news data from Investing.com (https://cn.investing.com/news/latest-news)...
