Metadata-Version: 2.4
Name: robotframework-okw-web-selenium
Version: 0.3.0
Summary: Selenium driver for OKW4Robot - Web GUI test automation with Chrome, Firefox and more.
Author: Zoltán Hrabovszki
License: OKW4Robot Community License (Nicht‑kommerzielle Nutzung)
        
        Copyright (c) 2025 Zoltán Hrabovszki
        
        1. Begriffe
        - "Software": die Bibliothek "OKW4Robot" samt zugehöriger Quell‑ und Binärdateien.
        - "Nicht‑kommerzielle Nutzung": jede Nutzung zu privaten, akademischen oder Open‑Source‑Zwecken ohne direkten oder indirekten Umsatzbezug, sowie reine Evaluierung/PoC.
        - "Kommerzielle Nutzung": jede Nutzung in oder für ein Produkt, einen Service oder Prozess, der direkt oder indirekt Einnahmen generiert (z. B. bezahlte Projekte, Firmen‑CI/Tests für kommerzielle Produkte, SaaS, Resale). Für kommerzielle Nutzung ist eine gesonderte kommerzielle Lizenz erforderlich.
        
        2. Lizenzgewährung (nicht‑kommerziell)
        Der Rechteinhaber gewährt eine weltweite, nicht‑exklusive, nicht übertragbare, unentgeltliche Lizenz zur Nutzung, Vervielfältigung, Änderung und Weitergabe der Software ausschließlich für nicht‑kommerzielle Zwecke, vorausgesetzt, dass (a) dieser Lizenztext in Kopien und abgeleiteten Werken enthalten bleibt und (b) Urheber‑ und Hinweistexte nicht entfernt werden.
        
        3. Einschränkungen
        - Kommerzielle Nutzung ist ohne kommerzielle Lizenz untersagt.
        - Marken‑ und Namensrechte werden nicht gewährt.
        - Sublicensing ist nur unter Beibehaltung dieser Bedingungen zulässig.
        
        4. Support
        Es besteht kein Anspruch auf Wartung, Support oder Updates.
        
        5. Gewährleistungsausschluss
        Die Software wird "wie besehen" ("AS IS") bereitgestellt, ohne ausdrückliche oder stillschweigende Gewährleistung. Insbesondere wird keine Gewähr für Marktgängigkeit, Eignung für einen bestimmten Zweck, Nichtverletzung von Rechten Dritter, Fehlerfreiheit, Richtigkeit oder Verfügbarkeit übernommen.
        
        6. Haftungsbeschränkung
        Soweit gesetzlich zulässig, haften der Rechteinhaber und Mitwirkende in keinem Fall für Schäden jedweder Art (einschließlich, aber nicht beschränkt auf direkte, indirekte, zufällige, besondere, exemplarische oder Folgeschäden, entgangenen Gewinn, Produktions‑/Betriebsunterbrechung, Datenverlust oder Rechtsverfolgungskosten), die aus der Nutzung, Unmöglichkeit der Nutzung oder Leistung der Software entstehen, selbst wenn auf die Möglichkeit solcher Schäden hingewiesen wurde.
        
        Unberührt bleiben zwingende Haftungstatbestände (z. B. nach dem Produkthaftungsgesetz) sowie die Haftung für Vorsatz, grobe Fahrlässigkeit oder für Verletzungen von Leben, Körper oder Gesundheit nach geltendem Recht.
        
        7. Laufzeit und Beendigung
        Diese Lizenz gilt bis zu ihrer Beendigung. Bei Verstoß erlischt das Nutzungsrecht automatisch; die Nutzung ist einzustellen. Rechte an bereits rechtmäßig weitergegebenen Kopien bleiben unberührt.
        
        8. Sonstiges
        Es gilt materielles Recht des Sitzstaats des Rechteinhabers unter Ausschluss des Kollisionsrechts. Sollte eine Bestimmung unwirksam sein, bleibt der Rest wirksam (Salvatorische Klausel).
        
        Kommerzielle Lizenz
        Für eine kommerzielle Nutzung (siehe Abschnitt 1) wenden Sie sich bitte an den Rechteinhaber, um Konditionen und Gebühren zu vereinbaren.
        
Project-URL: Repository, https://github.com/Hrabovszki1023/robotframework-okw-web-selenium
Project-URL: Homepage, https://github.com/Hrabovszki1023/robotframework-okw-web-selenium
Project-URL: Documentation, https://hrabovszki1023.github.io/robotframework-okw-web-selenium/
Keywords: robotframework,testing,testautomation,gui,selenium,okw,web
Classifier: Development Status :: 4 - Beta
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Framework :: Robot Framework
Classifier: Framework :: Robot Framework :: Library
Classifier: Topic :: Software Development :: Testing
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: robotframework-okw4robot>=0.4.0
Requires-Dist: robotframework-seleniumlibrary>=6.0
Requires-Dist: selenium>=4.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Dynamic: license-file

# OKW Web Selenium

Selenium WebDriver plugin for [OKW4Robot](https://github.com/Hrabovszki1023/robotframework-okw4robot) —
the driver-agnostic keyword library for [Robot Framework](https://robotframework.org/).

This package provides `WebSe_*` widget implementations that translate
OKW keywords (`SetValue`, `ClickOn`, `VerifyValue`, ...) into Selenium
WebDriver calls for Chrome, Firefox, Edge and other browsers.

> **Deutsche Version:** [README_de.md](README_de.md)

---

## Installation

```bash
pip install robotframework-okw-web-selenium
```

This automatically installs `robotframework-okw4robot` (core) and
`robotframework-seleniumlibrary` as dependencies.

---

## Quick Start

```robotframework
*** Settings ***
Library    okw_web_selenium.library.OkwWebSeleniumLibrary

*** Test Cases ***
Login Test
    StartHost     Chrome
    StartApp      Chrome
    SelectWindow  Chrome
    SetValue      URL              https://example.com/login
    StartApp      MyApp
    SelectWindow  LoginDialog
    SetValue      Username         admin
    SetValue      Password         secret
    ClickOn       Login
    VerifyValue   Status           Logged in
    StopHost
```

All keywords come from the core (`okw4robot`). This package only provides
the Selenium-specific widget implementations — you never import individual
keyword modules.

---

## How It Works

```
OKW4Robot keyword              This package (WebSe_*)
─────────────────              ──────────────────────
SetValue "Name" "Smith"   →   WebSe_TextField.okw_set_value("Smith")
                               └→ Selenium: clear + input_text

ClickOn "Login"           →   WebSe_Button.okw_click()
                               └→ Selenium: click_element

VerifyValue "Status" "OK" →   WebSe_Label.okw_get_value()
                               └→ Selenium: get_text → polling loop
```

The YAML locator file determines which `WebSe_*` class is used for each
GUI object:

```yaml
# locators/MyApp.yaml
MyApp:
  LoginDialog:
    Username:
      class: okw_web_selenium.widgets.webse_textfield.WebSe_TextField
      locator: { id: user_input }
    Password:
      class: okw_web_selenium.widgets.webse_textfield.WebSe_TextField
      locator: { id: password_input }
    Login:
      class: okw_web_selenium.widgets.webse_button.WebSe_Button
      locator: { css: "button[type=submit]" }
```

---

## Widget Classes

| Class | HTML Elements | Key Methods |
|-------|--------------|-------------|
| `WebSe_TextField` | `<input>`, `<textarea>` | set_value, type_key, get_value, delete |
| `WebSe_Button` | `<button>`, `<input type=button>` | click, double_click, get_text |
| `WebSe_CheckBox` | `<input type=checkbox>` | click, set_value, get_value |
| `WebSe_ComboBox` | `<select>`, custom dropdowns | select, get_value, get_list_count |
| `WebSe_ListBox` | `<select multiple>`, `<ul>` lists | select, get_value, get_list_count |
| `WebSe_RadioList` | `<input type=radio>` groups | select, get_value |
| `WebSe_Label` | `<span>`, `<div>`, `<p>`, `<label>` | get_value, get_text |
| `WebSe_Link` | `<a>` | click, get_text |
| `WebSe_Table` | `<table>` | get_cell_value, get_row_count, get_headers |
| `WebSe_MultilineField` | `<textarea>`, contenteditable | set_value, type_key, get_value |
| `BrowserControl` | Browser host | start, stop, select_window |
| `UrlBar` | Address bar | set_value (navigate to URL) |

Full reference: [docs/widgets_common.md](docs/widgets_common.md)

---

## Documentation

- [docs/README.md](docs/README.md) – Documentation overview
- [docs/widgets_common.md](docs/widgets_common.md) – WebSe_* class reference
- [docs/Web_Widget_Matrix.md](docs/Web_Widget_Matrix.md) – HTML element → widget mapping
- [docs/radiolist.md](docs/radiolist.md) – RadioList locator strategies
- [docs/docs_host_app_config.md](docs/docs_host_app_config.md) – Host/App YAML configuration
- [docs/executejs-snippets.md](docs/executejs-snippets.md) – JavaScript snippets for ExecuteJS

For core documentation (keywords, contracts, timeouts, sync strategy) see
[robotframework-okw4robot](https://github.com/Hrabovszki1023/robotframework-okw4robot).

---

## Project Structure

```
robotframework-okw-web-selenium/
  src/okw_web_selenium/
    library.py              # OkwWebSeleniumLibrary (extends OKW4RobotLibrary)
    adapter.py              # SeleniumAdapter (browser lifecycle)
    widgets/
      webse_base.py         # WebSe_Base (shared Selenium logic)
      webse_textfield.py    # WebSe_TextField
      webse_button.py       # WebSe_Button
      webse_checkbox.py     # WebSe_CheckBox
      webse_combobox.py     # WebSe_ComboBox
      webse_listbox.py      # WebSe_ListBox
      webse_radiolist.py    # WebSe_RadioList
      webse_label.py        # WebSe_Label
      webse_link.py         # WebSe_Link
      webse_table.py        # WebSe_Table
      webse_multilinefield.py
      host/
        browsercontrol/     # BrowserControl + UrlBar
    locators/               # Built-in YAML locators (Chrome, WidgetsDemo, ...)
  tests/
    robot/                  # 53 Robot Framework integration tests
  docs/
```

---

## License

- **Community** (non-commercial): see [LICENSE](LICENSE)
- **Commercial**: see [COMMERCIAL_LICENSE.md](COMMERCIAL_LICENSE.md)
- **FAQ**: [docs/license_faq.md](docs/license_faq.md)
