robotframework-dialogsplus 0.1.1__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. robotframework_dialogsplus-0.2.1/CLAUDE.md +45 -0
  2. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/PKG-INFO +10 -4
  3. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/README.md +8 -2
  4. robotframework_dialogsplus-0.2.1/atests/testing.robot +215 -0
  5. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/docs/DialogsPlus.html +1 -1
  6. robotframework_dialogsplus-0.2.1/docs/HowTo.md +150 -0
  7. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/pyproject.toml +32 -31
  8. robotframework_dialogsplus-0.2.1/src/DialogsPlus/dialogsplus.py +382 -0
  9. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/src/DialogsPlus/widgets/base.py +31 -7
  10. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/src/DialogsPlus/widgets/styling.py +143 -9
  11. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/src/DialogsPlus/widgets/wrappers.py +51 -14
  12. robotframework_dialogsplus-0.2.1/uv.lock +432 -0
  13. robotframework_dialogsplus-0.1.1/atests/testing.robot +0 -106
  14. robotframework_dialogsplus-0.1.1/src/DialogsPlus/dialogsplus.py +0 -183
  15. robotframework_dialogsplus-0.1.1/uv.lock +0 -123
  16. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/.gitignore +0 -0
  17. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/.python-version +0 -0
  18. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/atests/config.yaml +0 -0
  19. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/src/DialogsPlus/__init__.py +0 -0
  20. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/src/DialogsPlus/py.typed +0 -0
  21. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/src/DialogsPlus/utils/config.py +0 -0
  22. {robotframework_dialogsplus-0.1.1 → robotframework_dialogsplus-0.2.1}/src/DialogsPlus/widgets/assets/robot.ico +0 -0
@@ -0,0 +1,45 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Project
6
+
7
+ `robotframework-dialogsplus` — a Robot Framework library providing modern, styled GUI dialogs (built on `customtkinter`) as a drop-in enhancement to Robot Framework's built-in `Dialogs` library. It only works with a real desktop (GUI dialogs require an interactive display), so it cannot run in headless CI/CD environments.
8
+
9
+ ## Commands
10
+
11
+ Package management is via `uv` (see `uv.lock`).
12
+
13
+ ```bash
14
+ uv sync # install dependencies into .venv
15
+ uv run robot atests/ # run the acceptance tests (opens real GUI dialogs — requires manual interaction)
16
+ uv run robot atests/testing.robot -t "Get Confirmation Returns Boolean" # run a single test case by name
17
+ uv run robotidy src atests # format Robot Framework files (robotframework-tidy, a dev dependency)
18
+ uv run ruff check . # lint Python source
19
+ uv build # build the wheel/sdist (hatchling backend)
20
+ ```
21
+
22
+ There is no Python unit test suite — correctness is verified only through the `.robot` acceptance tests in `atests/`, which pop up real dialog windows and require a human (or scripted UI automation) to click through them. They cannot run in headless/CI environments.
23
+
24
+ Keyword documentation (`docs/DialogsPlus.html`) is generated from the library's docstrings via Robot Framework's Libdoc, e.g.:
25
+
26
+ ```bash
27
+ uv run python -m robot.libdoc src/DialogsPlus/dialogsplus.py docs/DialogsPlus.html
28
+ ```
29
+
30
+ ## Architecture
31
+
32
+ The library follows a three-layer structure, all under `src/DialogsPlus/`:
33
+
34
+ 1. **`dialogsplus.py`** — the Robot Framework library class (`DialogsPlus`, `ROBOT_LIBRARY_SCOPE = 'SUITE'`). Each public method is decorated `@keyword` and becomes a Robot Framework keyword (e.g. `get_value_from_user_input` → `Get Value From User Input`). This layer only handles keyword argument parsing/validation, dynamic size calculations (e.g. dialog height/width scaled by number of fields/options in `get_multi_value` and `select_options_with_checkboxes`), and delegates the actual dialog logic to `widgets/wrappers.py`. The class constructor optionally loads a `DialogConfig` from a YAML file (`Library DialogsPlus config=path/to/config.yaml`).
35
+
36
+ 2. **`widgets/wrappers.py`** — one static-method "runner" class per keyword (e.g. `GetValueFromUserDialog`, `MultiValueInput`, `ChooseFromFileDialog`). Each wrapper instantiates the corresponding dialog class from `widgets/styling.py`, calls `.show()`, logs via `robot.api.logger`, and translates the raw dialog result dict into the keyword's return value (e.g. mapping a `status` of `"yes"/"no"/"cancel"` to `True/False/None`). `ExecuteManualStepDialog` also raises `robot.errors.ExecutionFailed` when the user fails a manual step, prompting for a failure reason via a nested `InputDialog`.
37
+
38
+ 3. **`widgets/styling.py`** — the actual `customtkinter`-based dialog implementations (`InputDialog`, `ManualStepDialog`, `CountdownDialog`, `ConfirmationDialog`, `MultiValueInputDialog`, `FileDialog`, `FolderDialog`, `CheckboxConfirmationDialog`, `MultiCheckboxDialog`, `PauseDialog`). Each subclasses `BaseDialog` from `widgets/base.py` and implements `build_ui(app)`, populating `self.result` and calling `app.quit()` on submit/cancel.
39
+
40
+ Supporting modules:
41
+
42
+ - **`widgets/base.py`** — `BaseDialogRunner` creates/centers/tears down the `ctk.CTk()` app window (sets appearance mode/theme once globally on first use, sets the window icon from `widgets/assets/robot.ico`, and runs `app.mainloop()`), and `BaseDialog` provides the styled widget factory methods (`create_button`, `create_label`, `create_entry`, `create_frame`, `create_progress_bar`, `create_checkbox`) that all dialogs use, plus the generic `show()` → `build_ui()` → return `self.result` flow.
43
+ - **`utils/config.py`** — `DialogConfig` holds all visual/layout settings (theme, fonts, colors, sizes, spacing) with defaults, and `DialogConfig.from_yaml(path)` loads overrides from a user-supplied YAML config file (see `atests/config.yaml` for the shape).
44
+
45
+ When adding a new keyword: add a `@keyword`-decorated method to `dialogsplus.py`, a runner class (or static method) in `wrappers.py`, and a new `BaseDialog` subclass in `styling.py` — following the existing pattern rather than putting UI logic directly in `dialogsplus.py`.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: robotframework-dialogsplus
3
- Version: 0.1.1
3
+ Version: 0.2.1
4
4
  Summary: A drop-in enhancement for Robot Framework's Dialogs library with modern UI and extended user interaction keywords.
5
5
  Author-email: Alpha-Centauri-00 <Alpha@Centauri.c0m>
6
6
  License-Expression: MIT
@@ -31,12 +31,18 @@ A drop-in enhancement for Robot Framework's Dialogs library with modern UI and e
31
31
  - Supports dynamic sizing based on input fields or options
32
32
 
33
33
  ---
34
+ ## Installation
34
35
 
35
- ## 📚 Keyword Documentation
36
+ ```bach
37
+ pip install robotframework-dialogsplus
38
+ ```
36
39
 
37
- 👉 View DialogsPlus Keyword [Docs](https://alpha-centauri-00.github.io/DialogsPlus/DialogsPlus.html)
38
40
 
41
+ ## 📚 Keyword Documentation
39
42
 
43
+ 👉 View DialogsPlus Keyword [Docs](https://alpha-centauri-00.github.io/DialogsPlus/DialogsPlus.html)
40
44
 
45
+ 👉 More Example of [HowTo](https://github.com/Alpha-Centauri-00/DialogsPlus/blob/main/docs/HowTo.md)
46
+
41
47
 
42
48
  Pull requests are welcome! More info coming soon.
@@ -19,12 +19,18 @@ A drop-in enhancement for Robot Framework's Dialogs library with modern UI and e
19
19
  - Supports dynamic sizing based on input fields or options
20
20
 
21
21
  ---
22
+ ## Installation
22
23
 
23
- ## 📚 Keyword Documentation
24
+ ```bach
25
+ pip install robotframework-dialogsplus
26
+ ```
24
27
 
25
- 👉 View DialogsPlus Keyword [Docs](https://alpha-centauri-00.github.io/DialogsPlus/DialogsPlus.html)
26
28
 
29
+ ## 📚 Keyword Documentation
27
30
 
31
+ 👉 View DialogsPlus Keyword [Docs](https://alpha-centauri-00.github.io/DialogsPlus/DialogsPlus.html)
28
32
 
33
+ 👉 More Example of [HowTo](https://github.com/Alpha-Centauri-00/DialogsPlus/blob/main/docs/HowTo.md)
34
+
29
35
 
30
36
  Pull requests are welcome! More info coming soon.
@@ -0,0 +1,215 @@
1
+ *** Settings ***
2
+ Library DialogsPlus #config=D:/robotframework-dialogsplus/atests/config.yaml
3
+ Library OperatingSystem
4
+
5
+ # Suite Setup Set Log Level level=TRACE
6
+ # Test Setup Log Test Case Name
7
+
8
+
9
+ *** Keywords ***
10
+ Log Test Case Name
11
+ [Tags] robot:flatten
12
+ Log <p style="background-color: #06bdb1; font-weight: bold; display: inline-block; padding: 4px;">*** Running Test: ${TEST NAME} ***</p> html=${True}
13
+
14
+ log Hello
15
+ Log Hello level=WARN
16
+
17
+ *** Variables ***
18
+
19
+ @{fields_val} username password email phone
20
+ @{fields} username password
21
+ &{default_val} username=admin password=P@55 phone=1234567
22
+ &{default} username=user1 password=P@55
23
+
24
+ *** Test Cases ***
25
+
26
+ Get Value From User Default
27
+ ${result} Get Value From User Input
28
+ ... prompt=Enter your name:
29
+ ... default=Robot framework
30
+
31
+ Should Be Equal ${result} Robot framework
32
+
33
+ Run Manual Steps Executes
34
+ VAR @{steps}
35
+ ... Open the app
36
+ ... Click Start button
37
+ ... Verify status
38
+
39
+ Run Manual Steps ${steps}
40
+ Log Manual steps executed successfully
41
+
42
+ Run Manual Steps Executes With Plain Args
43
+ Run Manual Steps
44
+ ... open github
45
+ ... add username
46
+ ... add password
47
+ ... press login
48
+
49
+ Log Manual steps executed successfully
50
+
51
+ Count Down Runs
52
+ Count Down 3
53
+ Log Countdown executed for 3 seconds
54
+
55
+ Get Confirmation Returns Boolean
56
+ ${result} Get Confirmation Are you sure?
57
+ Should Be True isinstance(${result}, bool)
58
+
59
+ Get Multi Value
60
+ ${result} Get Multi Value ${fields} default=${default}
61
+ Should Be Equal ${result}[username] user1
62
+
63
+
64
+ Get Multi Value Multiple Fields
65
+ ${result} Get Multi Value ${fields_val} default=${default_val}
66
+ Should Be Equal ${result}[password] P@55
67
+ Should Be Equal ${result}[phone] 1234567
68
+
69
+ Choose Single XML File
70
+ ${XML_FILETYPES} Evaluate [("xml files", "*.xml")]
71
+ ${result}= Choose File
72
+ ... message=Select Single XML File
73
+ ... filetypes=${XML_FILETYPES}
74
+
75
+ Should Contain ${result} .xml
76
+
77
+ Choose Multiple HTML Files
78
+ ${HTML_FILETYPES} Evaluate [("HTML", "*.html")]
79
+ ${result}= Choose File
80
+ ... message=Select Multiple HTML Files
81
+ ... filetypes=${HTML_FILETYPES} multiple=True
82
+
83
+ Should Contain ${result}[0] .html
84
+
85
+ Choose Folder Test
86
+ ${result}= Choose Folder message=Select Any Directory
87
+ Directory Should Exist ${result}
88
+
89
+ Single Ceckbox Test
90
+ ${r} Confirm With Checkbox
91
+ ... message=Do you accept the terms?
92
+ ... checkbox_text=I accept, no matter what!
93
+
94
+ Should Be True ${r}
95
+
96
+ Select Many Checkbox Test
97
+ ${r} Select Options With Checkboxes
98
+ ... message=Select as much as you want
99
+ ... options=${fields_val}
100
+
101
+ Should Not Be True ${r}[username]
102
+ Should Not Be True ${r}[password]
103
+ Should Not Be True ${r}[email]
104
+ Should Not Be True ${r}[phone]
105
+
106
+ Select Many Checkbox With Defaults Test
107
+ @{Contacts} Create List Email SMS Phone Slack Discord
108
+ @{Selected_Defaults} Create List Email SMS
109
+ ${selected}= Select Options With Checkboxes
110
+ ... message=Choose your preferences
111
+ ... options=${Contacts}
112
+ ... defaults=@{Selected_Defaults} # Default Selected!
113
+
114
+ Should Be True ${selected}[Email]
115
+ Should Be True ${selected}[SMS]
116
+ Should Not Be True ${selected}[Phone]
117
+ Should Not Be True ${selected}[Slack]
118
+ Should Not Be True ${selected}[Discord]
119
+
120
+ Pause The Test
121
+ Pause Test Execution message=Check If System Is Running!
122
+
123
+ Pause The Test With Command
124
+ Pause Test Execution message=Check If System Is Running! command=log Hello
125
+
126
+ Pause The Test With Command That Opens A Dialog
127
+ @{args} Create List 2
128
+ Pause Test Execution
129
+ ... message=Check If System Is Running!
130
+ ... command=Count Down
131
+ ... command_args=${args}
132
+
133
+ Pause The Test With Command That Fails
134
+ TRY
135
+ Pause Test Execution message=Click Run, then Continue command=Not Exist Keyword
136
+ EXCEPT AS ${error}
137
+ Log Caught expected failure: ${error}
138
+ END
139
+
140
+ Create Dialog With Text Box And Checkbox
141
+ Create Dialog title=Login Form
142
+ Add Text Box name=username label=Username default=admin
143
+ Add Checkbox name=remember_me label=Remember Me
144
+ Add Button text=OK
145
+ Add Button text=Cancel
146
+ ${result} Show Dialog
147
+ Log Button clicked: ${result}[button]
148
+ Log Username: ${result}[username]
149
+ Log Remember me: ${result}[remember_me]
150
+
151
+
152
+ Create Dialog With Side Command Button
153
+ Create Dialog title=Diagnostics
154
+ Add Label text=Run diagnostics before continuing if you like.
155
+ Add Button text=Run Diagnostics command=log Hello closes_dialog=False
156
+ Add Button text=OK
157
+ ${result} Show Dialog
158
+ Should Be Equal ${result}[button] OK
159
+
160
+ Add Text Box Fails Without Create Dialog First
161
+ TRY
162
+ Add Text Box name=orphan
163
+ EXCEPT AS ${error}
164
+ Log Caught expected failure: ${error}
165
+ END
166
+
167
+ Create Dialog Fails Without A Closing Button
168
+ Create Dialog title=No Closing Button
169
+ Add Label text=This has no OK/Cancel button
170
+ TRY
171
+ Show Dialog
172
+ EXCEPT AS ${error}
173
+ Log Caught expected failure: ${error}
174
+ END
175
+
176
+ Create Dialog With Masked Text Box
177
+ Create Dialog title=Login Form
178
+ Add Text Box name=username label=Username default=admin
179
+ Add Text Box name=password label=Password mask=True
180
+ Add Button text=OK
181
+ ${result} Show Dialog
182
+
183
+ Create Dialog With Radio Group
184
+ Create Dialog title=Test Result
185
+ Add Radio Group name=verdict label=Verdict options=Pass|Fail|Blocked default=Pass
186
+ Add Button text=OK
187
+ ${result} Show Dialog
188
+ Should Contain ${{['Pass', 'Fail', 'Blocked']}} ${result}[verdict]
189
+ Log Verdict selected: ${result}[verdict]
190
+
191
+ Add Radio Group Fail and Pass
192
+ Create Dialog title=Verdict
193
+ Add Radio Group name=verdict options=Pass|Fail default=Pass
194
+ Add Button text=OK
195
+ ${result} Show Dialog
196
+ Should Be Equal ${result}[verdict] Pass
197
+
198
+ Create Dialog With Dropdown
199
+ Create Dialog title=Browser Selection
200
+ Add Dropdown name=browser label=Browser options=Chrome|Firefox|Edge default=Firefox
201
+ Add Button text=OK
202
+ ${result} Show Dialog
203
+ Log Browser selected: ${result}[browser]
204
+
205
+ Add Dropdown Fails With Bad Default
206
+ Create Dialog title=Bad Dropdown Default
207
+ TRY
208
+ Add Dropdown name=browser options=Chrome|Firefox default=Safari
209
+ EXCEPT AS ${error}
210
+ Log Caught expected failure: ${error}
211
+ END
212
+ Add Dropdown name=browser options=Chrome|Firefox default=Chrome
213
+ Add Button text=OK
214
+ ${result} Show Dialog
215
+ Should Be Equal ${result}[browser] Chrome
@@ -8,7 +8,7 @@
8
8
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
9
9
  <meta name="Generator" content>
10
10
  <script type="text/javascript">
11
- libdoc = {"specversion": 3, "name": "DialogsPlus", "doc": "<p>DialogsPlus is a modern, customizable drop-in enhancement for Robot Framework\u2019s Dialogs library, built on top of customtkinter.</p>\n<p>This library extends standard dialog capabilities with stylish and user-friendly GUI dialogs, supporting customization of colors, fonts, and sizes via an external config.yaml file.</p>\n<p>Features:</p>\n<ul>\n<li>Easy-to-use dialogs for interactive test runs.</li>\n<li>Full GUI interface using customtkinter.</li>\n<li>Customizable appearance (colors, fonts, sizes, etc.) through config.yaml.</li>\n<li>Dynamic sizing based on user input or options.</li>\n<li>Drop-in replacement for Robot Framework\u2019s standard Dialogs library.</li>\n</ul>\n<p>Note:</p>\n<ul>\n<li>Not supported in headless environments (e.g., CI/CD pipelines like Jenkins or GitHub Actions).</li>\n</ul>\n<p>DialogsPlus is ideal for enhancing user interactions in Robot Framework tests with modern UI elements and extended keyword support.</p>", "version": "", "generated": "2025-10-19T13:09:15+00:00", "type": "LIBRARY", "scope": "TEST", "docFormat": "HTML", "source": "D:\\robotframework-dialogsplus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 21, "tags": [], "inits": [{"name": "__init__", "args": [{"name": "config", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "config: str | None = None"}], "returnType": null, "doc": "<p>Initialize DialogsPlus library with optional YAML config file.</p>", "shortdoc": "Initialize DialogsPlus library with optional YAML config file.", "tags": [], "source": "D:\\robotframework-dialogsplus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 40}], "keywords": [{"name": "Choose File", "args": [{"name": "message", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "message: str = "}, {"name": "filetypes", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "List", "typedoc": "list", "nested": [{"name": "tuple", "typedoc": "tuple", "nested": [], "union": false}], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "filetypes: List[tuple] | None = None"}, {"name": "multiple", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "multiple: bool = False"}], "returnType": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "doc": "<p>Opens file picker dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>message: Instruction text</li>\n<li>filetypes: List of (description, pattern) tuples, e.g. [(\"Text files\", \"*.txt\")]</li>\n<li>multiple: Allow selecting multiple files</li>\n</ul>\n<p>Returns file path string, list of paths if multiple=True, or None if cancelled.</p>", "shortdoc": "Opens file picker dialog.", "tags": [], "source": "D:\\robotframework-dialogsplus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 111}, {"name": "Choose Folder", "args": [{"name": "message", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "message: str"}], "returnType": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "doc": "<p>Opens folder picker dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>message: Instruction text</li>\n</ul>\n<p>Returns folder path string or None if cancelled.</p>", "shortdoc": "Opens folder picker dialog.", "tags": [], "source": "D:\\robotframework-dialogsplus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 124}, {"name": "Confirm With Checkbox", "args": [{"name": "message", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "message: str"}, {"name": "checkbox_text", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "I agree", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "checkbox_text: str = I agree"}], "returnType": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "doc": "<p>Shows confirmation dialog with checkbox.</p>\n<p>Arguments:</p>\n<ul>\n<li>message: Prompt text</li>\n<li>checkbox_text: Label for checkbox</li>\n</ul>\n<p>Returns True if checkbox was checked, False otherwise.</p>", "shortdoc": "Shows confirmation dialog with checkbox.", "tags": [], "source": "D:\\robotframework-dialogsplus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 135}, {"name": "Count Down", "args": [{"name": "seconds", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "int", "typedoc": "integer", "nested": [], "union": false}, {"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": true}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "seconds: int | str"}], "returnType": null, "doc": "<p>Shows countdown timer dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>seconds: Duration in seconds</li>\n</ul>\n<p>Dialog closes automatically when timer reaches zero.</p>", "shortdoc": "Shows countdown timer dialog.", "tags": [], "source": "D:\\robotframework-dialogsplus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 71}, {"name": "Get Confirmation", "args": [{"name": "message", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "message: str"}], "returnType": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "doc": "<p>Shows Yes/No/Cancel confirmation dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>message: Question or prompt text</li>\n</ul>\n<p>Returns True for Yes, False for No, None for Cancel.</p>", "shortdoc": "Shows Yes/No/Cancel confirmation dialog.", "tags": [], "source": "D:\\robotframework-dialogsplus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 82}, {"name": "Get Multi Value", "args": [{"name": "fields", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}], "union": true}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "fields: str | List[str]"}, {"name": "default", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Dict", "typedoc": "dictionary", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "default: Dict[str, str] | None = None"}], "returnType": {"name": "Union", "typedoc": null, "nested": [{"name": "Dict", "typedoc": "dictionary", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "doc": "<p>Prompts user for multiple input values in one dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>fields: List of field names or single field</li>\n<li>default: Dictionary of default values per field</li>\n</ul>\n<p>Returns dictionary with field names as keys and user inputs as values, or None if cancelled.</p>", "shortdoc": "Prompts user for multiple input values in one dialog.", "tags": [], "source": "D:\\robotframework-dialogsplus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 93}, {"name": "Get Value From User Input", "args": [{"name": "prompt", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "Enter value:", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "prompt: str = Enter value:"}, {"name": "default", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "default: str = "}], "returnType": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "doc": "<p>Prompts user for text input via dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>prompt: Text displayed above input field</li>\n<li>default: Pre-filled value</li>\n</ul>\n<p>Returns string input or None if cancelled.</p>", "shortdoc": "Prompts user for text input via dialog.", "tags": [], "source": "D:\\robotframework-dialogsplus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 48}, {"name": "Pause Test Execution", "args": [{"name": "message", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "Test execution paused", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "message: str = Test execution paused"}], "returnType": null, "doc": "<p>Pauses test execution until user clicks Continue.</p>\n<p>Arguments:</p>\n<ul>\n<li>message: Text displayed in dialog</li>\n</ul>\n<p>Test resumes when user clicks Continue button.</p>", "shortdoc": "Pauses test execution until user clicks Continue.", "tags": [], "source": "D:\\robotframework-dialogsplus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 175}, {"name": "Run Manual Steps", "args": [{"name": "steps", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}], "union": true}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "steps: str | List[str]"}], "returnType": null, "doc": "<p>Displays manual test steps with Pass/Fail buttons.</p>\n<p>Arguments:</p>\n<ul>\n<li>steps: Single step string or list of step strings</li>\n</ul>\n<p>Raises ExecutionFailed if user clicks Fail button.</p>", "shortdoc": "Displays manual test steps with Pass/Fail buttons.", "tags": [], "source": "D:\\robotframework-dialogsplus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 60}, {"name": "Select Options With Checkboxes", "args": [{"name": "message", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "message: str"}, {"name": "options", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}], "union": true}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "options: str | List[str]"}, {"name": "defaults", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "defaults: List[str] | None = None"}], "returnType": {"name": "Dict", "typedoc": "dictionary", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}], "union": false}, "doc": "<p>Shows multiple checkboxes for selection.</p>\n<p>Arguments:</p>\n<ul>\n<li>message: Instruction text</li>\n<li>options: List of options or pipe-separated string</li>\n<li>defaults: List of pre-selected option names</li>\n</ul>\n<p>Returns dictionary with option names as keys and True/False as values.</p>", "shortdoc": "Shows multiple checkboxes for selection.", "tags": [], "source": "D:\\robotframework-dialogsplus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 147}], "typedocs": [{"type": "Standard", "name": "boolean", "doc": "<p>Strings <code>TRUE</code>, <code>YES</code>, <code>ON</code> and <code>1</code> are converted to Boolean <code>True</code>, the empty string as well as strings <code>FALSE</code>, <code>NO</code>, <code>OFF</code> and <code>0</code> are converted to Boolean <code>False</code>, and the string <code>NONE</code> is converted to the Python <code>None</code> object. Other strings and other accepted values are passed as-is, allowing keywords to handle them specially if needed. All string comparisons are case-insensitive.</p>\n<p>Examples: <code>TRUE</code> (converted to <code>True</code>), <code>off</code> (converted to <code>False</code>), <code>example</code> (used as-is)</p>", "usages": ["Choose File", "Confirm With Checkbox", "Get Confirmation", "Select Options With Checkboxes"], "accepts": ["string", "integer", "float", "None"]}, {"type": "Standard", "name": "dictionary", "doc": "<p>Strings must be Python <a href=\"https://docs.python.org/library/stdtypes.html#dict\">dictionary</a> literals. They are converted to actual dictionaries using the <a href=\"https://docs.python.org/library/ast.html#ast.literal_eval\">ast.literal_eval</a> function. They can contain any values <code>ast.literal_eval</code> supports, including dictionaries and other containers.</p>\n<p>If the type has nested types like <code>dict[str, int]</code>, items are converted to those types automatically. This in new in Robot Framework 6.0.</p>\n<p>Examples: <code>{'a': 1, 'b': 2}</code>, <code>{'key': 1, 'nested': {'key': 2}}</code></p>", "usages": ["Get Multi Value", "Select Options With Checkboxes"], "accepts": ["string", "Mapping"]}, {"type": "Standard", "name": "integer", "doc": "<p>Conversion is done using Python's <a href=\"https://docs.python.org/library/functions.html#int\">int</a> built-in function. Floating point numbers are accepted only if they can be represented as integers exactly. For example, <code>1.0</code> is accepted and <code>1.1</code> is not.</p>\n<p>Starting from RF 4.1, it is possible to use hexadecimal, octal and binary numbers by prefixing values with <code>0x</code>, <code>0o</code> and <code>0b</code>, respectively.</p>\n<p>Starting from RF 4.1, spaces and underscores can be used as visual separators for digit grouping purposes.</p>\n<p>Examples: <code>42</code>, <code>-1</code>, <code>0b1010</code>, <code>10 000 000</code>, <code>0xBAD_C0FFEE</code></p>", "usages": ["Count Down"], "accepts": ["string", "float"]}, {"type": "Standard", "name": "list", "doc": "<p>Strings must be Python <a href=\"https://docs.python.org/library/stdtypes.html#list\">list</a> literals. They are converted to actual lists using the <a href=\"https://docs.python.org/library/ast.html#ast.literal_eval\">ast.literal_eval</a> function. They can contain any values <code>ast.literal_eval</code> supports, including lists and other containers.</p>\n<p>If the type has nested types like <code>list[int]</code>, items are converted to those types automatically. This in new in Robot Framework 6.0.</p>\n<p>Examples: <code>['one', 'two']</code>, <code>[('one', 1), ('two', 2)]</code></p>", "usages": ["Choose File", "Get Multi Value", "Run Manual Steps", "Select Options With Checkboxes"], "accepts": ["string", "Sequence"]}, {"type": "Standard", "name": "None", "doc": "<p>String <code>NONE</code> (case-insensitive) is converted to Python <code>None</code> object. Other values cause an error.</p>", "usages": ["__init__", "Choose File", "Choose Folder", "Get Confirmation", "Get Multi Value", "Get Value From User Input", "Select Options With Checkboxes"], "accepts": ["string"]}, {"type": "Standard", "name": "string", "doc": "<p>All arguments are converted to Unicode strings.</p>", "usages": ["__init__", "Choose File", "Choose Folder", "Confirm With Checkbox", "Count Down", "Get Confirmation", "Get Multi Value", "Get Value From User Input", "Pause Test Execution", "Run Manual Steps", "Select Options With Checkboxes"], "accepts": ["Any"]}, {"type": "Standard", "name": "tuple", "doc": "<p>Strings must be Python <a href=\"https://docs.python.org/library/stdtypes.html#tuple\">tuple</a> literals. They are converted to actual tuples using the <a href=\"https://docs.python.org/library/ast.html#ast.literal_eval\">ast.literal_eval</a> function. They can contain any values <code>ast.literal_eval</code> supports, including tuples and other containers.</p>\n<p>If the type has nested types like <code>tuple[str, int, int]</code>, items are converted to those types automatically. This in new in Robot Framework 6.0.</p>\n<p>Examples: <code>('one', 'two')</code>, <code>(('one', 1), ('two', 2))</code></p>", "usages": ["Choose File"], "accepts": ["string", "Sequence"]}]}
11
+ libdoc = {"specversion": 3, "name": "DialogsPlus", "doc": "<p>DialogsPlus is a modern, customizable drop-in enhancement for Robot Framework\u2019s Dialogs library, built on top of customtkinter.</p>\n<p>This library extends standard dialog capabilities with stylish and user-friendly GUI dialogs, supporting customization of colors, fonts, and sizes via an external config.yaml file.</p>\n<p>Features:</p>\n<ul>\n<li>Easy-to-use dialogs for interactive test runs.</li>\n<li>Full GUI interface using customtkinter.</li>\n<li>Customizable appearance (colors, fonts, sizes, etc.) through config.yaml.</li>\n<li>Dynamic sizing based on user input or options.</li>\n<li>Drop-in replacement for Robot Framework\u2019s standard Dialogs library.</li>\n</ul>\n<p>Note:</p>\n<ul>\n<li>Not supported in headless environments (e.g., CI/CD pipelines like Jenkins or GitHub Actions).</li>\n</ul>\n<p>DialogsPlus is ideal for enhancing user interactions in Robot Framework tests with modern UI elements and extended keyword support.</p>", "version": "", "generated": "2026-08-23T15:45:04+00:00", "type": "LIBRARY", "scope": "TEST", "docFormat": "HTML", "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 24, "tags": [], "inits": [{"name": "__init__", "args": [{"name": "config", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "config: str | None = None"}], "returnType": null, "doc": "<p>Initialize DialogsPlus library with optional YAML config file.</p>", "shortdoc": "Initialize DialogsPlus library with optional YAML config file.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 43}], "keywords": [{"name": "Add Button", "args": [{"name": "text", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "text: str"}, {"name": "command", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "command: str | None = None"}, {"name": "command_args", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "command_args: List[str] | None = None"}, {"name": "closes_dialog", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "True", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "closes_dialog: bool = True"}], "returnType": null, "doc": "<p>Adds a button to the dialog being built with Create Dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>text: Button label, and the value recorded under result['button'] if it closes the dialog</li>\n<li>command: Optional keyword name to run when clicked, via Robot Framework's Run Keyword - must be a keyword already available in the running suite</li>\n<li>command_args: Optional list of arguments passed to that keyword</li>\n<li>closes_dialog: If True (default), clicking this button runs its command (if any), collects the current field values, and closes the dialog. If False, the button only runs its command and the dialog stays open - e.g. for a \"Run Diagnostics\" action next to OK/Cancel.</li>\n</ul>\n<p>Raises ExecutionFailed if called before Create Dialog.</p>", "shortdoc": "Adds a button to the dialog being built with Create Dialog.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 334}, {"name": "Add Checkbox", "args": [{"name": "name", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "name: str"}, {"name": "label", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "label: str | None = None"}, {"name": "default", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "default: bool = False"}], "returnType": null, "doc": "<p>Adds a checkbox to the dialog being built with Create Dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>name: Key used for this field's True/False value in Show Dialog's result</li>\n<li>label: Text shown next to the checkbox (defaults to name)</li>\n<li>default: Whether the checkbox starts checked</li>\n</ul>\n<p>Raises ExecutionFailed if called before Create Dialog, or if name was already used.</p>", "shortdoc": "Adds a checkbox to the dialog being built with Create Dialog.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 258}, {"name": "Add Dropdown", "args": [{"name": "name", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "name: str"}, {"name": "options", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}], "union": true}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "options: str | List[str]"}, {"name": "label", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "label: str | None = None"}, {"name": "default", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "default: str | None = None"}], "returnType": null, "doc": "<p>Adds a dropdown (single choice) to the dialog being built with Create Dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>name: Key used for this field's selected value in Show Dialog's result</li>\n<li>options: List of choices, or a pipe-separated string (e.g. 'Chrome|Firefox|Edge')</li>\n<li>label: Text shown next to the dropdown (defaults to name)</li>\n<li>default: Which option starts selected (defaults to the first option)</li>\n</ul>\n<p>Raises ExecutionFailed if called before Create Dialog, if name was already used, if options is empty, or if default isn't one of the options.</p>", "shortdoc": "Adds a dropdown (single choice) to the dialog being built with Create Dialog.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 297}, {"name": "Add Label", "args": [{"name": "text", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "text: str"}], "returnType": null, "doc": "<p>Adds a plain text line to the dialog being built with Create Dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>text: Text to display</li>\n</ul>\n<p>Purely visual - not included in Show Dialog's result. Raises ExecutionFailed if called before Create Dialog.</p>", "shortdoc": "Adds a plain text line to the dialog being built with Create Dialog.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 321}, {"name": "Add Radio Group", "args": [{"name": "name", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "name: str"}, {"name": "options", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}], "union": true}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "options: str | List[str]"}, {"name": "label", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "label: str | None = None"}, {"name": "default", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "default: str | None = None"}], "returnType": null, "doc": "<p>Adds a group of mutually-exclusive radio buttons to the dialog being built with Create Dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>name: Key used for this field's selected value in Show Dialog's result</li>\n<li>options: List of choices, or a pipe-separated string (e.g. 'Pass|Fail|Blocked')</li>\n<li>label: Text shown above the group (defaults to name)</li>\n<li>default: Which option starts selected (defaults to the first option)</li>\n</ul>\n<p>Raises ExecutionFailed if called before Create Dialog, if name was already used, if options is empty, or if default isn't one of the options.</p>", "shortdoc": "Adds a group of mutually-exclusive radio buttons to the dialog being built with Create Dialog.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 273}, {"name": "Add Text Box", "args": [{"name": "name", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "name: str"}, {"name": "label", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "label: str | None = None"}, {"name": "default", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "default: str = "}, {"name": "mask", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "mask: bool = False"}], "returnType": null, "doc": "<p>Adds a text input field to the dialog being built with Create Dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>name: Key used for this field's value in Show Dialog's result</li>\n<li>label: Text shown next to the field (defaults to name)</li>\n<li>default: Pre-filled value</li>\n<li>mask: If True, displays entered text as asterisks (for passwords/secrets)</li>\n</ul>\n<p>Raises ExecutionFailed if called before Create Dialog, or if name was already used.</p>", "shortdoc": "Adds a text input field to the dialog being built with Create Dialog.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 242}, {"name": "Choose File", "args": [{"name": "message", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "message: str = "}, {"name": "filetypes", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "List", "typedoc": "list", "nested": [{"name": "tuple", "typedoc": "tuple", "nested": [], "union": false}], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "filetypes: List[tuple] | None = None"}, {"name": "multiple", "type": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "multiple: bool = False"}], "returnType": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "doc": "<p>Opens file picker dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>message: Instruction text</li>\n<li>filetypes: List of (description, pattern) tuples, e.g. [(\"Text files\", \"*.txt\")]</li>\n<li>multiple: Allow selecting multiple files</li>\n</ul>\n<p>Returns file path string, list of paths if multiple=True, or None if cancelled.</p>", "shortdoc": "Opens file picker dialog.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 138}, {"name": "Choose Folder", "args": [{"name": "message", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "message: str"}], "returnType": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "doc": "<p>Opens folder picker dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>message: Instruction text</li>\n</ul>\n<p>Returns folder path string or None if cancelled.</p>", "shortdoc": "Opens folder picker dialog.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 151}, {"name": "Confirm With Checkbox", "args": [{"name": "message", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "message: str"}, {"name": "checkbox_text", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "I agree", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "checkbox_text: str = I agree"}], "returnType": {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, "doc": "<p>Shows confirmation dialog with checkbox.</p>\n<p>Arguments:</p>\n<ul>\n<li>message: Prompt text</li>\n<li>checkbox_text: Label for checkbox</li>\n</ul>\n<p>Returns True if checkbox was checked, False otherwise.</p>", "shortdoc": "Shows confirmation dialog with checkbox.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 162}, {"name": "Count Down", "args": [{"name": "seconds", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "int", "typedoc": "integer", "nested": [], "union": false}, {"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": true}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "seconds: int | str"}], "returnType": null, "doc": "<p>Shows countdown timer dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>seconds: Duration in seconds</li>\n</ul>\n<p>Dialog closes automatically when timer reaches zero.</p>", "shortdoc": "Shows countdown timer dialog.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 98}, {"name": "Create Dialog", "args": [{"name": "title", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "Custom Dialog", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "title: str = Custom Dialog"}], "returnType": null, "doc": "<p>Starts building a custom dialog with your own combination of elements.</p>\n<p>Arguments:</p>\n<ul>\n<li>title: Window title for the dialog</li>\n</ul>\n<p>Add elements with Add Text Box / Add Checkbox / Add Radio Group / Add Dropdown / Add Label / Add Button, then call Show Dialog to display it and get the results.</p>\n<p>Raises ExecutionFailed if a dialog is already being built (Show Dialog wasn't called yet for a previous Create Dialog).</p>", "shortdoc": "Starts building a custom dialog with your own combination of elements.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 225}, {"name": "Get Confirmation", "args": [{"name": "message", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "message: str"}], "returnType": {"name": "Union", "typedoc": null, "nested": [{"name": "bool", "typedoc": "boolean", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "doc": "<p>Shows Yes/No/Cancel confirmation dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>message: Question or prompt text</li>\n</ul>\n<p>Returns True for Yes, False for No, None for Cancel.</p>", "shortdoc": "Shows Yes/No/Cancel confirmation dialog.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 109}, {"name": "Get Multi Value", "args": [{"name": "fields", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}], "union": true}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "fields: str | List[str]"}, {"name": "default", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "Dict", "typedoc": "dictionary", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "default: Dict[str, str] | None = None"}], "returnType": {"name": "Union", "typedoc": null, "nested": [{"name": "Dict", "typedoc": "dictionary", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "doc": "<p>Prompts user for multiple input values in one dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>fields: List of field names or single field</li>\n<li>default: Dictionary of default values per field</li>\n</ul>\n<p>Returns dictionary with field names as keys and user inputs as values, or None if cancelled.</p>", "shortdoc": "Prompts user for multiple input values in one dialog.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 120}, {"name": "Get Value From User Input", "args": [{"name": "prompt", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "Enter value:", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "prompt: str = Enter value:"}, {"name": "default", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "default: str = "}], "returnType": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "doc": "<p>Prompts user for text input via dialog.</p>\n<p>Arguments:</p>\n<ul>\n<li>prompt: Text displayed above input field</li>\n<li>default: Pre-filled value</li>\n</ul>\n<p>Returns string input or None if cancelled.</p>", "shortdoc": "Prompts user for text input via dialog.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 70}, {"name": "Pause Test Execution", "args": [{"name": "message", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": "Test execution paused", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "message: str = Test execution paused"}, {"name": "command", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "command: str | None = None"}, {"name": "command_args", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "command_args: List[str] | None = None"}], "returnType": null, "doc": "<p>Pauses test execution until user clicks Continue.</p>\n<p>Arguments:</p>\n<ul>\n<li>message: Text displayed in dialog</li>\n<li>command: Optional keyword name. When given, an extra \"Run\" button is shown next to Continue that runs it via Robot Framework's Run Keyword, so it must be a keyword already available in the running suite (user keyword, resource file, or imported library) - can be clicked any number of times while paused.</li>\n<li>command_args: Optional list of arguments passed to that keyword</li>\n</ul>\n<p>Test resumes when user clicks Continue button.</p>\n<p>Raises ExecutionFailed if the most recent \"Run\" click failed (e.g. the keyword doesn't exist or raised an error).</p>", "shortdoc": "Pauses test execution until user clicks Continue.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 202}, {"name": "Run Manual Steps", "args": [{"name": "steps", "type": null, "defaultValue": null, "kind": "VAR_POSITIONAL", "required": false, "repr": "*steps"}], "returnType": null, "doc": "<p>Displays manual test steps with Pass/Fail buttons.</p>\n<p>Arguments:</p>\n<ul>\n<li>steps: One step per argument (e.g. <span class=\"name\">open github add username add password</span>), or a single list/string variable (e.g. <span class=\"name\">${steps}</span>)</li>\n</ul>\n<p>Raises ExecutionFailed if user clicks Fail button.</p>", "shortdoc": "Displays manual test steps with Pass/Fail buttons.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 82}, {"name": "Select Options With Checkboxes", "args": [{"name": "message", "type": {"name": "str", "typedoc": "string", "nested": [], "union": false}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "message: str"}, {"name": "options", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}], "union": true}, "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "options: str | List[str]"}, {"name": "defaults", "type": {"name": "Union", "typedoc": null, "nested": [{"name": "List", "typedoc": "list", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}], "union": false}, {"name": "None", "typedoc": "None", "nested": [], "union": false}], "union": true}, "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "defaults: List[str] | None = None"}], "returnType": {"name": "Dict", "typedoc": "dictionary", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "bool", "typedoc": "boolean", "nested": [], "union": false}], "union": false}, "doc": "<p>Shows multiple checkboxes for selection.</p>\n<p>Arguments:</p>\n<ul>\n<li>message: Instruction text</li>\n<li>options: List of options or pipe-separated string</li>\n<li>defaults: List of pre-selected option names</li>\n</ul>\n<p>Returns dictionary with option names as keys and True/False as values.</p>", "shortdoc": "Shows multiple checkboxes for selection.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 174}, {"name": "Show Dialog", "args": [], "returnType": {"name": "Dict", "typedoc": "dictionary", "nested": [{"name": "str", "typedoc": "string", "nested": [], "union": false}, {"name": "Any", "typedoc": "Any", "nested": [], "union": false}], "union": false}, "doc": "<p>Displays the dialog built with Create Dialog/Add ... keywords and returns the results.</p>\n<p>Returns a dictionary with one entry per named field (from Add Text Box/Add Checkbox), plus 'button' set to the text of whichever closing button was clicked.</p>\n<p>Raises ExecutionFailed if no dialog is in progress, if no closing button (Add Button with closes_dialog=True, the default) was added, or if the button that closed the dialog had a command that failed.</p>", "shortdoc": "Displays the dialog built with Create Dialog/Add ... keywords and returns the results.", "tags": [], "source": "C:\\Users\\xlmn\\Documents\\testing\\DialogsPlus\\src\\DialogsPlus\\dialogsplus.py", "lineno": 360}], "typedocs": [{"type": "Standard", "name": "Any", "doc": "<p>Any value is accepted. No conversion is done.</p>", "usages": ["Show Dialog"], "accepts": ["Any"]}, {"type": "Standard", "name": "boolean", "doc": "<p>Strings <code>TRUE</code>, <code>YES</code>, <code>ON</code> and <code>1</code> are converted to Boolean <code>True</code>, the empty string as well as strings <code>FALSE</code>, <code>NO</code>, <code>OFF</code> and <code>0</code> are converted to Boolean <code>False</code>, and the string <code>NONE</code> is converted to the Python <code>None</code> object. Other strings and other accepted values are passed as-is, allowing keywords to handle them specially if needed. All string comparisons are case-insensitive.</p>\n<p>Examples: <code>TRUE</code> (converted to <code>True</code>), <code>off</code> (converted to <code>False</code>), <code>example</code> (used as-is)</p>", "usages": ["Add Button", "Add Checkbox", "Add Text Box", "Choose File", "Confirm With Checkbox", "Get Confirmation", "Select Options With Checkboxes"], "accepts": ["string", "integer", "float", "None"]}, {"type": "Standard", "name": "dictionary", "doc": "<p>Strings must be Python <a href=\"https://docs.python.org/library/stdtypes.html#dict\">dictionary</a> literals. They are converted to actual dictionaries using the <a href=\"https://docs.python.org/library/ast.html#ast.literal_eval\">ast.literal_eval</a> function. They can contain any values <code>ast.literal_eval</code> supports, including dictionaries and other containers.</p>\n<p>If the type has nested types like <code>dict[str, int]</code>, items are converted to those types automatically. This in new in Robot Framework 6.0.</p>\n<p>Examples: <code>{'a': 1, 'b': 2}</code>, <code>{'key': 1, 'nested': {'key': 2}}</code></p>", "usages": ["Get Multi Value", "Select Options With Checkboxes", "Show Dialog"], "accepts": ["string", "Mapping"]}, {"type": "Standard", "name": "integer", "doc": "<p>Conversion is done using Python's <a href=\"https://docs.python.org/library/functions.html#int\">int</a> built-in function. Floating point numbers are accepted only if they can be represented as integers exactly. For example, <code>1.0</code> is accepted and <code>1.1</code> is not.</p>\n<p>Starting from RF 4.1, it is possible to use hexadecimal, octal and binary numbers by prefixing values with <code>0x</code>, <code>0o</code> and <code>0b</code>, respectively.</p>\n<p>Starting from RF 4.1, spaces and underscores can be used as visual separators for digit grouping purposes.</p>\n<p>Examples: <code>42</code>, <code>-1</code>, <code>0b1010</code>, <code>10 000 000</code>, <code>0xBAD_C0FFEE</code></p>", "usages": ["Count Down"], "accepts": ["string", "float"]}, {"type": "Standard", "name": "list", "doc": "<p>Strings must be Python <a href=\"https://docs.python.org/library/stdtypes.html#list\">list</a> literals. They are converted to actual lists using the <a href=\"https://docs.python.org/library/ast.html#ast.literal_eval\">ast.literal_eval</a> function. They can contain any values <code>ast.literal_eval</code> supports, including lists and other containers.</p>\n<p>If the type has nested types like <code>list[int]</code>, items are converted to those types automatically. This in new in Robot Framework 6.0.</p>\n<p>Examples: <code>['one', 'two']</code>, <code>[('one', 1), ('two', 2)]</code></p>", "usages": ["Add Button", "Add Dropdown", "Add Radio Group", "Choose File", "Get Multi Value", "Pause Test Execution", "Select Options With Checkboxes"], "accepts": ["string", "Sequence"]}, {"type": "Standard", "name": "None", "doc": "<p>String <code>NONE</code> (case-insensitive) is converted to Python <code>None</code> object. Other values cause an error.</p>", "usages": ["__init__", "Add Button", "Add Checkbox", "Add Dropdown", "Add Radio Group", "Add Text Box", "Choose File", "Choose Folder", "Get Confirmation", "Get Multi Value", "Get Value From User Input", "Pause Test Execution", "Select Options With Checkboxes"], "accepts": ["string"]}, {"type": "Standard", "name": "string", "doc": "<p>All arguments are converted to Unicode strings.</p>", "usages": ["__init__", "Add Button", "Add Checkbox", "Add Dropdown", "Add Label", "Add Radio Group", "Add Text Box", "Choose File", "Choose Folder", "Confirm With Checkbox", "Count Down", "Create Dialog", "Get Confirmation", "Get Multi Value", "Get Value From User Input", "Pause Test Execution", "Select Options With Checkboxes", "Show Dialog"], "accepts": ["Any"]}, {"type": "Standard", "name": "tuple", "doc": "<p>Strings must be Python <a href=\"https://docs.python.org/library/stdtypes.html#tuple\">tuple</a> literals. They are converted to actual tuples using the <a href=\"https://docs.python.org/library/ast.html#ast.literal_eval\">ast.literal_eval</a> function. They can contain any values <code>ast.literal_eval</code> supports, including tuples and other containers.</p>\n<p>If the type has nested types like <code>tuple[str, int, int]</code>, items are converted to those types automatically. This in new in Robot Framework 6.0.</p>\n<p>Examples: <code>('one', 'two')</code>, <code>(('one', 1), ('two', 2))</code></p>", "usages": ["Choose File"], "accepts": ["string", "Sequence"]}]}
12
12
  </script>
13
13
  <link rel="icon" type="image/x-icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAqAAAAAAAAAAAAAAAAAAAALIAAAD/AAAA4AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA4AAAAP8AAACxAAAAAAAAAKYAAAD/AAAAuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/AAAA/wAAAKkAAAD6AAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN8AAAD/AAAA+gAAAMMAAAAAAAAAAgAAAGsAAABrAAAAawAAAGsAAABrAAAAawAAAGsAAABrAAAADAAAAAAAAADaAAAA/wAAAPoAAADDAAAAAAAAAIsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAANEAAAAAAAAA2gAAAP8AAAD6AAAAwwAAAAAAAAAAAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAFAAAAAAAAANoAAAD/AAAA+gAAAMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADaAAAA/wAAAPoAAADDAAAAAAAAADwAAAB8AAAAAAAAAGAAAABcAAAAAAAAAH8AAABKAAAAAAAAAAAAAAAAAAAA2gAAAP8AAAD6AAAAwwAAAAAAAADCAAAA/wAAACkAAADqAAAA4QAAAAAAAAD7AAAA/wAAALAAAAAGAAAAAAAAANoAAAD/AAAA+gAAAMMAAAAAAAAAIwAAAP4AAAD/AAAA/wAAAGAAAAAAAAAAAAAAAMkAAAD/AAAAigAAAAAAAADaAAAA/wAAAPoAAADDAAAAAAAAAAAAAAAIAAAAcAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAA2gAAAP8AAAD7AAAAywAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN4AAAD/AAAAqwAAAP8AAACvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALIAAAD/AAAAsgAAAAAAAAC5AAAA/wAAAMoAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMkAAAD/AAAAvAAAAAAAAAAAAAAAAAAAAKwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArQAAAAAAAAAAwAMAAIABAAAf+AAAP/wAAD/8AAAgBAAAP/wAAD/8AAA//AAAJIwAADHEAAA//AAAP/wAAB/4AACAAQAAwAMAAA==">
14
14
  </head>
@@ -0,0 +1,150 @@
1
+ # 📘 DialogsPlus Documentation
2
+
3
+ DialogsPlus is an extended UI/dialog library for Robot Framework, designed to interactively collect user inputs, confirmations, file/folder selections, and control test execution flow with dialogs.
4
+
5
+ This document describes the available keywords and provides usage examples.
6
+
7
+ # 🔧 Configuration
8
+ Before using the library, you can specify an optional YAML config:
9
+
10
+ ```bach
11
+ *** Settings ***
12
+ Library DialogsPlus #config=path/to/config.yaml
13
+ ```
14
+ Optional config file allows customization of:
15
+
16
+ - Theme colors
17
+
18
+ - Font sizes
19
+
20
+ - Window dimensions
21
+
22
+ - Padding
23
+ ```yaml
24
+ title: "Custom Dialog"
25
+ width: 400
26
+ height: 200
27
+ theme: "green"
28
+ appearance_mode: "light"
29
+ button_fg_color: "#aaa"
30
+ etc...
31
+ ```
32
+
33
+ ## 🧩 Keywords Overview
34
+
35
+ 🧾 `Get Value From User Input`
36
+ Prompts the user for a single line of text input.
37
+
38
+ ```r
39
+ ${result} Get Value From User Input prompt=Enter your name: default=Robot framework
40
+ Should Be Equal ${result} Robot framework
41
+ ```
42
+
43
+ 📝 `Run Manual Steps`
44
+ Displays manual test steps with Pass/Fail buttons.
45
+
46
+ ```r
47
+ ${steps} Create List
48
+ ... 01 Open the app
49
+ ... 02 Click Start button
50
+ ... 03 Verify status
51
+
52
+ Run Manual Steps ${steps}
53
+ # Or One Test Step as normal text:
54
+ Run Manual Steps Open Google
55
+ ```
56
+ ⏳ `Count Down`
57
+ Shows a countdown timer dialog that automatically closes.
58
+ ```r
59
+ Count Down 5
60
+ ```
61
+ ❓ `Get Confirmation` Displays a Yes / No / Cancel dialog.
62
+ ```r
63
+ ${result} Get Confirmation Are you sure?
64
+ Should Be True ${result}
65
+ ```
66
+ 🧮 `Get Multi Value` Prompts for multiple input fields in a single dialog.
67
+ ```r
68
+ *** Test Cases ***
69
+ Get Value Test
70
+ ${result} Get Multi Value username
71
+ Should Be Equal ${result}[username] user1
72
+
73
+ # Or another approach, with more fields!
74
+
75
+ *** Variables ***
76
+ @{fields_val} username password email phone
77
+ &{default_val} username=admin password=P@55 phone=1234567
78
+
79
+ *** Test Cases ***
80
+ Get Multi Value Multiple Fields
81
+ ${result} Get Multi Value ${fields_val} default=${default_val}
82
+ Should Be Equal ${result}[password] P@55
83
+ Should Be Equal ${result}[phone] 1234567
84
+ ```
85
+ 📄 `Choose File` Opens a native file picker dialog and Returns file **PATH** as a string.
86
+ ```r
87
+ Choose Single XML File
88
+ ${XML_FILETYPES} Evaluate [("xml files", "*.xml")] # [("Text files", "*.txt")]
89
+ ${result}= Choose File
90
+ ... message=Select Single XML File
91
+ ... filetypes=${XML_FILETYPES}
92
+
93
+ # Or another approach, with many files path and return as a list[str]!
94
+
95
+ Choose Multiple HTML Files
96
+ ${HTML_FILETYPES} Evaluate [("HTML", "*.html")]
97
+ ${result}= Choose File
98
+ ... message=Select Multiple HTML Files
99
+ ... filetypes=${HTML_FILETYPES} multiple=True
100
+ Should Contain ${result}[0] .html
101
+ ```
102
+ 📁 `Choose Folder` Opens a folder selection dialog.
103
+ ```r
104
+ ${dir} Choose Folder message=Select output directory
105
+ Directory Should Exist ${dir}
106
+ ```
107
+ ✅ `Confirm With Checkbox` Prompts the user to confirm an action with a checkbox.
108
+ ```r
109
+ Select Single CheckBox
110
+ ${confirmed} Confirm With Checkbox
111
+ ... message=Accept terms?
112
+ ... checkbox_text=I accept
113
+ Should Be True ${confirmed}
114
+
115
+ # Or with many checkboxes
116
+
117
+ *** Variables ***
118
+ @{fields_val} username password email phone
119
+
120
+ *** Test Cases ***
121
+ Select Many Checkbox Test
122
+ ${r} Select Options With Checkboxes
123
+ ... message=Select as much as you want
124
+ ... options=${fields_val}
125
+
126
+ Should Not Be True ${r}[username]
127
+ Should Not Be True ${r}[password]
128
+ Should Not Be True ${r}[email]
129
+ Should Not Be True ${r}[phone]
130
+
131
+ # Another example with default checkboxes checked!
132
+
133
+ Select Many Checkbox With Defaults Test
134
+ @{Contacts} Create List Email SMS Phone Slack Discord
135
+ @{Selected_Defaults} Create List Email SMS
136
+ ${selected}= Select Options With Checkboxes
137
+ ... message=Choose your preferences
138
+ ... options=${Contacts}
139
+ ... defaults=@{Selected_Defaults} # Default Selected!
140
+
141
+ Should Be True ${selected}[Email]
142
+ Should Be True ${selected}[SMS]
143
+ Should Not Be True ${selected}[Phone]
144
+ Should Not Be True ${selected}[Slack]
145
+ Should Not Be True ${selected}[Discord]
146
+ ```
147
+ ⏸️ `Pause Test Execution` Pauses the test run and waits for the user to click "Continue".
148
+ ```r
149
+ Pause Test Execution message=Manually verify system state
150
+ ```