@ -29,7 +29,7 @@ import copy
#TODO В перспективе нужно реализовать алгоритм определения разрядности не в Robot.py, а в UIDesktop.py, тк начинают появляться функции, на входе в которые еще неизвестна разрядность элемента + селектор может охватить сразу два элемента из 2-х разных разрядностей - обрабатываться это должно непосредственно при выполнении
####################################
#Info: GUI module of the Robot app ( OpenRPA - Robot)
#Info: GUI module of the Robot app ( py OpenRPA - Robot)
####################################
# GUI Module - interaction with Desktop application
@ -99,19 +99,27 @@ mDefaultPywinautoBackend="win32"
# "rich_text" - наименование rich_text
# }
#]
################
#return: List of UI Object
#inElement - Входной элемент - показатель, что не требуется выполнять коннект к процессу
#inFlagRaiseException - Флаг True - выкинуть ошибку в случае обнаружении пустого списка
#old name - PywinautoExtElementsGet
#old:PywinautoExtElementsGet
def UIOSelector_Get_UIOList ( inSpecificationList , inElement = None , inFlagRaiseException = True ) :
'''
Get the UIO list by the selector
Получить список UIO объектов по UIO селектору
: param inSpecificationList : UIO Selector
: param inElement : Входной элемент - показатель , что не требуется выполнять коннект к процессу
: param inFlagRaiseException : Флаг True - выкинуть ошибку в случае обнаружении пустого списка
: return :
. . code - block : : python
# UIDesktop: Взаимодействие с UI объектами приложений
from pyOpenRPA . Robot import UIDesktop
# 1С : UIO Селектор выбора базы
lDemoBaseUIOSelector = [ { " title " : " Запуск 1С :Предприятия " , " class_name " : " V8TopLevelFrameTaxiStarter " , " backend " : " uia " } , { " title " : " DEMO " , " depth_start " : 5 , " depth_end " : 5 } ]
lDemoBaseUIOList = UIDesktop . UIOSelector_Get_UIOList ( lDemoBaseUIOSelector ) #Получить список UIO объектов, которые удовлетворяют требованиям UIO селектора. В нашем примере либо [], либо [UIO объект]
: param inSpecificationList : UIO Селектор , который определяет критерии поиска UI элементов
: type inSpecificationList : list , обязательный
: param inElement : Родительский элемент , от которого выполнить поиск UIO объектов по заданному UIO селектору . Если аргумент не задан , платформа выполнит поиск UIO объектов среди всех доступных приложений windows , которые запущены на текущей сессии
: type inElement : UIO объект , опциональный
: param inFlagRaiseException : True - формировать ошибку exception , если платформа не обнаружина ни одного UIO объекта по заданному UIO селектору . False - обратный случай . По умолчанию True
: type inFlagRaiseException : bool , опциональный
: return : Список UIO объектов , которые удовлетворяют условиям UIO селектора
'''
#Создать копию входного листа, чтобы не менять массив в других верхнеуровневых функциях
inSpecificationList = copy . deepcopy ( inSpecificationList )
@ -235,20 +243,26 @@ def UIOSelector_Get_UIOList (inSpecificationList,inElement=None,inFlagRaiseExcep
raise pywinauto . findwindows . ElementNotFoundError ( " Robot can ' t find element by the UIOSelector " )
return lResultList
#################################################################################################
#Get first (in more than one) UIO (UI Object)
#inSpecificationList - UIOSelector
#inElement - Входной элемент - показатель, что не требуется выполнять коннект к процессу
#inFlagRaiseException - Флаг True - выкинуть ошибку в случае обнаружении пустого списка
#old name - PywinautoExtElementGet
#old:PywinautoExtElementGet
def UIOSelector_Get_UIO ( inSpecificationList , inElement = None , inFlagRaiseException = True ) :
'''
Get the pywinauto object by the UIO selector .
Получить список UIO объект по UIO селектору . Если критериям UIO селектора удовлетворяет несколько UIO объектов - вернуть первый из списка
: param inSpecificationList :
: param inElement :
: param inFlagRaiseException :
: return :
. . code - block : : python
# UIDesktop: Взаимодействие с UI объектами приложений
from pyOpenRPA . Robot import UIDesktop
# 1С : UIO Селектор выбора базы
lDemoBaseUIOSelector = [ { " title " : " Запуск 1С :Предприятия " , " class_name " : " V8TopLevelFrameTaxiStarter " , " backend " : " uia " } , { " title " : " DEMO " , " depth_start " : 5 , " depth_end " : 5 } ]
lDemoBaseUIOList = UIDesktop . UIOSelector_Get_UIO ( lDemoBaseUIOSelector ) #Получить 1-й UIO объект, которые удовлетворяет требованиям UIO селектора. В нашем примере либо None, либо UIO объект
: param inSpecificationList : UIO Селектор , который определяет критерии поиска UI элементов
: type inSpecificationList : list , обязательный
: param inElement : Родительский элемент , от которого выполнить поиск UIO объектов по заданному UIO селектору . Если аргумент не задан , платформа выполнит поиск UIO объектов среди всех доступных приложений windows , которые запущены на текущей сессии
: type inElement : UIO объект , опциональный
: param inFlagRaiseException : True - формировать ошибку exception , если платформа не обнаружина ни одного UIO объекта по заданному UIO селектору . False - обратный случай . По умолчанию True
: type inFlagRaiseException : bool , опциональный
: return : UIO объект , которые удовлетворяют условиям UIO селектора , или None
'''
lResult = None
#Получить родительский объект если на вход ничего не поступило
@ -259,17 +273,25 @@ def UIOSelector_Get_UIO (inSpecificationList,inElement=None,inFlagRaiseException
if lResult is None and inFlagRaiseException :
raise pywinauto . findwindows . ElementNotFoundError ( " Robot can ' t find element by the UIOSelector " )
return lResult
#################################################################################################
#Check if UIO exist (Identified by the UIOSelector)
#!!!!!Safe call is included (you can set activity and UIDesktop will choose the bitness and return the result)!!!!!
#UIOSelector
#old name - -
#old:-
def UIOSelector_Exist_Bool ( inUIOSelector ) :
'''
Check if object is exist by the UIO selector .
Проверить существование хотя бы 1 - г о UIO объекта по заданному UIO селектору
! ВНИМАНИЕ ! ДАННАЯ ФУНКЦИОНАЛЬНОСТЬ В АВТОМАТИЧЕСКОМ РЕЖИМЕ ПОДДЕРЖИВАЕТ В С Е РАЗРЯДНОСТИ ПРИЛОЖЕНИЙ ( 32 | 64 ) , КОТОРЫЕ ЗАПУЩЕНЫ В СЕСИИ . PYTHON x64 ИМЕЕТ ВОЗМОЖНОСТЬ ВЗЗАИМОДЕЙСТВИЯ С x32 UIO ОБЪЕКТАМИ , Н О МЫ РЕКОМЕНДУЕМ ДОПОЛНИТЕЛЬНО ИСПОЛЬЗОВАТЬ ИНТЕРПРЕТАТОР PYTHON x32 ( ПОДРОБНЕЕ С М . ФУНКЦИЮ Configure ( ) )
. . code - block : : python
: param inUIOSelector :
: return : True - Object is exist . False - else case
# UIDesktop: Взаимодействие с UI объектами приложений
from pyOpenRPA . Robot import UIDesktop
# 1С : UIO Селектор выбора базы
lDemoBaseUIOSelector = [ { " title " : " Запуск 1С :Предприятия " , " class_name " : " V8TopLevelFrameTaxiStarter " , " backend " : " uia " } , { " title " : " DEMO " , " depth_start " : 5 , " depth_end " : 5 } ]
lDemoBaseUIOExistBool = UIDesktop . UIOSelector_Exist_Bool ( lDemoBaseUIOSelector ) # Получить булевый результат проверки существования UIO объекта
: param inUIOSelector : UIO Селектор , который определяет критерии поиска UIO объектов
: type inUIOSelector : list , обязательный
: return : True - существует хотя бы 1 UIO объект . False - не существует ни одного UIO объекта по заданному UIO селектору
'''
lResult = False
#Check the bitness
@ -294,6 +316,8 @@ def UIOSelector_Exist_Bool (inUIOSelector):
else :
lResult = lPIPEResponseDict [ " Result " ]
return lResult
#################################################################################################
#Wait for UIO is appear (at least one of them or all at the same time)
#inSpecificationListList - List of the UIOSelector
@ -303,6 +327,7 @@ def UIOSelector_Exist_Bool (inUIOSelector):
#old name - -
#####Внимание#####
##Функция ожидания появления элементов (тк элементы могут быть недоступны, неизвестно в каком фреймворке каждый из них может появиться)
def UIOSelectorsSecs_WaitAppear_List ( inSpecificationListList , inWaitSecs , inFlagWaitAllInMoment = False ) :
'''
Wait for many UI object will appear in GUI for inWaitSecs seconds .