Path: blob/main/tools/neteditTestFunctions/input/mouse.py
169679 views
# -*- coding: utf-8 -*-1# Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2# Copyright (C) 2009-2025 German Aerospace Center (DLR) and others.3# This program and the accompanying materials are made available under the4# terms of the Eclipse Public License 2.0 which is available at5# https://www.eclipse.org/legal/epl-2.0/6# This Source Code may also be made available under the following Secondary7# Licenses when the conditions for such availability set forth in the Eclipse8# Public License 2.0 are satisfied: GNU General Public License, version 29# or later which is available at10# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later1213# @file mouse.py14# @author Pablo Alvarez Lopez15# @date 28-05-251617# imports18import time19import pyautogui20from ..constants import DELAY_MOUSE_MOVE, DELAY_MOUSE_CLICK, DELAY_DRAGDROP, DELAY_KEY21from ..input.keyboard import keyPress, keyRelease, typeKey222324def leftClick(referencePosition, position):25"""26@brief do left click over a position relative to referencePosition (pink square)27"""28# obtain clicked position29clickedPosition = [referencePosition[0] + position.x, referencePosition[1] + position.y]30# move mouse to position31pyautogui.moveTo(clickedPosition)32# wait after move33time.sleep(DELAY_MOUSE_MOVE)34# click over position35pyautogui.click(button='left')36# wait after every operation37time.sleep(DELAY_MOUSE_CLICK)38# show debug39print("TestFunctions: Clicked over position", clickedPosition[0], '-', clickedPosition[1])404142def leftClickData(referencePosition, position):43"""44@brief do left click over a position relative to referencePosition (pink square) with an small offest y45"""46# obtain clicked position47clickedPosition = [referencePosition[0] + position.x, referencePosition[1] + position.y + 30]48# move mouse to position49pyautogui.moveTo(clickedPosition)50# wait after move51time.sleep(DELAY_MOUSE_MOVE)52# click over position53pyautogui.click(button='left')54# wait after every operation55time.sleep(DELAY_MOUSE_CLICK)56# show debug (rest 30 to y position to unify output with internal tests)57print("TestFunctions: Clicked over position", clickedPosition[0], '-', clickedPosition[1] - 30)585960def leftClickOffset(referencePosition, position, offsetX, offsetY):61"""62@brief do left click over a position relative to referencePosition (pink square)63"""64# obtain clicked position65clickedPosition = [referencePosition[0] + position.x + offsetX, referencePosition[1] + position.y + offsetY]66# move mouse to position67pyautogui.moveTo(clickedPosition)68# wait after move69time.sleep(DELAY_MOUSE_MOVE)70# click over position71pyautogui.click(button='left')72# wait after every operation73time.sleep(DELAY_MOUSE_CLICK)74# show debug75print("TestFunctions: Clicked over position", clickedPosition[0], '-', clickedPosition[1])767778def leftClickShift(referencePosition, position):79"""80@brief do left click over a position relative to referencePosition (pink square) while shift key is pressed81"""82# Leave Shift key pressed83keyPress('shift')84# obtain clicked position85clickedPosition = [referencePosition[0] + position.x, referencePosition[1] + position.y]86# move mouse to position87pyautogui.moveTo(clickedPosition)88# wait after move89time.sleep(DELAY_MOUSE_MOVE)90# click over position91pyautogui.click(button='left')92# wait after every operation93time.sleep(DELAY_MOUSE_CLICK)94# show debug95print("TestFunctions: Clicked with Shift key pressed over position", clickedPosition[0], '-', clickedPosition[1])96# Release Shift key97keyRelease('shift')9899100def leftClickControl(referencePosition, position):101"""102@brief do left click over a position relative to referencePosition (pink square) while control key is pressed103"""104# Leave Control key pressed105keyPress('ctrl')106# obtain clicked position107clickedPosition = [referencePosition[0] + position.x, referencePosition[1] + position.y]108# move mouse to position109pyautogui.moveTo(clickedPosition)110# wait after move111time.sleep(DELAY_MOUSE_MOVE)112# click over position113pyautogui.click(button='left')114# wait after every operation115time.sleep(DELAY_MOUSE_CLICK)116# show debug117print("TestFunctions: Clicked with Control key pressed over position", clickedPosition[0], '-', clickedPosition[1])118# Release Control key119keyRelease('ctrl')120121122def leftClickAltShift(referencePosition, position):123"""124@brief do left click over a position relative to referencePosition (pink square) while alt key is pressed125"""126# Leave alt key pressed127keyPress('alt')128# Leave shift key pressed129keyPress('shift')130# obtain clicked position131clickedPosition = [referencePosition[0] + position.x, referencePosition[1] + position.y]132# move mouse to position133pyautogui.moveTo(clickedPosition)134# wait after move135time.sleep(DELAY_MOUSE_MOVE)136# click over position137pyautogui.click(button='left')138# wait after every operation139time.sleep(DELAY_MOUSE_CLICK)140# show debug141print("TestFunctions: Clicked with alt and shift key pressed over position",142clickedPosition[0], '-', clickedPosition[1])143# Release alt key144keyRelease('alt')145# Release shift key146keyRelease('shift')147148149def rightClick(referencePosition, position, offsetX=0, offsetY=0):150"""151@brief do right click over a position relative to referencePosition (pink square)152"""153# obtain clicked position154clickedPosition = [referencePosition[0] + position.x + offsetX, referencePosition[1] + position.y + offsetY]155# move mouse to position156pyautogui.moveTo(clickedPosition)157# wait after move158time.sleep(DELAY_MOUSE_MOVE)159# click over position160pyautogui.click(button='right')161# wait after every operation162time.sleep(DELAY_MOUSE_CLICK)163# show debug164print("TestFunctions: Clicked over position", clickedPosition[0], '-', clickedPosition[1])165166167def leftClickMultiElement(referencePosition, position, underElement, offsetX=0, offsetY=0):168"""169@brief do left click over a position relative to referencePosition (pink square) and selecting under element170"""171# obtain clicked position172clickedPosition = [referencePosition[0] + position.x + offsetX, referencePosition[1] + position.y + offsetY]173# move mouse to position174pyautogui.moveTo(clickedPosition)175# wait after move176time.sleep(DELAY_MOUSE_MOVE)177# click over position178pyautogui.click(button='left')179# wait after every operation180time.sleep(DELAY_MOUSE_CLICK)181# go to element182for _ in range(underElement + 1):183typeKey('down')184typeKey('space')185print("TestFunctions: Clicked over position",186clickedPosition[0], '-', clickedPosition[1], "under element", underElement)187188189def moveMouse(referencePosition, position, offsetX=0, offsetY=0, report=True):190"""191@brief move mouse to the given position192"""193# obtain clicked position194movePosition = [referencePosition[0] + position.x + offsetX, referencePosition[1] + position.y + offsetY]195# move mouse to position196pyautogui.moveTo(movePosition)197# wait after move198time.sleep(DELAY_MOUSE_MOVE)199# show debug200if (report):201print("TestFunctions: Moved to position", movePosition[0], '-', movePosition[1])202203204def dragDrop(referencePosition, x1, y1, x2, y2):205"""206@brief drag and drop from position 1 to position 2207"""208# wait before every operation209time.sleep(DELAY_KEY)210# obtain from and to position211fromPosition = [referencePosition[0] + x1, referencePosition[1] + y1]212tromPosition = [referencePosition[0] + x2, referencePosition[1] + y2]213# move to from position214pyautogui.moveTo(fromPosition)215# wait before every operation216time.sleep(DELAY_KEY)217# drag mouse to X of 100, Y of 200 while holding down left mouse button218pyautogui.dragTo(tromPosition[0], tromPosition[1], DELAY_DRAGDROP, button='left')219# wait before every operation220time.sleep(DELAY_KEY)221222223