#Robot_AddedGUIPython_64 #GUI_BitnessCheck

dev-linux
Ivan Maslov 6 years ago
parent 2f3e63ef02
commit d7a5afca33

@ -197,6 +197,23 @@ def UIOSelector_Get_UIO (inSpecificationList,inElement=None):
lResult=lResultList[0]
return lResult
#################################################################################################
#Get process bitness (32 or 64)
#inSpecificationList - UIOSelector
#old name - None
#return None (if Process not found), int 32, or int 64
def UIOSelector_Get_BitnessInt (inSpecificationList):
lResult=None
#pdb.set_trace()
#Получить объект Application (Для проверки разрядности)
lRootElement=PWASpecification_Get_PWAApplication(inSpecificationList)
if lRootElement is not None:
if lRootElement.is64bit():
lResult=64
else:
lResult=32
return lResult
##################################################################################################
#inControlSpecificationArray - List of dict, dict in pywinauto.find_windows notation
#Backend selection - attribute "backend" ("win32" || "uia") in 1-st list element
@ -237,6 +254,41 @@ def PWASpecification_Get_UIO(inControlSpecificationArray):
for lWindowSpecification in inControlSpecificationArray[0:]:
lTempObject=lTempObject.window(**lWindowSpecification)
return lTempObject
##################################################################################################
#inControlSpecificationArray - List of dict, dict in pywinauto.find_windows notation
#Backend selection - attribute "backend" ("win32" || "uia") in 1-st list element
#return process application object
#old name - None
def PWASpecification_Get_PWAApplication(inControlSpecificationArray):
#Определение backend
lBackend=mDefaultPywinautoBackend
#pdb.set_trace()
if "backend" in inControlSpecificationArray[0]:
lBackend=inControlSpecificationArray[0]["backend"]
inControlSpecificationArray[0].pop("backend")
#Подготовка входного массива
inControlSpecificationOriginArray=inControlSpecificationArray
inControlSpecificationArray=UIOSelector_SearchProcessNormalize_UIOSelector(inControlSpecificationArray)
#Выполнить идентификацию объектов, если передан массив
lResultList=[];
lTempObject=None
if len(inControlSpecificationArray) > 0:
#Выполнить подключение к объекту
lRPAApplication = pywinauto.Application(backend=lBackend)
#Проверка разрядности
try:
lRPAApplication.connect(**inControlSpecificationArray[0])
except Exception as e:
UIOSelector_TryRestore_Dict(inControlSpecificationArray)
try:
lRPAApplication.connect(**inControlSpecificationArray[0])
except Exception as e:
lRPAApplication = None
if lRPAApplication is not None:
#lTempObject=lRPAApplication.window(**inControlSpecificationArray[0])
#Скорректировано из-за недопонимания структуры
lTempObject=lRPAApplication
return lTempObject
###########################################################################################################
#inElementSpecificationList = UIOSelector (see description on the top of the document)
@ -945,7 +997,7 @@ if not mFlagIsDebug:
lJSONInput = ProcessCommunicator.ProcessParentReadWaitObject()
lProcessResponse["ActivitySpecificationDict"]=lJSONInput
#Выполнить вызов функции
lProcessResponse["Result"]=JSONNormalize.JSONNormalizeDictList(locals()[lJSONInput['ActivityName']](*lJSONInput['ArgumentList'],**lJSONInput['ArgumentDict']))
lProcessResponse["Result"]=JSONNormalize.JSONNormalizeDictListStrInt(locals()[lJSONInput['ActivityName']](*lJSONInput['ArgumentList'],**lJSONInput['ArgumentDict']))
except Exception as e:
#Установить флаг ошибки
lProcessResponse["ErrorFlag"]=True

@ -65,5 +65,15 @@ def JSONNormalizeDictList(inDictList):
if type(inDictList) is list:
lResult=JSONNormalizeList(inDictList)
return lResult;
def JSONNormalizeDictListStrInt(inDictListStrInt):
lResult=None
if type(inDictListStrInt) is dict:
lResult=JSONNormalizeDict(inDictListStrInt)
if type(inDictListStrInt) is list:
lResult=JSONNormalizeList(inDictListStrInt)
if type(inDictListStrInt) is str:
lResult=inDictListStrInt
if type(inDictListStrInt) is int:
lResult=inDictListStrInt
return lResult;

@ -4,6 +4,7 @@ import zlib
import sys
import os
import JSONNormalize
import pdb
############################################
####Межпроцессное взаимодействие
############################################
@ -78,6 +79,7 @@ def ProcessChildSendString(lProcess,lString):
#ProcessChildReadWaitString
def ProcessChildReadWaitString(lProcess):
#Ожидаем ответ от процесса
#pdb.set_trace()
lResult = lProcess.stdout.readline()
#Обработка спец символов
#print(b'NewLine: '+lResult)

@ -9,6 +9,7 @@ import traceback
import logging
import sys
import datetime
import struct
#Создать файл логирования
# add filemode="w" to overwrite
if not os.path.exists("Reports"):
@ -61,8 +62,11 @@ logging.basicConfig(filename="Reports\ReportRobotRun_"+datetime.datetime.now().s
#Start childprocess - GUI Module 32 bit
mProcessGUI_x32 = subprocess.Popen(['..\\Resources\\WPy32-3720\\python-3.7.2\\python.exe','..\\Robot\\GUI.py','release'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#Start childprocess - GUI Module 64 bit - uncomment after WPy64 installation
#mProcessGUI_x64 = subprocess.Popen(['..\\Resources\\WPy64-3720\\python-3.7.2\\python.exe','GUI.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
lProcessBitnessStr = str(struct.calcsize("P") * 8)
#start 64 if system support 64
mProcessGUI_x64= None
if (struct.calcsize("P") * 8) == 64:
mProcessGUI_x64 = subprocess.Popen(['..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\python.exe','GUI.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
####################
#Section: Activity
@ -76,10 +80,23 @@ def ActivityRun(inActivitySpecificationDict):
if "ArgumentDict" not in inActivitySpecificationDict:
inActivitySpecificationDict["ArgumentDict"]={}
#TODO: Доделать определение разрядности (32 и 64)
######################################################
#Выполнить проверку разрядности через UIOSelector_Get_BitnessInt
#Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами
ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,inActivitySpecificationDict)
ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,{"ModuleName":"GUI","ActivityName":"UIOSelector_Get_BitnessInt","ArgumentList":inActivitySpecificationDict["ArgumentList"],"ArgumentDict":inActivitySpecificationDict["ArgumentDict"]})
#Получить ответ от дочернего процесса
lResponseObject=ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32)
#pdb.set_trace()
if lResponseObject["Result"]==64:
#Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами
ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x64,inActivitySpecificationDict)
#Получить ответ от дочернего процесса
lResponseObject=ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x64)
elif lResponseObject["Result"]==32:
#Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами
ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,inActivitySpecificationDict)
#Получить ответ от дочернего процесса
lResponseObject=ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32)
#Вернуть результат
#Остальные модули подключать и выполнять здесь
else:

@ -614,7 +614,7 @@
{
var lDataJSON=JSON.parse(lData)
$(".gui-code-list-run-result").html(lData)
///Показать ошибку, если таковая возникла
///Показать ошибку, если таковая возникл а
if (lDataJSON["ErrorFlag"]) {
mGlobal.ShowModal("GUI Error",lDataJSON.ErrorMessage+" \nTraceback: "+lDataJSON.ErrorTraceback);
}

Loading…
Cancel
Save