Skip to main content

Pypi Tests Status Code Coverage Status

PAF - Python Automation Framework

Python implementation of Testerra API.

It is basically a wrapper for Selenium WebDriver and WebElement which brings some more comfort features. This is not a test framework, but it implements assertion features anyway.

The basic concept is, to identify WebElements on every action or property accessor to prevent StaleElementExceptions.

Quick start

import inject
import paf.config
from paf.locator import By
from paf.page import FinderPage, PageFactory

# Configure dependency injection
inject.configure(paf.config.inject)

# Instantiate the page factory
page_factory = inject.instance(PageFactory)

# Create a simple finder page
page = page_factory.create_page(FinderPage)

# Visit URL
page.open("https://google.com")

# Find element
element = page.find("#q")

# Perform actions
element.type("Search")

# Perform assertions
element.expect.text.be("Search")

Prerequisites

  • You need at least a local WebDriver installed.
    brew|choco|apt install chromedriver
    

Feature list

Missing features (tdb)

  • Rect assertions
  • Drag & Drop over frames

Environment variables

  • PAF_BROWSER_SETTING=chrome:90: Sets the requested browser name and it's version.
  • PAF_WINDOW_SIZE=1920x1080: Sets the browsers initial window size.
  • PAF_WINDOW_POSITION=0x0: Place the initial window to a different location/screen.
  • PAF_WINDOW_MAXIMIZE=False: Maximize the initial window.
  • PAF_SCREENSHOTS_DIR=screenshots: Sets the screenshots' directory.
  • PAF_SEQUENCE_WAIT_AFTER_FAIL=0.3: Wait in seconds whenever a sequence action fails.
  • PAF_SEQUENCE_RETRY_COUNT=3: Retry count for every sequence action.
  • PAF_DEMO_MODE=0: Enables the demo mode by highlighting actions and assertions.
  • PAF_SELENIUM_SERVER_URL=http://127.0.0.1:4444: Uses Selenium server if set.
  • PAF_DRIVER_PATH: Path to Webdriver binary
  • PAF_BINARY_PATH: Path to User agent's binary

Examples

Some real world examples.

  1. test_google.py: is a regular Google search, implemented with Page Objects and Components.
  2. test_todo_mvc.py: are re-implemented test cases from the Robot Framework TodoMVC example. It's IMHO developer friendly, better readable and less code.
  3. test_asyncio.py: Parallel execution via asyncio.
  4. test_monkeytype.py: Typing test on https://monkeytype.com

Comparison

Comparison of the syntax with other frameworks.

Pylenium

py.get("a[href='/about']").should().have_text("About")

find("a[href='/about']").expect.text.be("About")

SeleniumBase

self.assert_text_not_visible("Thanks for your purchase.", "#app .success")

find("#app .success").expect.text.not_be("Thanks for your purchase.")

Selene

browser.all('#rso>div').should(have.size_greater_than(5)) \
    .first.should(have.text('Selenium automates browsers'))

div = find("#rso>div")
div.expect.count.greater_than(5).be(True)
div.first.expect.text.be("Selenium automates browsers")

References: https://www.nextgenerationautomation.com/post/python-test-automation-frameworks

Developer area

Testing

Run the tests on your local machine

PAF_TEST_HEADLESS=1 PAF_TEST_LOCAL_SELENIUM=0 pytest --cov=paf -n=4 test

Build test base container (for use in GitHub Actions)

podman build -f ubuntu-base.Dockerfile --arch=amd64 -t paf-test-base:latest
source build.env
echo $DOCKER_CONTAINER_REGISTRY_TOKEN | podman login -u mreiche --password-stdin ghcr.io
podman push paf-test-base:latest docker://ghcr.io/mreiche/paf-test-base:latest

Build test runner container (for testing)

Run tests within container

podman run -e PAF_TEST_HEADLESS=1 -e PAF_TEST_CONTAINER=1 -e PAF_TEST_LOCAL_SELENIUM=0 paf-test-base:latest pytest --cov=paf -n=4 test

Run local selenium server

wget https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.9.0/selenium-server-4.9.0.jar -O selenium-server.jar
java -jar selenium-server.jar standalone --host 127.0.0.1

Debug XPaths in Browser's Developer Console

xpath = "//dt[.//text()='Title:']/following-sibling::dd[1]"
snapshot = document.evaluate(xpath, document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE)
snapshot.snapshotItem(0).textContent

References

Release files for python-automation-framework 0.2.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for python-automation-framework 0.2.4
File Size Uploaded
python_automation_framework-0.2.4.tar.gz 29.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for python-automation-framework 0.2.4
File Interpreter ABI Platform
python_automation_framework-0.2.4-py3-none-any.whl Python 3 none any Details

Total release size: 52.9 kB

Release files / python_automation_framework-0.2.4.tar.gz

Download URL python_automation_framework-0.2.4.tar.gz
Size 29.8 kB
Tags Source
SHA-256 checksum
How to use checksums
a83bac8da273bada22db7f6e98f1590ed8350693de5238cc08153df57628d65f
BLAKE2b-256 checksum
How to use checksums
a219bcf5d1cc0282c7dbfe595fea0e57ae8e540d0cafe3d734ec2b6926d9f018
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release files / python_automation_framework-0.2.4-py3-none-any.whl

Download URL python_automation_framework-0.2.4-py3-none-any.whl
Size 23.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9c6e926cf158afeba2f6e9e9c66e11d974d716e2ee47bdc629fec9a1f7e5dbfd
BLAKE2b-256 checksum
How to use checksums
2561f300101ce36286fd0f2c1698b0ac9fca37ddda18b8ff1b1ac7b1fcb2e877
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release history Release notifications | RSS feed

This release

0.2.4 This release

2 release files

0.2.3

2 release files

0.2.2

1 release file

0.1.9

1 release file

0.1.8

1 release file

0.1.7

1 release file

0.1.6

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1.0

1 release file

0.0.9

1 release file

0.0.8

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page