Skip to content

Tool for image-based control RDP (Remote Desktop Protocol). Manipulations, automations and testing via Python and Apache Guacamole

License

Notifications You must be signed in to change notification settings

etomarat/rdp-manipulations

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rdp-manipulations

Tool for image-based control RDP (Remote Desktop Protocol). Manipulations, automations and testing via Python and Apache Guacamole

Demo

demo2.mp4

Prerequisites

Installed and configured Apache Guacamole. I used this guacamole docker project: https://github.com/boschkundendienst/guacamole-docker-compose

Install

pip install rdp-manipulations

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

About

Tool for image-based control RDP (Remote Desktop Protocol). Manipulations, automations and testing via Python and Apache Guacamole

Topics

Resources

License

Stars

Watchers

Forks