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
Metadata
Release files for robotframework-okw4robot 0.5.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| robotframework_okw4robot-0.5.6.tar.gz | 46.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| robotframework_okw4robot-0.5.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 98.1 kB
Release files / robotframework_okw4robot-0.5.6.tar.gz
| Download URL | robotframework_okw4robot-0.5.6.tar.gz |
|---|---|
| Size | 46.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ca7272426e7bcc2fca758f77668a7f4798de1c5bd43dd647f42d5563aa23298b
|
|
BLAKE2b-256 checksum How to use checksums |
26f7c71d9fc01c949ff95f21cac6650b02ab25fefe914c5652e3990a33df3f4e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / robotframework_okw4robot-0.5.6-py3-none-any.whl
| Download URL | robotframework_okw4robot-0.5.6-py3-none-any.whl |
|---|---|
| Size | 51.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d83997f2d4e9a44154be37f7064390a0aca7e97b3d98c513dd148950892e4c1c
|
|
BLAKE2b-256 checksum How to use checksums |
3cdcf8facb99c35e852d780ec846aaceb08472721f86afbcc84710daae5f31a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|