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
- UiElements
- Locators
- Page objects
- Components
- Managing WebDrivers
- Execution controlling
- Inject listener
Missing features (tdb)
- Rect assertions
- ShadowRoot support
- Drag & Drop over frames
Environment variables
The value behind the variable is the default value.
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.PAF_DEMO_MODE=0
: Enables the demo mode by highlighting actions and assertions.
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
Testing
Run the tests on you local machine
pytest --cov=paf -n=4 test
Build test base container (for use in GitHub Actions)
podman build -f base.Dockerfile --arch=amd64 -t paf-test-base:latest
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)
podman build -f test.Dockerfile --arch=amd64 -t paf-test:latest
Run tests within container
podman run paf-test:latest PAF_TEST_HEADLESS=1 PAF_TEST_CONTAINER=1 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
Release update
- Update version in
setup.py
- Package library
python setup.py sdist
- Publish library
twine upload dist/python-automation-framework-[version].tar.gz
References
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
Hashes for python-automation-framework-0.1.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | ebe336d1ec987cce1eecb693b45d1d75bac8fe9e0dbe42d51bba071b65352eb7 |
|
MD5 | db58ae62f05ec85491818092f021cbf6 |
|
BLAKE2b-256 | 82a89341f538adb3893cd053a3b2f6208e927bf0c714a73c6cf51bfff2ebed83 |