@ -120,7 +120,7 @@ def UIOSelector_Get_UIOList (inSpecificationList,inElement=None,inFlagRaiseExcep
: type inSpecificationList : list , обязательный
: param inElement : Родительский элемент , от которого выполнить поиск UIO объектов по заданному UIO селектору . Если аргумент не задан , платформа выполнит поиск UIO объектов среди всех доступных приложений windows , которые запущены на текущей сессии
: type inElement : UIO объект , опциональный
: param inFlagRaiseException : True - формировать ошибку exception , если платформа не обнаружина ни одного UIO объекта по заданному UIO селектору . False - обратный случай . По умолчанию True
: param inFlagRaiseException : True - формировать ошибку exception , если платформа не обнаружина ни одного UIO объекта по заданному UIO селектору . False - обратный случай ( может привести к ошибочным результатам ) . По умолчанию True .
: type inFlagRaiseException : bool , опциональный
: return : Список UIO объектов , которые удовлетворяют условиям UIO селектора
'''
@ -128,123 +128,127 @@ def UIOSelector_Get_UIOList (inSpecificationList,inElement=None,inFlagRaiseExcep
inSpecificationList = copy . deepcopy ( inSpecificationList )
lResultList = [ ]
lChildrenList = [ ]
#Получить родительский объект если на вход ничего не поступило
if inElement is None :
#сформировать спецификацию на получение элемента
lRootElementSpecification = [ inSpecificationList [ 0 ] ]
lRootElementList = PWASpecification_Get_UIO ( lRootElementSpecification )
for lRootItem in lRootElementList :
if lRootItem is not None :
lChildrenList . append ( lRootItem . wrapper_object ( ) )
#Елемент на вход поступил - выполнить е г о анализ
else :
#Получить список элементов
lElementChildrenList = inElement . children ( )
#Поступил index - точное добавление
if ' index ' in inSpecificationList [ 0 ] :
if inSpecificationList [ 0 ] [ ' index ' ] < len ( lElementChildrenList ) :
#Получить дочерний элемент - точное добавление
lChildrenList . append ( lElementChildrenList [ inSpecificationList [ 0 ] [ ' index ' ] ] )
else :
if inFlagRaiseException :
raise ValueError ( ' Object has no children with index: ' + str ( inSpecificationList [ 0 ] [ ' index ' ] ) )
#Поступил ctrl_index - точное добавление
elif ' ctrl_index ' in inSpecificationList [ 0 ] :
if inSpecificationList [ 0 ] [ ' ctrl_index ' ] < len ( lElementChildrenList ) :
#Получить дочерний элемент
lChildrenList . append ( lElementChildrenList [ inSpecificationList [ 0 ] [ ' ctrl_index ' ] ] )
try :
#Получить родительский объект если на вход ничего не поступило
if inElement is None :
#сформировать спецификацию на получение элемента
lRootElementSpecification = [ inSpecificationList [ 0 ] ]
lRootElementList = PWASpecification_Get_UIO ( lRootElementSpecification )
for lRootItem in lRootElementList :
if lRootItem is not None :
lChildrenList . append ( lRootItem . wrapper_object ( ) )
#Елемент на вход поступил - выполнить е г о анализ
else :
#Получить список элементов
lElementChildrenList = inElement . children ( )
#Поступил index - точное добавление
if ' index ' in inSpecificationList [ 0 ] :
if inSpecificationList [ 0 ] [ ' index ' ] < len ( lElementChildrenList ) :
#Получить дочерний элемент - точное добавление
lChildrenList . append ( lElementChildrenList [ inSpecificationList [ 0 ] [ ' index ' ] ] )
else :
if inFlagRaiseException :
raise ValueError ( ' Object has no children with index: ' + str ( inSpecificationList [ 0 ] [ ' index ' ] ) )
#Поступил ctrl_index - точное добавление
elif ' ctrl_index ' in inSpecificationList [ 0 ] :
if inSpecificationList [ 0 ] [ ' ctrl_index ' ] < len ( lElementChildrenList ) :
#Получить дочерний элемент
lChildrenList . append ( lElementChildrenList [ inSpecificationList [ 0 ] [ ' ctrl_index ' ] ] )
else :
if inFlagRaiseException :
raise ValueError ( ' Object has no children with index: ' + str ( inSpecificationList [ 0 ] [ ' ctrl_index ' ] ) )
#Если нет точного обозначения элемента
else :
if inFlagRaiseException :
raise ValueError ( ' Object has no children with index: ' + str ( inSpecificationList [ 0 ] [ ' ctrl_index ' ] ) )
#Если нет точного обозначения элемента
lFlagGoCheck = True
#Учесть поле depth_start (если указано)
if ' depth_start ' in inSpecificationList [ 0 ] :
if inSpecificationList [ 0 ] [ " depth_start " ] > 1 :
lFlagGoCheck = False
#Циклический обход по детям, на предмет соответствия всем условиям
for lChildrenItem in lElementChildrenList :
#Обработка глубины depth (рекурсивный вызов для всех детей с занижением индекса глубины)
#По умолчанию значение глубины 1
if ' depth_end ' in inSpecificationList [ 0 ] :
if inSpecificationList [ 0 ] [ ' depth_end ' ] > 1 :
#Подготовка новой версии спецификации
lChildrenItemNewSpecificationList = inSpecificationList . copy ( )
lChildrenItemNewSpecificationList [ 0 ] = lChildrenItemNewSpecificationList [ 0 ] . copy ( )
lChildrenItemNewSpecificationList [ 0 ] [ " depth_end " ] = lChildrenItemNewSpecificationList [ 0 ] [ " depth_end " ] - 1
if ' depth_start ' in lChildrenItemNewSpecificationList [ 0 ] :
lChildrenItemNewSpecificationList [ 0 ] [ " depth_start " ] = lChildrenItemNewSpecificationList [ 0 ] [ " depth_start " ] - 1
#Циклический вызов для всех детей с о скорректированной спецификацией
lResultList . extend ( UIOSelector_Get_UIOList ( lChildrenItemNewSpecificationList , lChildrenItem , inFlagRaiseException ) )
#Фильтрация
#TODO Сделать поддержку этих атрибутов для первого уровня селектора
if lFlagGoCheck :
lFlagAddChild = True
#Фильтрация по title
if ' title ' in inSpecificationList [ 0 ] :
if lChildrenItem . element_info . name != inSpecificationList [ 0 ] [ " title " ] :
lFlagAddChild = False
#Фильтрация по title_re (regexp)
if ' title_re ' in inSpecificationList [ 0 ] :
if re . fullmatch ( inSpecificationList [ 0 ] [ " title_re " ] , lChildrenItem . element_info . name ) is None :
lFlagAddChild = False
#Фильтрация по rich_text
if ' rich_text ' in inSpecificationList [ 0 ] :
if lChildrenItem . element_info . rich_text != inSpecificationList [ 0 ] [ " rich_text " ] :
lFlagAddChild = False
#Фильтрация по rich_text_re (regexp)
if ' rich_text_re ' in inSpecificationList [ 0 ] :
if re . fullmatch ( inSpecificationList [ 0 ] [ " rich_text_re " ] , lChildrenItem . element_info . rich_text ) is None :
lFlagAddChild = False
#Фильтрация по class_name
if ' class_name ' in inSpecificationList [ 0 ] :
if lChildrenItem . element_info . class_name != inSpecificationList [ 0 ] [ " class_name " ] :
lFlagAddChild = False
#Фильтрация по class_name_re (regexp)
if ' class_name_re ' in inSpecificationList [ 0 ] :
if re . fullmatch ( inSpecificationList [ 0 ] [ " class_name_re " ] , lChildrenItem . element_info . class_name ) is None :
lFlagAddChild = False
#Фильтрация по friendly_class_name
if ' friendly_class_name ' in inSpecificationList [ 0 ] :
if lChildrenItem . friendly_class_name ( ) != inSpecificationList [ 0 ] [ " friendly_class_name " ] :
lFlagAddChild = False
#Фильтрация по friendly_class_name_re (regexp)
if ' friendly_class_name_re ' in inSpecificationList [ 0 ] :
if re . fullmatch ( inSpecificationList [ 0 ] [ " friendly_class_name_re " ] , lChildrenItem . friendly_class_name ) is None :
lFlagAddChild = False
#Фильтрация по control_type
if ' control_type ' in inSpecificationList [ 0 ] :
if lChildrenItem . element_info . control_type != inSpecificationList [ 0 ] [ " control_type " ] :
lFlagAddChild = False
#Фильтрация по control_type_re (regexp)
if ' control_type_re ' in inSpecificationList [ 0 ] :
if re . fullmatch ( inSpecificationList [ 0 ] [ " control_type_re " ] , lChildrenItem . element_info . control_type ) is None :
lFlagAddChild = False
#Фильтрация по is_enabled (bool)
if ' is_enabled ' in inSpecificationList [ 0 ] :
if lChildrenItem . is_enabled ( ) != inSpecificationList [ 0 ] [ " is_enabled " ] :
lFlagAddChild = False
#Фильтрация по is_visible (bool)
if ' is_visible ' in inSpecificationList [ 0 ] :
if lChildrenItem . is_visible ( ) != inSpecificationList [ 0 ] [ " is_visible " ] :
lFlagAddChild = False
#####
#В с е проверки пройдены - флаг добавления
if lFlagAddChild :
lChildrenList . append ( lChildrenItem )
#Выполнить рекурсивный вызов (уменьшение количества спецификаций), если спецификация больше одного элемента
#????????Зачем в условии ниже is not None ???????????
if len ( inSpecificationList ) > 1 and len ( lChildrenList ) > 0 :
#Вызвать рекурсивно функцию получения следующего объекта, если в спецификации есть следующий объект
for lChildElement in lChildrenList :
lResultList . extend ( UIOSelector_Get_UIOList ( inSpecificationList [ 1 : ] , lChildElement , inFlagRaiseException ) )
else :
lFlagGoCheck = True
#Учесть поле depth_start (если указано)
if ' depth_start ' in inSpecificationList [ 0 ] :
if inSpecificationList [ 0 ] [ " depth_start " ] > 1 :
lFlagGoCheck = False
#Циклический обход по детям, на предмет соответствия всем условиям
for lChildrenItem in lElementChildrenList :
#Обработка глубины depth (рекурсивный вызов для всех детей с занижением индекса глубины)
#По умолчанию значение глубины 1
if ' depth_end ' in inSpecificationList [ 0 ] :
if inSpecificationList [ 0 ] [ ' depth_end ' ] > 1 :
#Подготовка новой версии спецификации
lChildrenItemNewSpecificationList = inSpecificationList . copy ( )
lChildrenItemNewSpecificationList [ 0 ] = lChildrenItemNewSpecificationList [ 0 ] . copy ( )
lChildrenItemNewSpecificationList [ 0 ] [ " depth_end " ] = lChildrenItemNewSpecificationList [ 0 ] [ " depth_end " ] - 1
if ' depth_start ' in lChildrenItemNewSpecificationList [ 0 ] :
lChildrenItemNewSpecificationList [ 0 ] [ " depth_start " ] = lChildrenItemNewSpecificationList [ 0 ] [ " depth_start " ] - 1
#Циклический вызов для всех детей с о скорректированной спецификацией
lResultList . extend ( UIOSelector_Get_UIOList ( lChildrenItemNewSpecificationList , lChildrenItem , inFlagRaiseException ) )
#Фильтрация
#TODO Сделать поддержку этих атрибутов для первого уровня селектора
if lFlagGoCheck :
lFlagAddChild = True
#Фильтрация по title
if ' title ' in inSpecificationList [ 0 ] :
if lChildrenItem . element_info . name != inSpecificationList [ 0 ] [ " title " ] :
lFlagAddChild = False
#Фильтрация по title_re (regexp)
if ' title_re ' in inSpecificationList [ 0 ] :
if re . fullmatch ( inSpecificationList [ 0 ] [ " title_re " ] , lChildrenItem . element_info . name ) is None :
lFlagAddChild = False
#Фильтрация по rich_text
if ' rich_text ' in inSpecificationList [ 0 ] :
if lChildrenItem . element_info . rich_text != inSpecificationList [ 0 ] [ " rich_text " ] :
lFlagAddChild = False
#Фильтрация по rich_text_re (regexp)
if ' rich_text_re ' in inSpecificationList [ 0 ] :
if re . fullmatch ( inSpecificationList [ 0 ] [ " rich_text_re " ] , lChildrenItem . element_info . rich_text ) is None :
lFlagAddChild = False
#Фильтрация по class_name
if ' class_name ' in inSpecificationList [ 0 ] :
if lChildrenItem . element_info . class_name != inSpecificationList [ 0 ] [ " class_name " ] :
lFlagAddChild = False
#Фильтрация по class_name_re (regexp)
if ' class_name_re ' in inSpecificationList [ 0 ] :
if re . fullmatch ( inSpecificationList [ 0 ] [ " class_name_re " ] , lChildrenItem . element_info . class_name ) is None :
lFlagAddChild = False
#Фильтрация по friendly_class_name
if ' friendly_class_name ' in inSpecificationList [ 0 ] :
if lChildrenItem . friendly_class_name ( ) != inSpecificationList [ 0 ] [ " friendly_class_name " ] :
lFlagAddChild = False
#Фильтрация по friendly_class_name_re (regexp)
if ' friendly_class_name_re ' in inSpecificationList [ 0 ] :
if re . fullmatch ( inSpecificationList [ 0 ] [ " friendly_class_name_re " ] , lChildrenItem . friendly_class_name ) is None :
lFlagAddChild = False
#Фильтрация по control_type
if ' control_type ' in inSpecificationList [ 0 ] :
if lChildrenItem . element_info . control_type != inSpecificationList [ 0 ] [ " control_type " ] :
lFlagAddChild = False
#Фильтрация по control_type_re (regexp)
if ' control_type_re ' in inSpecificationList [ 0 ] :
if re . fullmatch ( inSpecificationList [ 0 ] [ " control_type_re " ] , lChildrenItem . element_info . control_type ) is None :
lFlagAddChild = False
#Фильтрация по is_enabled (bool)
if ' is_enabled ' in inSpecificationList [ 0 ] :
if lChildrenItem . is_enabled ( ) != inSpecificationList [ 0 ] [ " is_enabled " ] :
lFlagAddChild = False
#Фильтрация по is_visible (bool)
if ' is_visible ' in inSpecificationList [ 0 ] :
if lChildrenItem . is_visible ( ) != inSpecificationList [ 0 ] [ " is_visible " ] :
lFlagAddChild = False
#####
#В с е проверки пройдены - флаг добавления
if lFlagAddChild :
lChildrenList . append ( lChildrenItem )
#Выполнить рекурсивный вызов (уменьшение количества спецификаций), если спецификация больше одного элемента
#????????Зачем в условии ниже is not None ???????????
if len ( inSpecificationList ) > 1 and len ( lChildrenList ) > 0 :
#Вызвать рекурсивно функцию получения следующего объекта, если в спецификации есть следующий объект
for lChildElement in lChildrenList :
lResultList . extend ( UIOSelector_Get_UIOList ( inSpecificationList [ 1 : ] , lChildElement , inFlagRaiseException ) )
else :
lResultList . extend ( lChildrenList )
#Условие, если результирующий список пустой и установлен флаг создания ошибки (и inElement is None - не следствие рекурсивного вызова)
if inElement is None and len ( lResultList ) == 0 and inFlagRaiseException :
raise pywinauto . findwindows . ElementNotFoundError ( " Robot can ' t find element by the UIOSelector " )
return lResultList
lResultList . extend ( lChildrenList )
#Условие, если результирующий список пустой и установлен флаг создания ошибки (и inElement is None - не следствие рекурсивного вызова)
if inElement is None and len ( lResultList ) == 0 and inFlagRaiseException :
raise pywinauto . findwindows . ElementNotFoundError ( " Robot can ' t find element by the UIOSelector " )
return lResultList
except Exception as e :
if inFlagRaiseException : raise e
else : return [ ]
#old:PywinautoExtElementGet
def UIOSelector_Get_UIO ( inSpecificationList , inElement = None , inFlagRaiseException = True ) :
@ -268,16 +272,13 @@ def UIOSelector_Get_UIO (inSpecificationList,inElement=None,inFlagRaiseException
'''
lResult = None
#Получить родительский объект если на вход ничего не поступило
lResultList = UIOSelector_Get_UIOList ( inSpecificationList , inElement , False )
lResultList = UIOSelector_Get_UIOList ( inSpecificationList , inElement , inFlagRaiseException )
if len ( lResultList ) > 0 :
lResult = lResultList [ 0 ]
#Условие, если результирующий список пустой и установлен флаг создания ошибки (и inElement is None - не следствие рекурсивного вызова)
if lResult is None and inFlagRaiseException :
raise pywinauto . findwindows . ElementNotFoundError ( " Robot can ' t find element by the UIOSelector " )
return lResult
#old:-
def UIOSelector_Exist_Bool ( inUIOSelector ):
def UIOSelector_Exist_Bool ( inUIOSelector , inFlagRaiseException = True ):
''' L-,W+: Проверить существование хотя бы 1-г о UIO объекта по заданному UIO селектору
! ВНИМАНИЕ ! ДАННАЯ ФУНКЦИОНАЛЬНОСТЬ В АВТОМАТИЧЕСКОМ РЕЖИМЕ ПОДДЕРЖИВАЕТ В С Е РАЗРЯДНОСТИ ПРИЛОЖЕНИЙ ( 32 | 64 ) , КОТОРЫЕ ЗАПУЩЕНЫ В СЕСИИ . PYTHON x64 ИМЕЕТ ВОЗМОЖНОСТЬ ВЗЗАИМОДЕЙСТВИЯ С x32 UIO ОБЪЕКТАМИ , Н О МЫ РЕКОМЕНДУЕМ ДОПОЛНИТЕЛЬНО ИСПОЛЬЗОВАТЬ ИНТЕРПРЕТАТОР PYTHON x32 ( ПОДРОБНЕЕ С М . ФУНКЦИЮ Configure ( ) )
@ -292,6 +293,8 @@ def UIOSelector_Exist_Bool (inUIOSelector):
: param inUIOSelector : UIO Селектор , который определяет критерии поиска UIO объектов
: type inUIOSelector : list , обязательный
: param inFlagRaiseException : True - формировать ошибку exception , если платформа не обнаружина ни одного UIO объекта по заданному UIO селектору . False - обратный случай ( может привести к ошибочным результатам ) . По умолчанию True .
: type inFlagRaiseException : bool , опциональный
: return : True - существует хотя бы 1 UIO объект . False - не существует ни одного UIO объекта по заданному UIO селектору
'''
lResult = False
@ -299,7 +302,9 @@ def UIOSelector_Exist_Bool (inUIOSelector):
lSafeOtherProcess = UIOSelector_SafeOtherGet_Process ( inUIOSelector )
if lSafeOtherProcess is None :
#Получить родительский объект если на вход ничего не поступило
lResultList = UIOSelector_Get_UIOList ( inUIOSelector , None , False )
try :
lResultList = UIOSelector_Get_UIOList ( inUIOSelector , None , inFlagRaiseException )
except pywinauto . findwindows . ElementNotFoundError : return False
if len ( lResultList ) > 0 :
lResult = True
else :
@ -319,7 +324,7 @@ def UIOSelector_Exist_Bool (inUIOSelector):
return lResult
#old: -
def UIOSelectorsSecs_WaitAppear_List ( inSpecificationListList , inWaitSecs = 86400.0 , inFlagWaitAllInMoment = False ):
def UIOSelectorsSecs_WaitAppear_List ( inSpecificationListList , inWaitSecs = 86400.0 , inFlagWaitAllInMoment = False , inFlagRaiseException = True ):
''' L-,W+: Ожидать появление хотя бы 1-г о / всех UIO объектов по заданным UIO селекторам
! ВНИМАНИЕ ! ДАННАЯ ФУНКЦИОНАЛЬНОСТЬ В АВТОМАТИЧЕСКОМ РЕЖИМЕ ПОДДЕРЖИВАЕТ В С Е РАЗРЯДНОСТИ ПРИЛОЖЕНИЙ ( 32 | 64 ) , КОТОРЫЕ ЗАПУЩЕНЫ В СЕСИИ . PYTHON x64 ИМЕЕТ ВОЗМОЖНОСТЬ ВЗЗАИМОДЕЙСТВИЯ С x32 UIO ОБЪЕКТАМИ , Н О МЫ РЕКОМЕНДУЕМ ДОПОЛНИТЕЛЬНО ИСПОЛЬЗОВАТЬ ИНТЕРПРЕТАТОР PYTHON x32 ( ПОДРОБНЕЕ С М . ФУНКЦИЮ Configure ( ) )
@ -342,6 +347,8 @@ def UIOSelectorsSecs_WaitAppear_List (inSpecificationListList,inWaitSecs=86400.0
: type inSpecificationListList : list , обязательный
: param inWaitSecs : Количество секунд , которые отвести на ожидание UIO объектов . По умолчанию 24 часа ( 86400 секунд )
: type inWaitSecs : float , необязательный
: param inFlagRaiseException : True - формировать ошибку exception , если платформа не обнаружина ни одного UIO объекта по заданному UIO селектору . False - обратный случай ( может привести к ошибочным результатам ) . По умолчанию True .
: type inFlagRaiseException : bool , опциональный
: param inFlagWaitAllInMoment : True - Ожидать до того момента , пока не появятся все запрашиваемые UIO объекты на рабочей области
: return : Список индексов , которые указывают на номер входящих UIO селекторов , которые были обнаружены на рабочей области . Пример : [ 0 , 2 ]
'''
@ -356,7 +363,7 @@ def UIOSelectorsSecs_WaitAppear_List (inSpecificationListList,inWaitSecs=86400.0
#Итерация проверки
lIndex = 0
for lItem in inSpecificationListList :
lItemResultFlag = UIOSelector_Exist_Bool ( lItem )
lItemResultFlag = UIOSelector_Exist_Bool ( lItem , inFlagRaiseException = True )
#Если обнаружен элемент - добавить е г о индекс в массив
if lItemResultFlag :
lResultList . append ( lIndex )
@ -376,7 +383,7 @@ def UIOSelectorsSecs_WaitAppear_List (inSpecificationListList,inWaitSecs=86400.0
return lResultList
#old: -
def UIOSelectorsSecs_WaitDisappear_List ( inSpecificationListList , inWaitSecs = 86400.0 , inFlagWaitAllInMoment = False ):
def UIOSelectorsSecs_WaitDisappear_List ( inSpecificationListList , inWaitSecs = 86400.0 , inFlagWaitAllInMoment = False , inFlagRaiseException = True ):
''' L-,W+: Ожидать исчезновение хотя бы 1-г о / всех UIO объектов по заданным UIO селекторам
! ВНИМАНИЕ ! ДАННАЯ ФУНКЦИОНАЛЬНОСТЬ В АВТОМАТИЧЕСКОМ РЕЖИМЕ ПОДДЕРЖИВАЕТ В С Е РАЗРЯДНОСТИ ПРИЛОЖЕНИЙ ( 32 | 64 ) , КОТОРЫЕ ЗАПУЩЕНЫ В СЕСИИ . PYTHON x64 ИМЕЕТ ВОЗМОЖНОСТЬ ВЗЗАИМОДЕЙСТВИЯ С x32 UIO ОБЪЕКТАМИ , Н О МЫ РЕКОМЕНДУЕМ ДОПОЛНИТЕЛЬНО ИСПОЛЬЗОВАТЬ ИНТЕРПРЕТАТОР PYTHON x32 ( ПОДРОБНЕЕ С М . ФУНКЦИЮ Configure ( ) )
@ -399,6 +406,8 @@ def UIOSelectorsSecs_WaitDisappear_List (inSpecificationListList,inWaitSecs=8640
: type inSpecificationListList : list , обязательный
: param inWaitSecs : Количество секунд , которые отвести на ожидание исчезновения UIO объектов . По умолчанию 24 часа ( 86400 секунд )
: type inWaitSecs : float , необязательный
: param inFlagRaiseException : True - формировать ошибку exception , если платформа не обнаружина ни одного UIO объекта по заданному UIO селектору . False - обратный случай ( может привести к ошибочным результатам ) . По умолчанию True .
: type inFlagRaiseException : bool , опциональный
: param inFlagWaitAllInMoment : True - Ожидать до того момента , пока не исчезнут все запрашиваемые UIO объекты на рабочей области
: return : Список индексов , которые указывают на номер входящих UIO селекторов , которые были обнаружены на рабочей области . Пример : [ 0 , 2 ]
'''
@ -414,7 +423,7 @@ def UIOSelectorsSecs_WaitDisappear_List (inSpecificationListList,inWaitSecs=8640
#Итерация проверки
lIndex = 0
for lItem in inSpecificationListList :
lItemResultFlag = UIOSelector_Exist_Bool ( lItem )
lItemResultFlag = UIOSelector_Exist_Bool ( lItem ,inFlagRaiseException = inFlagRaiseException )
#Если обнаружен элемент - добавить е г о индекс в массив
if not lItemResultFlag :
lResultList . append ( lIndex )
@ -434,7 +443,7 @@ def UIOSelectorsSecs_WaitDisappear_List (inSpecificationListList,inWaitSecs=8640
return lResultList
#old: -
def UIOSelectorSecs_WaitAppear_Bool ( inSpecificationList , inWaitSecs ):
def UIOSelectorSecs_WaitAppear_Bool ( inSpecificationList , inWaitSecs , inFlagRaiseException = True ):
''' L-,W+: Ожидать появление 1-г о UIO объекта по заданному UIO селектору
! ВНИМАНИЕ ! ДАННАЯ ФУНКЦИОНАЛЬНОСТЬ В АВТОМАТИЧЕСКОМ РЕЖИМЕ ПОДДЕРЖИВАЕТ В С Е РАЗРЯДНОСТИ ПРИЛОЖЕНИЙ ( 32 | 64 ) , КОТОРЫЕ ЗАПУЩЕНЫ В СЕСИИ . PYTHON x64 ИМЕЕТ ВОЗМОЖНОСТЬ ВЗЗАИМОДЕЙСТВИЯ С x32 UIO ОБЪЕКТАМИ , Н О МЫ РЕКОМЕНДУЕМ ДОПОЛНИТЕЛЬНО ИСПОЛЬЗОВАТЬ ИНТЕРПРЕТАТОР PYTHON x32 ( ПОДРОБНЕЕ С М . ФУНКЦИЮ Configure ( ) )
@ -451,16 +460,18 @@ def UIOSelectorSecs_WaitAppear_Bool (inSpecificationList,inWaitSecs):
: type inSpecificationList : list , обязательный
: param inWaitSecs : Количество секунд , которые отвести на ожидание UIO объекта . По умолчанию 24 часа ( 86400 секунд )
: type inWaitSecs : float , необязательный
: param inFlagRaiseException : True - формировать ошибку exception , если платформа не обнаружина ни одного UIO объекта по заданному UIO селектору . False - обратный случай ( может привести к ошибочным результатам ) . По умолчанию True .
: type inFlagRaiseException : bool , опциональный
: return : True - UIO объект был обнаружен . False - обратная ситуациая
'''
lWaitAppearList = UIOSelectorsSecs_WaitAppear_List ( [ inSpecificationList ] , inWaitSecs )
lWaitAppearList = UIOSelectorsSecs_WaitAppear_List ( [ inSpecificationList ] , inWaitSecs , inFlagRaiseException = inFlagRaiseException )
lResult = False
if len ( lWaitAppearList ) > 0 :
lResult = True
return lResult
#old name - -
def UIOSelectorSecs_WaitDisappear_Bool ( inSpecificationList , inWaitSecs ):
def UIOSelectorSecs_WaitDisappear_Bool ( inSpecificationList , inWaitSecs ,inFlagRaiseException = True ):
''' L-,W+: Ожидать исчезновение 1-г о UIO объекта по заданному UIO селектору
! ВНИМАНИЕ ! ДАННАЯ ФУНКЦИОНАЛЬНОСТЬ В АВТОМАТИЧЕСКОМ РЕЖИМЕ ПОДДЕРЖИВАЕТ В С Е РАЗРЯДНОСТИ ПРИЛОЖЕНИЙ ( 32 | 64 ) , КОТОРЫЕ ЗАПУЩЕНЫ В СЕСИИ . PYTHON x64 ИМЕЕТ ВОЗМОЖНОСТЬ ВЗЗАИМОДЕЙСТВИЯ С x32 UIO ОБЪЕКТАМИ , Н О МЫ РЕКОМЕНДУЕМ ДОПОЛНИТЕЛЬНО ИСПОЛЬЗОВАТЬ ИНТЕРПРЕТАТОР PYTHON x32 ( ПОДРОБНЕЕ С М . ФУНКЦИЮ Configure ( ) )
@ -477,9 +488,11 @@ def UIOSelectorSecs_WaitDisappear_Bool (inSpecificationList,inWaitSecs):
: type inSpecificationList : list , обязательный
: param inWaitSecs : Количество секунд , которые отвести на исчезновение UIO объекта . По умолчанию 24 часа ( 86400 секунд )
: type inWaitSecs : float , необязательный
: param inFlagRaiseException : True - формировать ошибку exception , если платформа не обнаружина ни одного UIO объекта по заданному UIO селектору . False - обратный случай ( может привести к ошибочным результатам ) . По умолчанию True .
: type inFlagRaiseException : bool , опциональный
: return : True - UIO объект был обнаружен . False - обратная ситуациая
'''
lWaitDisappearList = UIOSelectorsSecs_WaitDisappear_List ( [ inSpecificationList ] , inWaitSecs )
lWaitDisappearList = UIOSelectorsSecs_WaitDisappear_List ( [ inSpecificationList ] , inWaitSecs ,inFlagRaiseException = inFlagRaiseException )
lResult = False
if len ( lWaitDisappearList ) > 0 :
lResult = True
@ -908,7 +921,7 @@ def UIO_GetCtrlIndex_Int(inElement):
return lResult
#old: - PywinautoExtElementsGetInfo
def UIOSelector_Get_UIOInfoList ( inUIOSelector , inElement = None ):
def UIOSelector_Get_UIOInfoList ( inUIOSelector , inElement = None , inFlagRaiseException = True ):
""" L-,W+: Техническая функция: Получить список параметров последних уровней UIO селектора по UIO объектам, которые удовлетворяют входящим inUIOSelector, поиск по которым будет производится от уровня inElement.
! ВНИМАНИЕ ! ДАННАЯ ФУНКЦИОНАЛЬНОСТЬ В АВТОМАТИЧЕСКОМ РЕЖИМЕ ПОДДЕРЖИВАЕТ В С Е РАЗРЯДНОСТИ ПРИЛОЖЕНИЙ ( 32 | 64 ) , КОТОРЫЕ ЗАПУЩЕНЫ В СЕСИИ . PYTHON x64 ИМЕЕТ ВОЗМОЖНОСТЬ ВЗЗАИМОДЕЙСТВИЯ С x32 UIO ОБЪЕКТАМИ , Н О МЫ РЕКОМЕНДУЕМ ДОПОЛНИТЕЛЬНО ИСПОЛЬЗОВАТЬ ИНТЕРПРЕТАТОР PYTHON x32 ( ПОДРОБНЕЕ С М . ФУНКЦИЮ Configure ( ) )
@ -925,13 +938,15 @@ def UIOSelector_Get_UIOInfoList (inUIOSelector, inElement=None):
: type inUIOSelector : list , обязательный
: param inElement : UIO объект , от которого выполнить поиск дочерних UIO объектов по UIO селектору inUIOSelector . По умолчанию None - поиск среди всех приложений .
: type inElement : UIO объект , необязательный
: param inFlagRaiseException : True - формировать ошибку exception , если платформа не обнаружина ни одного UIO объекта по заданному UIO селектору . False - обратный случай ( может привести к ошибочным результатам ) . По умолчанию True .
: type inFlagRaiseException : bool , опциональный
: return : dict , пример : { " title " : None , " rich_text " : None , " process_id " : None , " process " : None , " handle " : None , " class_name " : None , " control_type " : None , " control_id " : None , " rectangle " : { " left " : None , " top " : None , " right " : None , " bottom " : None } , ' runtime_id ' : None }
"""
#Check the bitness
lSafeOtherProcess = UIOSelector_SafeOtherGet_Process ( inUIOSelector )
if lSafeOtherProcess is None :
#Получить родительский объект если на вход ничего не поступило
lResultList = UIOSelector_Get_UIOList ( inUIOSelector , inElement )
lResultList = UIOSelector_Get_UIOList ( inUIOSelector , inElement , inFlagRaiseException )
lIterator = 0
for lItem in lResultList :
lResultList [ lIterator ] = UIOEI_Convert_UIOInfo ( lResultList [ lIterator ] . element_info )
@ -985,7 +1000,7 @@ def UIOSelector_TryRestore_Dict(inSpecificationList):
return lResult
#old: - ElementActionGetList
def UIOSelector_Get_UIOActivityList ( inUIOSelector ):
def UIOSelector_Get_UIOActivityList ( inUIOSelector ,inFlagRaiseException = True ):
""" L-,W+: Получить список доступных действий/функций по UIO селектору inUIOSelector. Описание возможных активностей см. ниже.
! ВНИМАНИЕ ! ДАННАЯ ФУНКЦИОНАЛЬНОСТЬ В АВТОМАТИЧЕСКОМ РЕЖИМЕ ПОДДЕРЖИВАЕТ В С Е РАЗРЯДНОСТИ ПРИЛОЖЕНИЙ ( 32 | 64 ) , КОТОРЫЕ ЗАПУЩЕНЫ В СЕСИИ . PYTHON x64 ИМЕЕТ ВОЗМОЖНОСТЬ ВЗЗАИМОДЕЙСТВИЯ С x32 UIO ОБЪЕКТАМИ , Н О МЫ РЕКОМЕНДУЕМ ДОПОЛНИТЕЛЬНО ИСПОЛЬЗОВАТЬ ИНТЕРПРЕТАТОР PYTHON x32 ( ПОДРОБНЕЕ С М . ФУНКЦИЮ Configure ( ) )
@ -1000,12 +1015,14 @@ def UIOSelector_Get_UIOActivityList (inUIOSelector):
: param inUIOSelector : UIO селектор , который определяет UIO объект , для которого будет представлен перечень доступных активностей .
: type inUIOSelector : list , обязательный
: param inFlagRaiseException : True - формировать ошибку exception , если платформа не обнаружина ни одного UIO объекта по заданному UIO селектору . False - обратный случай ( может привести к ошибочным результатам ) . По умолчанию True .
: type inFlagRaiseException : bool , опциональный
"""
#Check the bitness
lSafeOtherProcess = UIOSelector_SafeOtherGet_Process ( inUIOSelector )
if lSafeOtherProcess is None :
#Получить объект
lObject = UIOSelector_Get_UIO ( inUIOSelector )
lObject = UIOSelector_Get_UIO ( inUIOSelector ,inFlagRaiseException = inFlagRaiseException )
lActionList = dir ( lObject )
lResult = dir ( lObject )
#Выполнить чистку списка от неактуальных методов
@ -1033,7 +1050,7 @@ def UIOSelector_Get_UIOActivityList (inUIOSelector):
return lResult
#old: - ElementRunAction
def UIOSelectorUIOActivity_Run_Dict ( inUIOSelector , inActionName , in ArgumentList= None , inkwArgumentObject = None ) :
def UIOSelectorUIOActivity_Run_Dict ( inUIOSelector , inActionName , in FlagRaiseException= True , in ArgumentList= None , inkwArgumentObject = None ) :
""" L-,W+: Выполнить активность inActionName над UIO объектом, полученным с помощью UIO селектора inUIOSelector. Описание возможных активностей см. ниже.
! ВНИМАНИЕ ! ДАННАЯ ФУНКЦИОНАЛЬНОСТЬ В АВТОМАТИЧЕСКОМ РЕЖИМЕ ПОДДЕРЖИВАЕТ В С Е РАЗРЯДНОСТИ ПРИЛОЖЕНИЙ ( 32 | 64 ) , КОТОРЫЕ ЗАПУЩЕНЫ В СЕСИИ . PYTHON x64 ИМЕЕТ ВОЗМОЖНОСТЬ ВЗЗАИМОДЕЙСТВИЯ С x32 UIO ОБЪЕКТАМИ , Н О МЫ РЕКОМЕНДУЕМ ДОПОЛНИТЕЛЬНО ИСПОЛЬЗОВАТЬ ИНТЕРПРЕТАТОР PYTHON x32 ( ПОДРОБНЕЕ С М . ФУНКЦИЮ Configure ( ) )
@ -1050,6 +1067,8 @@ def UIOSelectorUIOActivity_Run_Dict(inUIOSelector, inActionName, inArgumentList=
: type inUIOSelector : list , обязательный
: param inActionName : наименование активности , которую требуется выполнить над UIO объектом
: type inActionName : str , обязательный
: param inFlagRaiseException : True - формировать ошибку exception , если платформа не обнаружина ни одного UIO объекта по заданному UIO селектору . False - обратный случай ( может привести к ошибочным результатам ) . По умолчанию True .
: type inFlagRaiseException : bool , опциональный
: param inArgumentList : список передаваемых неименованных аргументов в функцию inActionName
: type inArgumentList : list , необязательный
: param inkwArgumentObject : словарь передаваемых именованных аргументов в функцию inActionName
@ -1064,7 +1083,7 @@ def UIOSelectorUIOActivity_Run_Dict(inUIOSelector, inActionName, inArgumentList=
#Run activity if SafeOtherProcess is None
if lSafeOtherProcess is None :
#Определить объект
lObject = UIOSelector_Get_UIO ( inUIOSelector )
lObject = UIOSelector_Get_UIO ( inUIOSelector ,inFlagRaiseException = inFlagRaiseException )
#Получить метод для вызова
lFunction = getattr ( lObject , inActionName )
#Выполнить действие