robotframework-browser library extension to create Page Objects
Project description
robotframework-browserpom
📖 Documentation: https://hasanalpzengin.github.io/robotframework-browserpom
robotframework-browserpom is a small extension for robotframework-browser that
makes it easy to define Page Object Models (POMs) for browser-based Robot
Framework tests. It provides helpers and conventions for building readable,
reusable page objects and wiring them into Robot tests.
Features
- Integration with Robot Framework Browser: Seamlessly integrates with the
robotframework-browserlibrary. - Page Object Model Support: Simplifies the creation and management of Page Objects in browser-based test automation.
- Enhanced Readability: Improves the maintainability of test automation by promoting a clean separation between test actions and page element interactions.
Installation
To install robotframework-browserpom use poetry:
poetry add robotframework-browserpom
For development / contributing:
poetry install
Dependencies
- Python 3.12 or above
- robotframework (>=7.1.0)
- robotframework-browser (>=18.0.0)
Development dependencies commonly used by contributors:
- pytest (testing)
- black (formatting)
- isort (import sorting)
- flake8 / pylint (linting)
- mypy (static type checking)
- coverage (coverage reports)
Quick usage
Create Page Objects as Python classes and use them from Robot Framework tests. Example:
class MainPage(PageObject):
PAGE_TITLE = "MainPage"
PAGE_URL = "/index.html"
tile = Tile("//li")
search_bar: UIObject = UIObject("//input[@id='searchBar']")
@keyword
def enter_search(self, search):
self.browser.type_text(str(self.search_bar), search)
Then import the POM library in Robot tests:
*** Settings ***
Library BrowserPOM
Library demo/MainPage.py AS MainPage
Test Setup Browser.Open Browser https://automationbookstore.dev headless=True
robotframework-browserpom
📖 Documentation: https://hasanalpzengin.github.io/robotframework-browserpom
robotframework-browserpom is a small extension for robotframework-browser that
makes it easy to define Page Object Models (POMs) for browser-based Robot
Framework tests. It provides helpers and conventions for building readable,
reusable page objects and wiring them into Robot tests.
Editor / linter integration: the variables problem
Many editors and language servers (e.g., RobotCode / Robot Framework IntelliSense)
warn when variables referenced by Robot Framework tests are not defined. The
common workaround is to maintain a variables.py that imports or defines the
POM libraries so the IDE recognizes them. Maintaining that file by hand is
tedious — every time you add a new Page Object module you must update the
variables file.
To avoid this manual step, BrowserPOM ships a tiny utility module that
statically scans a Python package/folder for Page Object classes and returns
dummy variable values for them. Because it uses Python's ast module no
project code is executed — it's safe and fast.
The pom_stubs helper
BrowserPOM.pom_stubs.get_variables(base_path) will scan base_path for
.py modules and return a mapping of class names for classes that inherit
from PageObject. The returned mapping can be used as a Robot variables file
source (via robot.toml or the --variablefile CLI option).
Example behavior:
from BrowserPOM import pom_stubs
# returns something like {"MainPage": "MainPage", "Tile": "Tile"}
pom_stubs.get_variables("./demo/")
This is intentionally minimal: the actual variable values are irrelevant for editor intellisense — they just need to exist so the linter stops complaining.
If you prefer, the helper may be extended to return more information (file stems, class attributes, dummy instances, etc.).
Usage via robot.toml
You can register the helper as a variable-file in robot.toml so your editor or
Robot runner picks it up automatically. Example robot.toml:
variable-files = ["BrowserPOM.pom_stubs:demo/"]
That tells the Robot tools to call BrowserPOM.pom_stubs.get_variables("demo/")
and use the returned mapping as variables for the project. The argument is the
path to the folder containing your POM modules (relative to the project root).
Alternatively you can pass the helper directly on the Robot CLI:
# optional example shown for documentation only
robot --variablefile BrowserPOM.pom_stubs:demo/ tests/
Example Page Object
Define your page objects as normal — inherit from PageObject and add your
members and keywords:
class MainPage(PageObject):
PAGE_TITLE = "MainPage"
PAGE_URL = "/index.html"
tile = Tile("//li")
search_bar: UIObject = UIObject("//input[@id='searchBar']")
@keyword
def enter_search(self, search):
self.browser.type_text(str(self.search_bar), search)
def get_tile_count(self):
return self.browser.get_element_count(str(self.tile))
Notes and limitations
- The helper uses
astand does not import or execute any project code. - It currently includes classes that inherit from
PageObject(best-effort detection for dotted or parametrized base expressions). - The returned variable values are dummy placeholders intended for editor tooling only. If you need richer stubs (e.g., mapping to file stems or class metadata) we can extend the helper.
Contributing
Contributions are welcome; please follow the repository coding guidelines and add tests for new behavior.
License
This project is licensed under the MIT License - see the LICENSE file for details.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file robotframework_browserpom-0.5.1.tar.gz.
File metadata
- Download URL: robotframework_browserpom-0.5.1.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1482c65dbac93bee9d4447aca80735eaf5490743fc61d0d3624f477e9e6393a
|
|
| MD5 |
88ddcab0053fb0be7adc8acc96f466b6
|
|
| BLAKE2b-256 |
e09404dfe0b105841ef8aa598d16cb6d721d2972d68873d1233586f25c5dc6a5
|
File details
Details for the file robotframework_browserpom-0.5.1-py3-none-any.whl.
File metadata
- Download URL: robotframework_browserpom-0.5.1-py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4977065fb10d40a703876d21a47ce81518dee35bc2d9fad09329714232bd7e3b
|
|
| MD5 |
b69efe73a871b9d4418e011c047ac2cf
|
|
| BLAKE2b-256 |
a932f7c9194c19a2a8556aa9959aa727bd8c3b5dda62959821fd3352fcdc0429
|