robotframework-appiumwindows 0.1.0__py3-none-any.whl → 0.1.3__py3-none-any.whl
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.
- AppiumLibrary/__init__.py +106 -106
- AppiumLibrary/appium_path.py +10 -9
- AppiumLibrary/keywords/__init__.py +21 -21
- AppiumLibrary/keywords/_applicationmanagement.py +595 -515
- AppiumLibrary/keywords/_element.py +1336 -1282
- AppiumLibrary/keywords/_logging.py +63 -63
- AppiumLibrary/keywords/_powershell.py +578 -553
- AppiumLibrary/keywords/_runonfailure.py +74 -74
- AppiumLibrary/keywords/_screenrecord.py +138 -138
- AppiumLibrary/keywords/_screenshot.py +105 -109
- AppiumLibrary/keywords/_waiting.py +163 -163
- AppiumLibrary/keywords/_windows.py +271 -215
- AppiumLibrary/keywords/keywordgroup.py +71 -70
- AppiumLibrary/locators/__init__.py +7 -7
- AppiumLibrary/locators/elementfinder.py +264 -264
- AppiumLibrary/utils/__init__.py +50 -50
- AppiumLibrary/utils/applicationcache.py +48 -48
- AppiumLibrary/version.py +2 -2
- robotframework_appiumwindows-0.1.3.dist-info/METADATA +216 -0
- robotframework_appiumwindows-0.1.3.dist-info/RECORD +23 -0
- {robotframework_appiumwindows-0.1.0.dist-info → robotframework_appiumwindows-0.1.3.dist-info}/WHEEL +1 -1
- {robotframework_appiumwindows-0.1.0.dist-info → robotframework_appiumwindows-0.1.3.dist-info}/licenses/LICENSE +20 -20
- robotframework_appiumwindows-0.1.0.dist-info/METADATA +0 -148
- robotframework_appiumwindows-0.1.0.dist-info/RECORD +0 -23
- {robotframework_appiumwindows-0.1.0.dist-info → robotframework_appiumwindows-0.1.3.dist-info}/top_level.txt +0 -0
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
from robot.utils import ConnectionCache
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class ApplicationCache(ConnectionCache):
|
|
5
|
-
|
|
6
|
-
def __init__(self):
|
|
7
|
-
ConnectionCache.__init__(self, no_current_msg='No current application')
|
|
8
|
-
self._closed = set()
|
|
9
|
-
|
|
10
|
-
@property
|
|
11
|
-
def applications(self):
|
|
12
|
-
return self._connections
|
|
13
|
-
|
|
14
|
-
def get_open_browsers(self):
|
|
15
|
-
open_applications = []
|
|
16
|
-
for application in self._connections:
|
|
17
|
-
if application not in self._closed:
|
|
18
|
-
open_applications.append(application)
|
|
19
|
-
return open_applications
|
|
20
|
-
|
|
21
|
-
def close(self, ignore_fail=False, quit_app=True):
|
|
22
|
-
if self.current:
|
|
23
|
-
application = self.current
|
|
24
|
-
try:
|
|
25
|
-
if quit_app:
|
|
26
|
-
application.quit()
|
|
27
|
-
else:
|
|
28
|
-
application.close()
|
|
29
|
-
except Exception as err:
|
|
30
|
-
if not ignore_fail:
|
|
31
|
-
raise err
|
|
32
|
-
self.current = self._no_current
|
|
33
|
-
self.current_index = None
|
|
34
|
-
self._closed.add(application)
|
|
35
|
-
|
|
36
|
-
def close_all(self, ignore_fail=True, quit_app=True):
|
|
37
|
-
for application in self._connections:
|
|
38
|
-
if application not in self._closed:
|
|
39
|
-
try:
|
|
40
|
-
if quit_app:
|
|
41
|
-
application.quit()
|
|
42
|
-
else:
|
|
43
|
-
application.close()
|
|
44
|
-
except Exception as err:
|
|
45
|
-
if not ignore_fail:
|
|
46
|
-
raise err
|
|
47
|
-
self.empty_cache()
|
|
48
|
-
return self.current
|
|
1
|
+
from robot.utils import ConnectionCache
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ApplicationCache(ConnectionCache):
|
|
5
|
+
|
|
6
|
+
def __init__(self):
|
|
7
|
+
ConnectionCache.__init__(self, no_current_msg='No current application')
|
|
8
|
+
self._closed = set()
|
|
9
|
+
|
|
10
|
+
@property
|
|
11
|
+
def applications(self):
|
|
12
|
+
return self._connections
|
|
13
|
+
|
|
14
|
+
def get_open_browsers(self):
|
|
15
|
+
open_applications = []
|
|
16
|
+
for application in self._connections:
|
|
17
|
+
if application not in self._closed:
|
|
18
|
+
open_applications.append(application)
|
|
19
|
+
return open_applications
|
|
20
|
+
|
|
21
|
+
def close(self, ignore_fail=False, quit_app=True):
|
|
22
|
+
if self.current:
|
|
23
|
+
application = self.current
|
|
24
|
+
try:
|
|
25
|
+
if quit_app:
|
|
26
|
+
application.quit()
|
|
27
|
+
else:
|
|
28
|
+
application.close()
|
|
29
|
+
except Exception as err:
|
|
30
|
+
if not ignore_fail:
|
|
31
|
+
raise err
|
|
32
|
+
self.current = self._no_current
|
|
33
|
+
self.current_index = None
|
|
34
|
+
self._closed.add(application)
|
|
35
|
+
|
|
36
|
+
def close_all(self, ignore_fail=True, quit_app=True):
|
|
37
|
+
for application in self._connections:
|
|
38
|
+
if application not in self._closed:
|
|
39
|
+
try:
|
|
40
|
+
if quit_app:
|
|
41
|
+
application.quit()
|
|
42
|
+
else:
|
|
43
|
+
application.close()
|
|
44
|
+
except Exception as err:
|
|
45
|
+
if not ignore_fail:
|
|
46
|
+
raise err
|
|
47
|
+
self.empty_cache()
|
|
48
|
+
return self.current
|
AppiumLibrary/version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
VERSION = '
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
VERSION = '0.1.1'
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: robotframework-appiumwindows
|
|
3
|
+
Version: 0.1.3
|
|
4
|
+
Summary: Robot Framework AppiumLibrary extension for Windows desktop automation using NovaWindows2 Driver instead of WinAppDriver.
|
|
5
|
+
Author-email: Huy Nguyen <nguyenvanhuy0612@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/nguyenvanhuy0612/robotframework-appiumwindows
|
|
8
|
+
Project-URL: Repository, https://github.com/nguyenvanhuy0612/robotframework-appiumwindows
|
|
9
|
+
Project-URL: Issues, https://github.com/nguyenvanhuy0612/robotframework-appiumwindows/issues
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Framework :: Robot Framework
|
|
12
|
+
Classifier: Framework :: Robot Framework :: Library
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
20
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
21
|
+
Classifier: Intended Audience :: Developers
|
|
22
|
+
Classifier: Topic :: Software Development :: Testing
|
|
23
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
24
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
|
+
Requires-Python: >=3.10
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
License-File: LICENSE
|
|
28
|
+
Requires-Dist: robotframework>=7.0.0
|
|
29
|
+
Requires-Dist: Appium-Python-Client>=5.0.0
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
# Robot Framework AppiumLibrary for Windows
|
|
33
|
+
|
|
34
|
+
This library extends the standard [AppiumLibrary](https://github.com/serhatbolsu/robotframework-appiumlibrary) to support **Windows Desktop Automation** using the **Appium NovaWindows2 Driver**. It bridges the gap between Robot Framework and the modern Windows automation ecosystem, providing robust tools for interacting with Windows applications via PowerShell integration and native Windows APIs.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 🚀 Key Features
|
|
39
|
+
|
|
40
|
+
* **Native Windows Interaction**: Seamless simulation of mouse events including Right Click, Double Click, Hover, and Drag & Drop.
|
|
41
|
+
* **PowerShell Integration**: distinct capability to execute PowerShell commands and scripts directly on the target machine, allowing for advanced system manipulation and state checking.
|
|
42
|
+
* **Resilient Automation**: Includes fallback mechanisms for clicking and typing when standard driver commands are intercepted or fail.
|
|
43
|
+
* **Advanced File Transfer**: Bypass standard Appium limitations with specialized keywords to push/pull files and folders, including handling large files via chunked transfer.
|
|
44
|
+
* **Remote Desktop Ready**: Optimized for running in headless or remote desktop environments where standard interaction methods might struggle.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 🔧 Underlying Driver
|
|
49
|
+
|
|
50
|
+
This library is a Robot Framework wrapper specifically validated for the **[Appium NovaWindows2 Driver](https://github.com/nguyenvanhuy0612/appium-novawindows2-driver)**.
|
|
51
|
+
|
|
52
|
+
* **Repository**: [nguyenvanhuy0612/appium-novawindows2-driver](https://github.com/nguyenvanhuy0612/appium-novawindows2-driver)
|
|
53
|
+
* **Purpose**: Replaces the legacy WinAppDriver with a modern, PowerShell-backed engine.
|
|
54
|
+
* **Mechanism**: Translates Appium commands into optimized PowerShell scripts, executing them directly on the Windows target. This approach allows for:
|
|
55
|
+
* Bypassing UI Automation limitations.
|
|
56
|
+
* Direct system control (registry, processes, files).
|
|
57
|
+
* Zero-dependency setup on the target (no "Developer Mode" required).
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 🏗️ Architecture
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
+------------------------------+ +----------------------------------+
|
|
65
|
+
| Test Runner (Local PC) | | Target Machine (Windows) |
|
|
66
|
+
|------------------------------| |----------------------------------|
|
|
67
|
+
| | | |
|
|
68
|
+
| [ Robot Framework ] | | [ Appium Server 3.x+ ] |
|
|
69
|
+
| | | HTTP | ^ |
|
|
70
|
+
| [ AppiumLibrary ] | JSON | | |
|
|
71
|
+
| | | Wire | [ Appium NovaWindows2 Driver ] |
|
|
72
|
+
| [ robotframework- | ----------> | | |
|
|
73
|
+
| appiumwindows ] | | [ PowerShell Session ] |
|
|
74
|
+
| | | | |
|
|
75
|
+
| | | [ Application ] |
|
|
76
|
+
| | | |
|
|
77
|
+
+------------------------------+ +----------------------------------+
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 📋 Prerequisites
|
|
83
|
+
|
|
84
|
+
### 1. On Test Runner (Local Machine)
|
|
85
|
+
* **Python**: 3.10 or higher
|
|
86
|
+
* **Robot Framework**: Installed via pip
|
|
87
|
+
|
|
88
|
+
### 2. On Target Machine (Remote Windows PC)
|
|
89
|
+
* **Node.js**: [Download](https://nodejs.org/en/download)
|
|
90
|
+
* **Appium Server**: Global installation (`npm install -g appium`)
|
|
91
|
+
* **NovaWindows2 Driver**: `appium driver install --source=npm appium-novawindows2-driver`
|
|
92
|
+
* **PowerShell**: Accessible and allowed by the Appium server context.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 📦 Installation
|
|
97
|
+
|
|
98
|
+
To install the library on your test runner:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
pip install robotframework-appiumwindows
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## ⚙️ Configuration & Startup
|
|
107
|
+
|
|
108
|
+
On the **Target Machine**, start the Appium server with relaxed security to enable PowerShell execution:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
appium --relaxed-security
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
*Note: `--relaxed-security` is required for the library to execute PowerShell commands, which powers many of the advanced features.*
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 💻 Example Test
|
|
119
|
+
|
|
120
|
+
Here is a comprehensive example demonstrating connection, application launching, efficient file transfer, and advanced user interactions.
|
|
121
|
+
|
|
122
|
+
```robot
|
|
123
|
+
*** Settings ***
|
|
124
|
+
Library AppiumLibrary
|
|
125
|
+
|
|
126
|
+
Test Setup Open Windows App
|
|
127
|
+
Test Teardown Close All Applications
|
|
128
|
+
|
|
129
|
+
*** Variables ***
|
|
130
|
+
${REMOTE_URL} http://192.168.1.10:4723
|
|
131
|
+
${APP_PATH} C:\\Windows\\System32\\notepad.exe
|
|
132
|
+
|
|
133
|
+
*** Test Cases ***
|
|
134
|
+
Automate Notepad With Advanced Features
|
|
135
|
+
[Documentation] Demonstrates launching an app, typing, using right-click context menu, and verifying via PowerShell.
|
|
136
|
+
|
|
137
|
+
# 1. Launch Application using PowerShell (more reliable for some Win apps)
|
|
138
|
+
Appium Execute Powershell Command Start-Process "${APP_PATH}"
|
|
139
|
+
|
|
140
|
+
# 2. Attach to the "Root" session allows finding top-level windows
|
|
141
|
+
Open Application ${REMOTE_URL} platformName=Windows appium:automationName=NovaWindows2 appium:app=Root
|
|
142
|
+
|
|
143
|
+
# 3. Wait for Notepad window
|
|
144
|
+
Wait Until Page Contains Element name=Untitled - Notepad
|
|
145
|
+
|
|
146
|
+
# 4. Input Text (Standard)
|
|
147
|
+
Appium Input name=Text Editor Hello from Robot Framework!
|
|
148
|
+
|
|
149
|
+
# 5. Advanced Interaction: Right Click to open context menu
|
|
150
|
+
Appium Right Click name=Text Editor
|
|
151
|
+
|
|
152
|
+
# 6. Select "Select All" from context menu
|
|
153
|
+
Appium Click name=Select All
|
|
154
|
+
|
|
155
|
+
# 7. Use PowerShell to verify the process is running
|
|
156
|
+
${process}= Appium Execute Powershell Command Get-Process notepad | Select-Object -ExpandProperty Id
|
|
157
|
+
Log Notepad Process ID: ${process}
|
|
158
|
+
|
|
159
|
+
# 8. Drag and Drop Example (Conceptual)
|
|
160
|
+
# Appium Drag And Drop name=SourceItem name=TargetFolder
|
|
161
|
+
|
|
162
|
+
*** Keywords ***
|
|
163
|
+
Open Windows App
|
|
164
|
+
[Arguments] ${app_id}=Root
|
|
165
|
+
&{capabilities}= Create Dictionary
|
|
166
|
+
... platformName=Windows
|
|
167
|
+
... appium:automationName=NovaWindows2
|
|
168
|
+
... appium:app=${app_id}
|
|
169
|
+
... appium:newCommandTimeout=20
|
|
170
|
+
Open Application ${REMOTE_URL} &{capabilities}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 📚 Keyword Reference
|
|
176
|
+
|
|
177
|
+
### Windows Specific Keywords
|
|
178
|
+
*Extends standard interactions with Windows-specific mouse events.*
|
|
179
|
+
|
|
180
|
+
| Keyword | Arguments | Description |
|
|
181
|
+
| :--- | :--- | :--- |
|
|
182
|
+
| `Appium Right Click` | `locator`, `timeout=20`, `**kwargs` | Performs a mouse right-click on the element found by `locator`. |
|
|
183
|
+
| `Appium Double Click` | `locator`, `timeout=20`, `**kwargs` | Performs a mouse double-click on the element found by `locator`. |
|
|
184
|
+
| `Appium Hover` | `locator`, `start_locator=None`, `timeout=20` | Hovers the mouse cursor over the specified element. |
|
|
185
|
+
| `Appium Drag And Drop` | `start_locator`, `end_locator`, `timeout=20` | Drags an element from `start_locator` and drops it at `end_locator`. |
|
|
186
|
+
| `Appium Click Offset` | `locator`, `x_offset`, `y_offset` | Clicks at a specific coordinate offset relative to an element. |
|
|
187
|
+
| `Appium Sendkeys` | `text` | Sends keystrokes to the active window using native Windows APIs. |
|
|
188
|
+
|
|
189
|
+
### PowerShell & System Keywords
|
|
190
|
+
*Directly interact with the underlying OS for setup, teardown, and validation.*
|
|
191
|
+
|
|
192
|
+
| Keyword | Arguments | Description |
|
|
193
|
+
| :--- | :--- | :--- |
|
|
194
|
+
| `Appium Execute Powershell Command` | `command` | Executes a single-line PowerShell command and returns the output. |
|
|
195
|
+
| `Appium Execute Powershell Script` | `ps_script` OR `file_path` | Executes a full PowerShell script block or a `.ps1` file. |
|
|
196
|
+
| `Appium Ps Click` | `locator`, `x`, `y`, `button='left'` | Simulates a mouse click using PowerShell (useful as a fallback). |
|
|
197
|
+
| `Appium Ps Drag And Drop` | `start_locator`, `end_locator`, `...` | Simulates drag and drop using PowerShell mouse events. |
|
|
198
|
+
| `Appium Ps Sendkeys` | `text` | Sends keys using PowerShell `System.Windows.Forms.SendKeys`. |
|
|
199
|
+
|
|
200
|
+
### Advanced File Transfer
|
|
201
|
+
*Optimized for reliability and handling large files over the wire.*
|
|
202
|
+
|
|
203
|
+
| Keyword | Arguments | Description |
|
|
204
|
+
| :--- | :--- | :--- |
|
|
205
|
+
| `Appium Pull File` | `path`, `save_path=None` | Downloads a file from the target machine. |
|
|
206
|
+
| `Appium Pull Folder` | `path`, `save_path_as_zip=''` | Zips and downloads a folder from the target machine. |
|
|
207
|
+
| `Appium Push File` | `destination_path`, `source_path` | Uploads a file to the target machine. |
|
|
208
|
+
| `Appium Split And Push File` | `source_path`, `remote_path`, `chunk_size_mb` | Splits a large file, uploads chunks, and recombines on target. |
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## 🤝 Contributing
|
|
213
|
+
|
|
214
|
+
Contributions are welcome! Please feel free to open issues or submit pull requests to improve compatibility or add new features.
|
|
215
|
+
|
|
216
|
+
**Repository**: [nguyenvanhuy0612/robotframework-appiumwindows](https://github.com/nguyenvanhuy0612/robotframework-appiumwindows)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
AppiumLibrary/__init__.py,sha256=2lme6iRjrBnYP73kbyZpI9eYPnD1mgB6-gwNVnG2TrU,5794
|
|
2
|
+
AppiumLibrary/appium_path.py,sha256=fAsq8pY-Rknqxph0SS4qYQvZSvzKif5PV9XE9uz5Myw,268
|
|
3
|
+
AppiumLibrary/version.py,sha256=tiPfWbcvAi_f_6m9SWjLspGk6wtLrLIYPpARm5C07o4,41
|
|
4
|
+
AppiumLibrary/keywords/__init__.py,sha256=j9ug8IsxoltsFwiYMvuk1lGWPzJdmrrG9btcmjgFYIE,746
|
|
5
|
+
AppiumLibrary/keywords/_applicationmanagement.py,sha256=J0rDv8neQwX4tnmR7QdbfPPF9BxVyyq-hyK5gGzsuwk,22682
|
|
6
|
+
AppiumLibrary/keywords/_element.py,sha256=AYZT9l8dditffpjbuYjN1edWSiwgmGnJICp8KZqAlHI,54872
|
|
7
|
+
AppiumLibrary/keywords/_logging.py,sha256=07VoC1CYkCBWeEBeay-kpBHhES-uIb5g6_B7kXf1IHI,1864
|
|
8
|
+
AppiumLibrary/keywords/_powershell.py,sha256=dFz_LVbewZ3F3RzDwk4Py8BMSm05XnpojczcYJ2eiaQ,24151
|
|
9
|
+
AppiumLibrary/keywords/_runonfailure.py,sha256=dsy0qAyvoRFbnLy1lZgwadnFrKoFRh8hwTmRHocoz40,2847
|
|
10
|
+
AppiumLibrary/keywords/_screenrecord.py,sha256=ND1BQXt14uXbnknCNU2l4Wzna5abIUGU1l8FHM6dqZs,6789
|
|
11
|
+
AppiumLibrary/keywords/_screenshot.py,sha256=K5JJciCLOYbuSGzY5OErxL1Kc9tJX16GhqztdAzw32o,3747
|
|
12
|
+
AppiumLibrary/keywords/_waiting.py,sha256=GvX2Yn88zX_1rrl-MEADgx62wXUm08m8E04fcDlSLls,6265
|
|
13
|
+
AppiumLibrary/keywords/_windows.py,sha256=LNp6W-SuRsHXD3EUOXuB3GOz2zsogu-grhsBFCtUi4U,11502
|
|
14
|
+
AppiumLibrary/keywords/keywordgroup.py,sha256=nd7zhoqodlG4E7-smySMGbK6e1cV9AjI0FAxr4YncMc,2467
|
|
15
|
+
AppiumLibrary/locators/__init__.py,sha256=XtTYoS3PKdGSjZIR7fvaaK-ExaOh8ZWW2dddNBL419c,102
|
|
16
|
+
AppiumLibrary/locators/elementfinder.py,sha256=acwAJ2OJsN59yJ5201UH5GdRgWJIzEj5Cc-xCgHTJW8,10977
|
|
17
|
+
AppiumLibrary/utils/__init__.py,sha256=kFiEGeyc2IJVA1nUx2DezPkkO7HWTDnoL__gW4nRRlw,1572
|
|
18
|
+
AppiumLibrary/utils/applicationcache.py,sha256=YrRQgz-4d77hToib4ApBjFT5VohO65DMNiNVUr_PI_0,1523
|
|
19
|
+
robotframework_appiumwindows-0.1.3.dist-info/licenses/LICENSE,sha256=0usw_6IO4DLz-QIR_RLmRq9n4JX_Yns3Ew6dO-2FQmc,1070
|
|
20
|
+
robotframework_appiumwindows-0.1.3.dist-info/METADATA,sha256=Rm5Syhj0T3VRu8ghOOrnNu8HRpambc-84XONN46OCcQ,10256
|
|
21
|
+
robotframework_appiumwindows-0.1.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
22
|
+
robotframework_appiumwindows-0.1.3.dist-info/top_level.txt,sha256=2o2iQDagXnzsewODgcttx95vTzvaYaZB7q6KJB8sf-I,14
|
|
23
|
+
robotframework_appiumwindows-0.1.3.dist-info/RECORD,,
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 Nguyen Van Huy
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Nguyen Van Huy
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
SOFTWARE.
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: robotframework-appiumwindows
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: Robot Framework AppiumLibrary extension for Windows desktop automation using NovaWindows Driver instead of WinAppDriver.
|
|
5
|
-
Author-email: Huy Nguyen <nguyenvanhuy0612@gmail.com>
|
|
6
|
-
License: MIT
|
|
7
|
-
Project-URL: Homepage, https://github.com/nguyenvanhuy0612/robotframework-appiumwindows
|
|
8
|
-
Project-URL: Repository, https://github.com/nguyenvanhuy0612/robotframework-appiumwindows
|
|
9
|
-
Project-URL: Issues, https://github.com/nguyenvanhuy0612/robotframework-appiumwindows/issues
|
|
10
|
-
Classifier: Development Status :: 3 - Alpha
|
|
11
|
-
Classifier: Framework :: Robot Framework
|
|
12
|
-
Classifier: Framework :: Robot Framework :: Library
|
|
13
|
-
Classifier: Programming Language :: Python :: 3
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
-
Classifier: Operating System :: Microsoft :: Windows
|
|
18
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
19
|
-
Classifier: Intended Audience :: Developers
|
|
20
|
-
Classifier: Topic :: Software Development :: Testing
|
|
21
|
-
Classifier: Topic :: Software Development :: Quality Assurance
|
|
22
|
-
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
23
|
-
Requires-Python: >=3.10
|
|
24
|
-
Description-Content-Type: text/markdown
|
|
25
|
-
License-File: LICENSE
|
|
26
|
-
Requires-Dist: robotframework>=7.3.2
|
|
27
|
-
Requires-Dist: Appium-Python-Client>=5.1.1
|
|
28
|
-
Dynamic: license-file
|
|
29
|
-
|
|
30
|
-
# Robot Framework AppiumLibrary Compatible with NovaWindows Driver
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## Overview
|
|
35
|
-
This library extends [AppiumLibrary](https://github.com/serhatbolsu/robotframework-appiumlibrary) to provide compatibility with the **NovaWindows Driver** for Appium 2.x.
|
|
36
|
-
|
|
37
|
-
It allows you to automate Windows desktop applications using **Robot Framework** with minimal setup.
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
> **Note**
|
|
42
|
-
>
|
|
43
|
-
> - NovaWindows Driver currently uses a **PowerShell session** as its back-end.
|
|
44
|
-
> - No Developer Mode required
|
|
45
|
-
> - No extra dependencies required
|
|
46
|
-
> - A future update is planned to move to a **.NET-based backend** for:
|
|
47
|
-
> - Improved reliability
|
|
48
|
-
> - Better error handling
|
|
49
|
-
> - More feature support beyond PowerShell limitations
|
|
50
|
-
>
|
|
51
|
-
> Reference: [AutomateThePlanet/appium-novawindows-driver](https://github.com/AutomateThePlanet/appium-novawindows-driver)
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## Installation
|
|
56
|
-
|
|
57
|
-
### 1. On the **Test Runner (local machine)**
|
|
58
|
-
|
|
59
|
-
Install the Robot Framework library:
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
pip install robotframework-appiumwindows
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
> This is the only requirement on the machine where you run Robot Framework tests.
|
|
66
|
-
> No need to install Node.js or Appium here.
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
### 2. On the **Target Machine (remote machine under test)**
|
|
71
|
-
|
|
72
|
-
This is where the Appium server and NovaWindows driver must be installed.
|
|
73
|
-
|
|
74
|
-
1. Install **Node.js**
|
|
75
|
-
[Download Node.js](https://nodejs.org/en/download)
|
|
76
|
-
|
|
77
|
-
2. Install **Appium** globally:
|
|
78
|
-
```bash
|
|
79
|
-
npm install -g appium
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
3. Install **NovaWindows Driver**:
|
|
83
|
-
```bash
|
|
84
|
-
appium driver install --source=npm appium-novawindows-driver
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
4. Start the Appium server:
|
|
88
|
-
```bash
|
|
89
|
-
appium --relaxed-security
|
|
90
|
-
```
|
|
91
|
-
(use `--relaxed-security` if you plan to execute PowerShell commands)
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
## Example Test
|
|
96
|
-
|
|
97
|
-
```robot
|
|
98
|
-
*** Settings ***
|
|
99
|
-
Library AppiumLibrary
|
|
100
|
-
|
|
101
|
-
Test Setup Open Root Session
|
|
102
|
-
Test Teardown Appium Close All Applications
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
*** Test Cases ***
|
|
106
|
-
Type To Notepad
|
|
107
|
-
[Documentation] Launch Notepad, type text, and close without saving
|
|
108
|
-
Appium Execute Powershell Command Start-Process "notepad"
|
|
109
|
-
Appium Input class=Notepad This is example{enter 3}Close without save
|
|
110
|
-
Appium Click //Window[@ClassName='Notepad']//Button[@Name='Close']
|
|
111
|
-
Appium Click name=Don't Save
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
*** Keywords ***
|
|
115
|
-
Open Root Session
|
|
116
|
-
${parameters}= Create Dictionary
|
|
117
|
-
... remote_url=http://<TARGET_MACHINE_IP>:4723
|
|
118
|
-
... platformName=Windows
|
|
119
|
-
... appium:app=Root
|
|
120
|
-
... appium:automationName=NovaWindows
|
|
121
|
-
... appium:newCommandTimeout=30
|
|
122
|
-
Open Application &{parameters}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## Architecture
|
|
128
|
-
|
|
129
|
-
```text
|
|
130
|
-
+--------------------------+ +----------------------------+
|
|
131
|
-
| Test Runner (Local PC) | | Target Machine (Windows) |
|
|
132
|
-
|--------------------------| |----------------------------|
|
|
133
|
-
| - Robot Framework | | - Node.js |
|
|
134
|
-
| - robotframework- | ---> | - Appium 2.x |
|
|
135
|
-
| appium-windows (pip) | | - NovaWindows Driver |
|
|
136
|
-
+--------------------------+ +----------------------------+
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## References
|
|
142
|
-
|
|
143
|
-
- [Appium](https://appium.io/)
|
|
144
|
-
- [Robot Framework](https://robotframework.org/)
|
|
145
|
-
- [AppiumLibrary](https://github.com/serhatbolsu/robotframework-appiumlibrary)
|
|
146
|
-
- [NovaWindows Driver](https://github.com/AutomateThePlanet/appium-novawindows-driver)
|
|
147
|
-
|
|
148
|
-
---
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
AppiumLibrary/__init__.py,sha256=_8Mcsywy1P1ebzUl0Cn49RCLSHzG4zRrFQTNAL1r_2o,5901
|
|
2
|
-
AppiumLibrary/appium_path.py,sha256=0LZFLn07dsxOY0FIJ4REEfyRbNBxtgNzX-rEfovEh_4,260
|
|
3
|
-
AppiumLibrary/version.py,sha256=hrqXUu4slpU-usm7Rv3LJhMR6paooe0eSmHZXr8iYHY,47
|
|
4
|
-
AppiumLibrary/keywords/__init__.py,sha256=vRZLNwHfUSaBPBY3dmDUejCihFL0N2ODYkrubhBwcjA,767
|
|
5
|
-
AppiumLibrary/keywords/_applicationmanagement.py,sha256=qJYKpNjHEcNvXlWVfKIh-xCUkWJGyDTWigl2-nAJSMk,19786
|
|
6
|
-
AppiumLibrary/keywords/_element.py,sha256=MsY69h0ZiRc8Tl6K4KU56k8fgWHv4WeHwIGm_h68TTE,53655
|
|
7
|
-
AppiumLibrary/keywords/_logging.py,sha256=r9P56w85BFQIZw3pMQtFliu7uD4sqoCITDXDhB_LURM,1927
|
|
8
|
-
AppiumLibrary/keywords/_powershell.py,sha256=j_-LrLIOkx6sdKj-P-bUerfcdpHIC_fIG4VZT4G2Ovo,23611
|
|
9
|
-
AppiumLibrary/keywords/_runonfailure.py,sha256=t6kJrVJdCo9cHbuUUs1Qoy63Z7AKTrDBepOIxvsSNDQ,2921
|
|
10
|
-
AppiumLibrary/keywords/_screenrecord.py,sha256=e8EXHTwiujeQVMrDhmYq6QIQk3MwSuuFpu8SWHZ0r7Q,6927
|
|
11
|
-
AppiumLibrary/keywords/_screenshot.py,sha256=L_o1ncYsJ_ghJEVrNVlilXCxvkR9KyR7D-twZIAmEAQ,3998
|
|
12
|
-
AppiumLibrary/keywords/_waiting.py,sha256=vDp7duuVuRsmtpf4DYgyvP363KpG9Ldffr2TD3GqTcI,6446
|
|
13
|
-
AppiumLibrary/keywords/_windows.py,sha256=W7M5ba1IZ7YdAn3CPP58fq-CrBC_Ck-GaKXVh7dJjFE,9666
|
|
14
|
-
AppiumLibrary/keywords/keywordgroup.py,sha256=SvgJNazRMZoyH4pBmGY_05l1FjVDaoVfwX6I3YN_fU0,2449
|
|
15
|
-
AppiumLibrary/locators/__init__.py,sha256=-t6gBYeVN8LS1q_agwCNikDaH54v_JXPfRtE5slY9dg,109
|
|
16
|
-
AppiumLibrary/locators/elementfinder.py,sha256=EdKVUJIHZCxrQkAu-0xp3yhCwA5qd5y55SnP58-dBP0,11241
|
|
17
|
-
AppiumLibrary/utils/__init__.py,sha256=FlB2DCknRHFvtj4ZZbq3B0sSmZ9RTnvqucHNC9pReN4,1622
|
|
18
|
-
AppiumLibrary/utils/applicationcache.py,sha256=AeeZIzRLxqcOLw9lIAir2_CypGAEwglCzzvMep4IQrg,1571
|
|
19
|
-
robotframework_appiumwindows-0.1.0.dist-info/licenses/LICENSE,sha256=yVLQqHcOliLXZJC6M0K2u0WJL9yIW1u7d5bsM_qW1Es,1090
|
|
20
|
-
robotframework_appiumwindows-0.1.0.dist-info/METADATA,sha256=HXX0laXT4t3XFysxHQL8Pr9G_bD6cs930X2-5Aux_iE,4902
|
|
21
|
-
robotframework_appiumwindows-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
22
|
-
robotframework_appiumwindows-0.1.0.dist-info/top_level.txt,sha256=2o2iQDagXnzsewODgcttx95vTzvaYaZB7q6KJB8sf-I,14
|
|
23
|
-
robotframework_appiumwindows-0.1.0.dist-info/RECORD,,
|
|
File without changes
|