diff --git a/Robot/Clipboard.py b/Robot/Clipboard.py index d081e55c..12b43186 100644 --- a/Robot/Clipboard.py +++ b/Robot/Clipboard.py @@ -9,7 +9,7 @@ import win32clipboard ################ def ClipboardGet(): win32clipboard.OpenClipboard() - lResult = win32clipboard.GetClipboardData() + lResult = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT) win32clipboard.CloseClipboard() return lResult ################ @@ -18,5 +18,5 @@ def ClipboardGet(): def ClipboardSet(inText): win32clipboard.OpenClipboard() win32clipboard.EmptyClipboard() - win32clipboard.SetClipboardText(inText) + win32clipboard.SetClipboardData(win32clipboard.CF_UNICODETEXT,inText) win32clipboard.CloseClipboard() diff --git a/Robot/Examples/PythonDebug_32_ScriptTestGUI.cmd b/Robot/Examples/PythonDebug_32_ScriptTestGUI.cmd new file mode 100644 index 00000000..1de6dbbf --- /dev/null +++ b/Robot/Examples/PythonDebug_32_ScriptTestGUI.cmd @@ -0,0 +1,3 @@ +cd %~dp0 +.\..\..\Resources\WPy32-3720\python-3.7.2\python.exe ScriptTestGUI.py +pause >nul \ No newline at end of file diff --git a/Robot/Examples/ScriptTestGUI.py b/Robot/Examples/ScriptTestGUI.py new file mode 100644 index 00000000..ba554883 --- /dev/null +++ b/Robot/Examples/ScriptTestGUI.py @@ -0,0 +1,15 @@ +import sys +sys.path.append('../') +import GUI +import keyboard +import time +lI=0 +lResult=GUI.UIOSelectorsSecs_WaitDisappear_List( + [ + [{"title":"PuTTY Configuration","class_name":"PuTTYConfigBox","backend":"uia"},{"ctrl_index":20},{"ctrl_index":2}], + [{"title":"OpenRPA","class_name":"CabinetWClass","backend":"uia"},{"ctrl_index":2},{"ctrl_index":0},{"ctrl_index":2},{"ctrl_index":0},{"ctrl_index":7},{"ctrl_index":2}] + ], + 60, + True +) +print(lResult) \ No newline at end of file diff --git a/Robot/GUI.py b/Robot/GUI.py index 385fd4f9..8b6c70c0 100644 --- a/Robot/GUI.py +++ b/Robot/GUI.py @@ -23,7 +23,20 @@ import copy # add filemode="w" to overwrite if not os.path.exists("Reports"): os.makedirs("Reports") -logging.basicConfig(filename="Reports\ReportRobotGUIRun_"+datetime.datetime.now().strftime("%Y_%m_%d")+".log", level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s") +########################## +#Подготовка логгера Robot +######################### +mRobotLogger=logging.getLogger("RobotLogger") +mRobotLogger.setLevel(logging.INFO) +# create the logging file handler +mRobotLoggerFH = logging.FileHandler("Reports\ReportRobotGUIRun_"+datetime.datetime.now().strftime("%Y_%m_%d")+".log") +mRobotLoggerFormatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') +mRobotLoggerFH.setFormatter(mRobotLoggerFormatter) +# add handler to logger object +mRobotLogger.addHandler(mRobotLoggerFH) + + +#logging.basicConfig(filename="Reports\ReportRobotGUIRun_"+datetime.datetime.now().strftime("%Y_%m_%d")+".log", level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s") #####Внимание####### #TODO В перспективе нужно реализовать алгоритм определения разрядности не в Robot.py, а в GUI.py, тк начинают появляться функции, на входе в которые еще неизвестна разрядность элемента + селектор может охватить сразу два элемента из 2-х разных разрядностей - обрабатываться это должно непосредственно при выполнении @@ -105,6 +118,8 @@ mDefaultPywinautoBackend="win32" #inFlagRaiseException - Флаг True - выкинуть ошибку в случае обнаружении пустого списка #old name - PywinautoExtElementsGet def UIOSelector_Get_UIOList (inSpecificationList,inElement=None,inFlagRaiseException=True): + #Создать копию входного листа, чтобы не менять массив в других верхнеуровневых функциях + inSpecificationList=copy.deepcopy(inSpecificationList) lResultList=[] lChildrenList=[] #Получить родительский объект если на вход ничего не поступило @@ -125,14 +140,16 @@ def UIOSelector_Get_UIOList (inSpecificationList,inElement=None,inFlagRaiseExcep #Получить дочерний элемент - точное добавление lChildrenList.append(lElementChildrenList[inSpecificationList[0]['index']]) else: - raise ValueError('Object has no children with index: ' + str(inSpecificationList[0]['index'])) + 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']0: + #Условие выполнено + lResultFlag=True + #Если флаг не изменился - увеличить время и уснуть + if lResultFlag == False: + lSecsDone=lSecsDone+lSecsSleep + time.sleep(lSecsSleep) + return lResultList +################################################################################################# #Wait for UIO is appear (at least one of them or all at the same time) #inSpecificationList - UIOSelector #inWaitSecs - Время ожидания объекта в секундах @@ -292,6 +349,18 @@ def UIOSelectorSecs_WaitAppear_Bool (inSpecificationList,inWaitSecs): lResult=True return lResult ################################################################################################# +#Wait for UIO is disappear (at least one of them or all at the same time) +#inSpecificationList - UIOSelector +#inWaitSecs - Время ожидания пропажи объекта в секундах +#return: Bool - True - UIO is Disappear +#old name - - +def UIOSelectorSecs_WaitDisappear_Bool (inSpecificationList,inWaitSecs): + lWaitDisappearList=UIOSelectorsSecs_WaitDisappear_List([inSpecificationList],inWaitSecs) + lResult=False + if len(lWaitDisappearList)>0: + lResult=True + return lResult +################################################################################################# #Get process bitness (32 or 64) #inSpecificationList - UIOSelector #old name - None @@ -546,6 +615,9 @@ def UIOSelector_IsExist_Bool (inSpecificationList): #inSpecificationList - UIOSelector #result - { } #old name - PywinautoExtElementWaitAppear +############# +#Внимание! Старая функция (на замену ей пришла UIOSelectorSecs_WaitAppear_Bool) +############# def UIOSelector_WaitAppear_Dict(inSpecificationList,inTimeout=60): lTimeoutSeconds = 0 while (not UIOSelector_IsExist_Bool(inSpecificationList) and inTimeout>lTimeoutSeconds): @@ -1084,10 +1156,10 @@ if (len(sys.argv)>=2): mFlagIsDebug=False #Оповещение о выбранном режиме if mFlagIsDebug: - logging.info("Robot/GUI: Debug mode, x"+lProcessBitnessStr) + mRobotLogger.info("Robot/GUI: Debug mode, x"+lProcessBitnessStr) print ("Robot/GUI: Debug mode, x"+lProcessBitnessStr) else: - logging.info("Robot/GUI: Release mode, x"+lProcessBitnessStr) + mRobotLogger.info("Robot/GUI: Release mode, x"+lProcessBitnessStr) #Нельзя делать print в release mode тк print делает вывод в PIPE поток, что нарушает последовательность взаимодействия с родительским процессом #print ("Robot/GUI: Release mode, x"+lProcessBitnessStr) #for line in sys.stdin: diff --git a/Studio/Web/Index.xhtml b/Studio/Web/Index.xhtml index 93100806..82974825 100644 --- a/Studio/Web/Index.xhtml +++ b/Studio/Web/Index.xhtml @@ -763,7 +763,7 @@

OpenRPA

-
by UnicodeLabs
+
by UnicodeLabs
@@ -891,7 +891,7 @@