Skip to main content

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:

  • headless bool, optional - if False rdp window is shown. (default is True)
  • width int, optional - witdth of rdp window. Set it same in guacamole (default is 800)
  • height int, optional - witdth of rdp window. Set it same in guacamole (default is 600)
  • clear_logs bool, optional - if True old image logs will be removed when RDP class inited. (default is True)
  • assert_dict dict, optional - dict with assertion images. Pass it for unsupported OS (default is ASSERT_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)

Source distribution for rdp-manipulations 0.3.4
File Size Uploaded
rdp_manipulations-0.3.4.tar.gz 97.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rdp-manipulations 0.3.4
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.3.4 This release

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

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