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.
- test_google.py: is a regular Google search, implemented with Page Objects and Components.
- 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
- Update version in
setup.py - Package library
python setup.py sdist
- Publish library
twine upload dist/python-automation-framework-[version].tar.gz
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file python-automation-framework-0.0.8.tar.gz.
File metadata
- Download URL: python-automation-framework-0.0.8.tar.gz
- Upload date:
- Size: 18.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0672f462bffc2af96d2db54aa8a886ed24af74c2f558c611ff4744cca86122dd
|
|
| MD5 |
fcd1e0b87514cf7cc66c3dd82413ab29
|
|
| BLAKE2b-256 |
366ddf3ad4c1232dd93f73c7d168344e7d09696190dd28707ee5c062b9572cdd
|