Image based tool for RDP (Remote Desktop Protocol) manipulations, automations and testing via Python and Apache Guacamole
Project description
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 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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for rdp_manipulations-0.3.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1f36f70893a56b8b7b9db21117ff0a5c10ceed93b0500f2f619f181b692a71fa |
|
MD5 | 0c23039c9a8a5f8b04c000e9353fc702 |
|
BLAKE2b-256 | 51d9e0bd5df0547b312fe2f35a9959cdf4a04ae1bd6b9171385714652f1cc503 |