Skip to main content

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), not OKW4RobotLibrary directly. 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

Contracts and Specification

Keywords

Concepts


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

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)

Source distribution for robotframework-okw4robot 0.5.6
File Size Uploaded
robotframework_okw4robot-0.5.6.tar.gz 46.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for robotframework-okw4robot 0.5.6
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.5.6 This release

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page