From 633c1d2e3717fe6c64866335fc08c2bc7f4f43f6 Mon Sep 17 00:00:00 2001 From: Ivan Maslov Date: Mon, 3 Jun 2019 23:27:13 +0300 Subject: [PATCH] #Robot_OSBitness #Robot_32_64_Fix --- Robot/GUI.py | 10 +++++++++- Robot/Robot.py | 41 +++++++++++++++++++++++++++++------------ Studio/StudioRun_64.cmd | 3 +++ 3 files changed, 41 insertions(+), 13 deletions(-) create mode 100644 Studio/StudioRun_64.cmd diff --git a/Robot/GUI.py b/Robot/GUI.py index 0d6942ed..47b49615 100644 --- a/Robot/GUI.py +++ b/Robot/GUI.py @@ -213,7 +213,15 @@ def UIOSelector_Get_BitnessInt (inSpecificationList): else: lResult=32 return lResult - +################################################################################################# +#Get OS bitness (32 or 64) +#old name - None +#return int 32, or int 64 +def Get_OSBitnessInt (): + lResult=32; + if pywinauto.sysinfo.is_x64_OS(): + lResult=64; + return lResult; ################################################################################################## #inControlSpecificationArray - List of dict, dict in pywinauto.find_windows notation #Backend selection - attribute "backend" ("win32" || "uia") in 1-st list element diff --git a/Robot/Robot.py b/Robot/Robot.py index 159b0f35..076d0786 100644 --- a/Robot/Robot.py +++ b/Robot/Robot.py @@ -62,11 +62,14 @@ 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 +ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,{"ModuleName":"GUI","ActivityName":"Get_OSBitnessInt","ArgumentList":[],"ArgumentDict":{}}) +lOSBitness = ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32)["Result"] + 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) +if lOSBitness == 64: + mProcessGUI_x64 = subprocess.Popen(['..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\python.exe','..\\Robot\\GUI.py','release'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) #################### #Section: Activity @@ -79,25 +82,39 @@ def ActivityRun(inActivitySpecificationDict): inActivitySpecificationDict["ArgumentList"]=[] if "ArgumentDict" not in inActivitySpecificationDict: inActivitySpecificationDict["ArgumentDict"]={} - #TODO: Доделать определение разрядности (32 и 64) - ###################################################### - #Выполнить проверку разрядности через UIOSelector_Get_BitnessInt - #Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами - ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,{"ModuleName":"GUI","ActivityName":"UIOSelector_Get_BitnessInt","ArgumentList":inActivitySpecificationDict["ArgumentList"],"ArgumentDict":inActivitySpecificationDict["ArgumentDict"]}) - #Получить ответ от дочернего процесса - lResponseObject=ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32) + + #Если mProcessGUI_x64 не инициализирован + lFlagRun64=True + if mProcessGUI_x64 is None: + lFlagRun64=False + else: + if inActivitySpecificationDict["ActivityName"].startswith("UIOSelector") or inActivitySpecificationDict["ActivityName"].startswith("PWASpecification"): + if len(inActivitySpecificationDict["ArgumentList"])>0: + if len(inActivitySpecificationDict["ArgumentList"][0])>0: + #Определение разрядности (32 и 64) для тех функций, где это необходимо + ###################################################### + #Выполнить проверку разрядности через UIOSelector_Get_BitnessInt + #Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами + ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,{"ModuleName":"GUI","ActivityName":"UIOSelector_Get_BitnessInt","ArgumentList":[inActivitySpecificationDict["ArgumentList"][0]],"ArgumentDict":inActivitySpecificationDict["ArgumentDict"]}) + #Получить ответ от дочернего процесса + lResponseObject=ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32) + #pdb.set_trace() + if lResponseObject["Result"]==32: + lFlagRun64=False + #Запуск 64 #pdb.set_trace() - if lResponseObject["Result"]==64: + if lFlagRun64: #Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x64,inActivitySpecificationDict) #Получить ответ от дочернего процесса lResponseObject=ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x64) - elif lResponseObject["Result"]==32: + else: + #Запуск 32 #Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,inActivitySpecificationDict) #Получить ответ от дочернего процесса lResponseObject=ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32) - #Вернуть результат + #Остальные модули подключать и выполнять здесь else: lArgumentList=[] diff --git a/Studio/StudioRun_64.cmd b/Studio/StudioRun_64.cmd new file mode 100644 index 00000000..701d1387 --- /dev/null +++ b/Studio/StudioRun_64.cmd @@ -0,0 +1,3 @@ +cd %~dp0 +.\..\Resources\WPy64-3720\python-3.7.2.amd64\python.exe Studio.py +pause >nul \ No newline at end of file