Skip to main content

Automation framework for the WebDriver API

Project description

PAF - Python Automation Framework

Python implementation of Testerra API.

It is basically a wrapper for Selenium WebDriver and WebElement which bring some more comfort features. This is not a test framework, but it implements some 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
    
  • Python 3.10 (or higher).

Feature list

Missing features (todos)

  • Rect assertions
  • ShadowRoot support
  • 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 default window size.
  • 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.

Examples

I added two 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.

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

Run the tests

PYTHONPATH="." pytest --numprocesses=4 --cov=paf test

Utils

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

Release update

  1. Update version in setup.py
  2. Package library
    python setup.py sdist
    
  3. Publish library
    twine upload dist/python-automation-framework-[version].tar.gz
    

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python-automation-framework-0.0.8.tar.gz (18.8 kB view details)

Uploaded Source

File details

Details for the file python-automation-framework-0.0.8.tar.gz.

File metadata

File hashes

Hashes for python-automation-framework-0.0.8.tar.gz
Algorithm Hash digest
SHA256 0672f462bffc2af96d2db54aa8a886ed24af74c2f558c611ff4744cca86122dd
MD5 fcd1e0b87514cf7cc66c3dd82413ab29
BLAKE2b-256 366ddf3ad4c1232dd93f73c7d168344e7d09696190dd28707ee5c062b9572cdd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page