Driver-agnostic Robot Framework keyword library core for GUI test automation (OKW4Robot).
Project description
OKW4Robot
Driver-agnostic keyword architecture for Robot Framework.
One unified set of keywords for different GUI technologies (Web/Selenium, Web/Playwright, Java Swing, ...) — the actual implementation lives in the respective driver package.
Deutsche Version: README_de.md
ISO/IEC/IEEE 29119-5:2024: OKW4Robot implements the international standard for Keyword-Driven Testing — structurally since 2003. See ISO 29119-5 Conformity.
OKW Ecosystem
┌─────────────────────────────────────────────────────────┐
│ Robot Tests (.robot) │
│ StartApp MyApp / SetValue Name "Smith" │
└──────────────────────────┬──────────────────────────────┘
│
┌───────────▼───────────┐
│ okw4robot │ Driver-agnostic core
│ Keywords, OkwWidget │ pip install robotframework-okw4robot
│ Context, Contracts │
└───┬───────────────┬───┘
│ │
┌──────────▼──┐ ┌─────▼──────────┐
│ okw-web- │ │ okw-java- │ (more drivers
│ selenium │ │ remoteswing │ e.g. okw-web-
│ WebSe_* │ │ RemoteSw_* │ playwright)
└─────────────┘ └────────────────┘
| Package | Namespace | Status | Description |
|---|---|---|---|
| okw4robot | okw4robot |
Stable | Core: keywords, OkwWidget interface, context, contracts |
| okw-web-selenium | okw_web_selenium |
Stable (53 tests) | Selenium WebDriver + WebSe_* widgets |
| okw-java-remoteswing | okw_java_remoteswing |
Stable (106 tests) | Java Swing via RemoteSwingLibrary + RemoteSw_* widgets |
| okw-contract-utils | okw_contract_utils |
Stable (PyPI) | Shared contracts (matchers, tokens, YES/NO) |
| okw-remote-ssh | robotframework_okw_remote_ssh |
Beta (PyPI) | SSH commands and SFTP |
Getting Started
1. Install the core
pip install robotframework-okw4robot
2. Install a driver package (e.g. Selenium)
pip install robotframework-okw-web-selenium
3. Write a Robot test
*** Settings ***
Library okw_web_selenium.library.OkwWebSeleniumLibrary
*** Test Cases ***
Login Test
StartApp MyApp
SelectWindow LoginDialog
SetValue Username admin
SetValue Password secret
ClickOn Login
VerifyValue Status Logged in
StartApp loads the app YAML. If the YAML contains a __self__ section with
the adapter class, the adapter is started automatically — no separate StartHost
needed.
Note: The test imports the driver library (
OkwWebSeleniumLibrary), notOKW4RobotLibrarydirectly. The driver library inherits all keywords from the core.
Architecture: Delegation, Not Control
Keywords do not call adapter methods directly. Instead, they delegate to
exactly one okw_* method on the widget:
Keyword SetValue "Name" "Smith"
│
▼
widget = resolve_widget("Name") # YAML locator → WebSe_TextField
widget.okw_set_value("Smith") # Widget knows how.
The OkwWidget interface (in okw4robot) defines all okw_* methods
with NotImplementedError. Driver packages implement them:
| okw4robot (Interface) | okw-web-selenium (Implementation) |
|---|---|
OkwWidget.okw_set_value() |
WebSe_TextField.okw_set_value() → Selenium clear + input_text |
OkwWidget.okw_click() |
WebSe_Base.okw_click() → Selenium click_element |
OkwWidget.okw_move_over() |
WebSe_Base.okw_move_over() → Selenium ActionChains.move_to_element |
OkwWidget.okw_exists() |
WebSe_Base.okw_exists() → Selenium find_elements |
Project Structure
robotframework-okw4robot/
src/okw4robot/
library.py # OKW4RobotLibrary (all keyword mixins)
keywords/
host.py # StartHost, StopHost, SelectHost
app.py # StartApp, StopApp, SelectWindow
widget_keywords.py # SetValue, ClickOn, MoveOver, VerifyValue, ...
attribute_keywords.py # VerifyAttribute, MemorizeAttribute, LogAttribute
caption_keywords.py # VerifyCaption, MemorizeCaption, LogCaption
label_keywords.py # VerifyLabel, MemorizeLabel, LogLabel
placeholder_keywords.py # VerifyPlaceholder, ...
tooltip_keywords.py # VerifyTooltip, ...
table_keywords.py # VerifyTableCellValue, ...
list_keywords.py # VerifyListCount, VerifySelectedCount
noise_keywords.py # OnFailNOISE, OnFailIgnoreNOISE (NOISE/FAIL classification)
params.py # SetOKWParameter (timeouts)
runtime/
context.py # Central runtime context (adapter, app, window)
widgets/
okw_widget.py # OkwWidget interface (NotImplementedError defaults)
utils/
yaml_loader.py # YAML locator search (project → driver packages)
loader.py # Dynamic class loading
okw_helpers.py # resolve_widget(), should_ignore(), ...
logging_mixin.py # LoggingMixin for all classes
table_tokens.py # $TAB/$LF token parser
tests/
unit/ # 53 pytest unit tests with MockWidget
docs/
CONTRACT.md # Public contract
KEYWORDS.md # Keyword reference (all keywords)
SPECIFICATION.md # Semantic specification
keywords_*.md # Keyword documentation per topic
okw_parameters.md # Timeouts and parameters
synchronization_strategy.md # Sync strategy (wait_before)
...
Documentation
Standards
- iso-29119-5-conformity.md – ISO/IEC/IEEE 29119-5:2024 conformity (architecture, keyword mapping, framework components)
Contracts and Specification
- CONTRACT.md – Public contract (architecture, YAML fallback)
- KEYWORDS.md – Keyword reference (all keywords at a glance)
- SPECIFICATION.md – Semantic keyword specification
Keywords
- keywords_host_app.md – Host/App/Window keywords
- keywords_attribute.md – VerifyAttribute, MemorizeAttribute, LogAttribute
- keywords_caption.md – VerifyCaption, MemorizeCaption, LogCaption
- keywords_label.md – VerifyLabel, MemorizeLabel, LogLabel
- keywords_placeholder.md – VerifyPlaceholder, ...
- keywords_tooltip.md – VerifyTooltip, ...
- keywords_table.md – Table keywords (index-based)
- keywords_table_headers.md – Table keywords (header-based)
- keywords_list.md – VerifyListCount, VerifySelectedCount
- keywords_ignore_rule.md – $IGNORE, $EMPTY, $DELETE
- keywords_noise.md – OnFailNOISE, OnFailIgnoreNOISE (NOISE/FAIL classification)
Concepts
- context.md – Runtime context (adapter, app, window)
- objektzustaende.md – Widget states (exists, visible, enabled, ...)
- okw_parameters.md – Timeouts and parameters (DE)
- synchronization_strategy.md – Sync strategy
- widgets_common.md – Widget hierarchy and OkwWidget interface
- table_tokens.md – $TAB/$LF token syntax
- regex_best_practices.md – Regex tips for Robot Framework
Waiting for Values and Synchronization
Verify keywords automatically wait for expected values (with timeout and polling):
# Set timeout (optional, default: 10s)
SetOKWParameter TimeOutVerifyValue 15
# Keyword waits up to 15s for the expected value
VerifyValue Status Logged in
Write actions (Click, SetValue, TypeKey, Select) check preconditions first:
exists → scroll_into_view → visible → enabled → editable → until_not_visible
Details: docs/okw_parameters.md, docs/synchronization_strategy.md
License
- Community (non-commercial): see LICENSE
- Commercial: see COMMERCIAL_LICENSE.md
- FAQ: docs/license_faq.md
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
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_okw4robot-0.5.6.tar.gz.
File metadata
- Download URL: robotframework_okw4robot-0.5.6.tar.gz
- Upload date:
- Size: 46.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca7272426e7bcc2fca758f77668a7f4798de1c5bd43dd647f42d5563aa23298b
|
|
| MD5 |
51879ffc66fdb26f716bd1d0c59fb4ba
|
|
| BLAKE2b-256 |
26f7c71d9fc01c949ff95f21cac6650b02ab25fefe914c5652e3990a33df3f4e
|
File details
Details for the file robotframework_okw4robot-0.5.6-py3-none-any.whl.
File metadata
- Download URL: robotframework_okw4robot-0.5.6-py3-none-any.whl
- Upload date:
- Size: 51.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d83997f2d4e9a44154be37f7064390a0aca7e97b3d98c513dd148950892e4c1c
|
|
| MD5 |
2d59c333bc0255ebcc0c7e46e2476c18
|
|
| BLAKE2b-256 |
3cdcf8facb99c35e852d780ec846aaceb08472721f86afbcc84710daae5f31a3
|