rdp-manipulations
Tool for image-based control RDP (Remote Desktop Protocol). Manipulations, automations and testing via Python and Apache Guacamole
Demo
https://user-images.githubusercontent.com/710389/202258413-5c867a64-06d7-4cb5-8034-08523b114db4.mp4
Prerequisites
Installed and configured Apache Guacamole. I used this guacamole docker project: https://github.com/boschkundendienst/guacamole-docker-compose
Examples
see ./examples folder. To run it, clone this repo, and:
poetry shell
poetry install
python examples/copy_and_zip.py
Supported OS
Only Windows 7 is currently supported because I only needed to work with Windows 7 PCs. If you need support for other OSes, use your ASSERT_DICT, make a pull request, or write an issue. We'll figure something out.
Table of Contents
main
ASSERT_DICT
Pass it to instance of RDP for unsupported OS (see below)
{
'prelogin': './image_asserts/prelogin.png',
'login': './image_asserts/login.png',
'post_login': './image_asserts/post_login.png',
'start_btn': './image_asserts/start_btn.png',
'start_btn_selected': './image_asserts/start_btn_selected.png',
'run_window': './image_asserts/run_window.png',
'lang_ru': './image_asserts/lang_ru.png',
'lang_en': './image_asserts/lang_en.png',
'opened_folder': './image_asserts/opened_folder.png',
'files_copy': './image_asserts/files_copy.png',
}
RDP Objects
class RDP()
RDP class
__init__
def __init__(headless=headless,
width=width,
height=height,
clear_logs=clear_logs,
assert_dict=ASSERT_DICT) -> None
Arguments:
headlessbool, optional - if False rdp window is shown. (default is True)widthint, optional - witdth of rdp window. Set it same in guacamole (default is 800)heightint, optional - witdth of rdp window. Set it same in guacamole (default is 600)clear_logsbool, optional - if True old image logs will be removed when RDP class inited. (default is True)assert_dictdict, optional - dict with assertion images. Pass it for unsupported OS (default isASSERT_DICT)
login
def login(guacamole_user: str,
guacamole_password: str,
guacamole_pc_name: str,
guacamole_url=guacamole_url) -> None
Login method. Call this first
key_press
def key_press(keys: str)
This is wrapper of playwright keyboard.press method. see: https://playwright.dev/python/docs/api/class-keyboard#keyboard-press
key_type
def key_type(text: str)
Type text on remote pc
make_screenshot
def make_screenshot(filename: Optional[str] = None,
path: Optional[str] = None) -> str
Make screenshot, and save it to default direcotry (./image_logs), or to given path
is_on_screen
def is_on_screen(assertion: str, threshold: float = image_threshold) -> bool
Checking assertion image is on screen (assertion is a path to image)
wait_until_appear
def wait_until_appear(assertion: str,
attempts: int = screen_state_attempts,
threshold: float = image_threshold) -> None
Waiting until assertion image is appear on screen (assertion is a path to image)
wait_until_desappear
def wait_until_desappear(assertion: str,
attempts: int = screen_state_attempts,
threshold: float = image_threshold) -> None
Waiting until assertion image is desappear on screen (assertion is a path to image)
exec_remote
def exec_remote(cmd_str: str) -> None
Execute remote command via win+r run window
copydir
def copydir(from_path: str, to_path: str) -> None
Copy folder on remote PC
copy
def copy(from_path: str, to_path: str) -> None
Copy file on remote PC
mkdir
def mkdir(dir_path: str) -> None
Making directory
opendir
def opendir(dir_path: str, local: bool = False) -> None
Open explorer.exe of given directory path
closedir
def closedir(dir_name: str) -> None
Close explorer.exe of given directory name
mouse_click
def mouse_click(x: float, y: float, click_count: int = 1) -> None
Mouse left click on remote PC by giving coordinates
mouse_move
def mouse_move(x: float, y: float) -> None
Mouse move on remote PC by giving coordinates
mouse_move_to
def mouse_move_to(assertion: str) -> Optional[tuple[float, float]]
Mouse move on remote PC by giving image assertion path
mouse_click_to
def mouse_click_to(
assertion: str,
button: Literal['left', 'middle', 'right'] = 'left') -> Optional[tuple[float, float]]
Mouse click on remote PC by giving image assertion path
current_lang
def current_lang() -> Optional[str]
Get a current keuboard language (now support only 'en' and 'ru')
lang_switch
def lang_switch(lang: Optional[str] = None) -> Optional[str]
Switch keuboard language (now support only 'en' and 'ru')
logout
def logout() -> None
Logout method
Metadata
Release files for rdp-manipulations 0.3.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rdp_manipulations-0.3.4.tar.gz | 97.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rdp_manipulations-0.3.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 195.5 kB
Release files / rdp_manipulations-0.3.4.tar.gz
| Download URL | rdp_manipulations-0.3.4.tar.gz |
|---|---|
| Size | 97.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d4a03223292ceb4330c569eebc1a62867fb719fc18e8ef566fa16fa6c2696081
|
|
BLAKE2b-256 checksum How to use checksums |
c92950a400d60d317ec3e1ba5eea834b040e6408f78b08859254f9842d65b97d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.2.2 CPython/3.10.8 Darwin/21.2.0
|
Release files / rdp_manipulations-0.3.4-py3-none-any.whl
| Download URL | rdp_manipulations-0.3.4-py3-none-any.whl |
|---|---|
| Size | 97.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1f36f70893a56b8b7b9db21117ff0a5c10ceed93b0500f2f619f181b692a71fa
|
|
BLAKE2b-256 checksum How to use checksums |
51d9e0bd5df0547b312fe2f35a9959cdf4a04ae1bd6b9171385714652f1cc503
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.2.2 CPython/3.10.8 Darwin/21.2.0
|