@ -97,8 +97,10 @@ mDefaultPywinautoBackend="win32"
#]
#]
################
################
#return: List of UI Object
#return: List of UI Object
#inElement - Входной элемент - показатель, что не требуется выполнять коннект к процессу
#inFlagRaiseException - Флаг True - выкинуть ошибку в случае обнаружении пустого списка
#old name - PywinautoExtElementsGet
#old name - PywinautoExtElementsGet
def UIOSelector_Get_UIOList ( inSpecificationList , inElement = None ) :
def UIOSelector_Get_UIOList ( inSpecificationList , inElement = None ,inFlagRaiseException = True ):
lResultList = [ ]
lResultList = [ ]
lChildrenList = [ ]
lChildrenList = [ ]
#Получить родительский объект если на вход ничего не поступило
#Получить родительский объект если на вход ничего не поступило
@ -148,7 +150,7 @@ def UIOSelector_Get_UIOList (inSpecificationList,inElement=None):
lChildrenItemNewSpecificationList [ 0 ] [ " depth_start " ] = lChildrenItemNewSpecificationList [ 0 ] [ " depth_start " ] - 1
lChildrenItemNewSpecificationList [ 0 ] [ " depth_start " ] = lChildrenItemNewSpecificationList [ 0 ] [ " depth_start " ] - 1
#pdb.set_trace()
#pdb.set_trace()
#Циклический вызов для всех детей с о скорректированной спецификацией
#Циклический вызов для всех детей с о скорректированной спецификацией
lResultList . extend ( UIOSelector_Get_UIOList ( lChildrenItemNewSpecificationList , lChildrenItem ))
lResultList . extend ( UIOSelector_Get_UIOList ( lChildrenItemNewSpecificationList , lChildrenItem ,inFlagRaiseException ))
#Фильтрация
#Фильтрация
if lFlagGoCheck :
if lFlagGoCheck :
lFlagAddChild = True
lFlagAddChild = True
@ -177,28 +179,93 @@ def UIOSelector_Get_UIOList (inSpecificationList,inElement=None):
if lFlagAddChild :
if lFlagAddChild :
lChildrenList . append ( lChildrenItem )
lChildrenList . append ( lChildrenItem )
#Выполнить рекурсивный вызов (уменьшение количества спецификаций), если спецификация больше одного элемента
#Выполнить рекурсивный вызов (уменьшение количества спецификаций), если спецификация больше одного элемента
#????????Зачем в условии ниже is not None ???????????
if len ( inSpecificationList ) > 1 and len ( lChildrenList ) > 0 is not None :
if len ( inSpecificationList ) > 1 and len ( lChildrenList ) > 0 is not None :
#Вызвать рекурсивно функцию получения следующего объекта, если в спецификации есть следующий объект
#Вызвать рекурсивно функцию получения следующего объекта, если в спецификации есть следующий объект
for lChildElement in lChildrenList :
for lChildElement in lChildrenList :
lResultList . extend ( UIOSelector_Get_UIOList ( inSpecificationList [ 1 : ] , lChildElement ))
lResultList . extend ( UIOSelector_Get_UIOList ( inSpecificationList [ 1 : ] , lChildElement ,inFlagRaiseException ))
else :
else :
lResultList . extend ( lChildrenList )
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
return lResultList
#################################################################################################
#################################################################################################
#Get first (in more than one) UIO (UI Object)
#Get first (in more than one) UIO (UI Object)
#inSpecificationList - UIOSelector
#inSpecificationList - UIOSelector
#inElement - Входной элемент - показатель, что не требуется выполнять коннект к процессу
#inFlagRaiseException - Флаг True - выкинуть ошибку в случае обнаружении пустого списка
#old name - PywinautoExtElementGet
#old name - PywinautoExtElementGet
def UIOSelector_Get_UIO ( inSpecificationList , inElement = None ) :
def UIOSelector_Get_UIO ( inSpecificationList , inElement = None ,inFlagRaiseException = True ):
lResult = None
lResult = None
#Получить родительский объект если на вход ничего не поступило
#Получить родительский объект если на вход ничего не поступило
lResultList = UIOSelector_Get_UIOList ( inSpecificationList , inElement )
lResultList = UIOSelector_Get_UIOList ( inSpecificationList , inElement ,False )
if len ( lResultList ) > 0 :
if len ( lResultList ) > 0 :
lResult = lResultList [ 0 ]
lResult = lResultList [ 0 ]
else :
#Условие, если результирующий список пустой и установлен флаг создания ошибки (и inElement is None - не следствие рекурсивного вызова)
if lResult is None and inFlagRaiseException :
raise pywinauto . findwindows . ElementNotFoundError ( " Robot can ' t find element by the UIOSelector " )
raise pywinauto . findwindows . ElementNotFoundError ( " Robot can ' t find element by the UIOSelector " )
return lResult
return lResult
#################################################################################################
#Check if UIO exist (Identified by the UIOSelector)
#inSpecificationList - UIOSelector
#old name - -
def UIOSelector_Exist_Bool ( inSpecificationList ) :
lResult = False
#Получить родительский объект если на вход ничего не поступило
lResultList = UIOSelector_Get_UIOList ( inSpecificationList , inElement , False )
if len ( lResultList ) > 0 :
lResult = True
return lResult
#################################################################################################
#Wait for UIO is appear (at least one of them or all at the same time)
#inSpecificationListList - List of the UIOSelector
#inWaitSecs - Время ожидания объекта в секундах
#inFlagWaitAllInMoment - доп. условие - ожидать появление всех UIOSelector одновременно
#return: [0,1,2] - index of UIOSpecification, which is appear
#old name - -
def UIOSelectorsSecs_WaitAppear_List ( inSpecificationListList , inWaitSecs , inFlagWaitAllInMoment = False ) :
lResultFlag = False
lSecsSleep = 1 #Настроечный параметр
lSecsDone = 0
lResultList = None
#Цикл проверки
while lResultFlag == False and lSecsSleep < inWaitSecs :
lResultList = [ ]
#Итерация проверки
lIndex = 0
for lItem in inSpecificationListList :
lItemResultFlag = UIOSelector_Exist_Bool ( lItem )
#Если обнаружен элемент - добавить е г о индекс в массив
if lItemResultFlag :
lResultList . append ( lIndex )
#Инкремент индекса
lIndex = lIndex + 1
#Проверка в зависимости от флага
if inFlagWaitAllInMoment and len ( lResultList ) == len ( inSpecificationListList ) :
#Условие выполнено
lResultFlag = True
elif not inFlagWaitAllInMoment and len ( lResultList ) > 0 :
#Условие выполнено
lResultFlag = True
#Если флаг не изменился - увеличить время и уснуть
if lResultFlag == False :
lSecsDone = lSecsDone + lSecsSleep
sleep ( lSecsSleep )
return lResultList
#################################################################################################
#Wait for UIO is appear (at least one of them or all at the same time)
#inSpecificationList - UIOSelector
#inWaitSecs - Время ожидания объекта в секундах
#return: Bool - True - UIO is appear
#old name - -
def UIOSelectorSecs_WaitAppear_Bool ( inSpecificationList , inWaitSecs ) :
lWaitAppearList = UIOSelectorsSecs_WaitAppear_List ( [ inSpecificationList ] , inWaitSecs )
lResult = False
if len ( lWaitAppearList ) > 0 :
lResult = True
return lResult
#################################################################################################
#################################################################################################
#Get process bitness (32 or 64)
#Get process bitness (32 or 64)
#inSpecificationList - UIOSelector
#inSpecificationList - UIOSelector