#Studio_ОтображениеОшибокВезде #Studio_ИсправлениеОшибкиПеретиранияУровнейВложенности #Robot_СпецОбработкаGetProperties #Robot_Selector_ФильтрПоFriendlyClass_Name_ControlType

dev-linux
Ivan Maslov 5 years ago
parent b69f6fb18b
commit 061baeb4df

@ -12,6 +12,7 @@
var mGlobal={} var mGlobal={}
$(document) $(document)
.ready(function() { .ready(function() {
mGlobal.GUIElement={} mGlobal.GUIElement={}
mGlobal.GenerateUniqueID=function(inPrefix="ID") { mGlobal.GenerateUniqueID=function(inPrefix="ID") {
return inPrefix+Math.round(Math.random()*1000)+"-"+Math.round(Math.random()*10000)+"-"+Math.round(Math.random()*1000) return inPrefix+Math.round(Math.random()*1000)+"-"+Math.round(Math.random()*10000)+"-"+Math.round(Math.random()*1000)
@ -31,6 +32,39 @@
document.execCommand('copy'); document.execCommand('copy');
document.body.removeChild(el); document.body.removeChild(el);
}; };
///Функция клонирования объекта
mGlobal.iSysClone=function(obj,lIsCloneSubProperty,lSubItemCallback) {
///Выполнить инициализацию переменной, если она не была передана
if (typeof(lIsCloneSubProperty)=="undefined") {
lIsCloneSubProperty=true;
}
///Вернуть значение, если передан простой тип данных
if (null == obj || "object" != typeof obj) return obj;
///Выполнить инициализацию новой переменной
var copy = obj.constructor();
///Циклический обход по всем свойствам объекта
for (var attr in obj) {
///Исключить присваивание тех свойств, которые унаследованы от прототипа
if (obj.hasOwnProperty(attr)) {
///Проверить, является ли вложенное свойство объектом
if (typeof(obj[attr])=="object" && lIsCloneSubProperty) {
///Рекурсивный вызов клонирования дочернего элемента
copy[attr] = mGlobal.iSysClone(obj[attr],lIsCloneSubProperty);
} else {
///Клонируемое свойство не является объектом - выполнить копирование
copy[attr] = obj[attr];
}
///Вызов callback функции в которую передается текущий атрибут
if (typeof(lSubItemCallback)!="undefined") {
lSubItemCallback(copy[attr]);
}
}
}
///Вернуть результат функции клонирования
return copy;
}
///Функция запуска поиска по окну ///Функция запуска поиска по окну
mGlobal.Actions.fAutomationSearchMouseElementHierarchyRun= function(inElementId) mGlobal.Actions.fAutomationSearchMouseElementHierarchyRun= function(inElementId)
{ {
@ -69,6 +103,9 @@
mGlobal.ElementTree.fClear(); mGlobal.ElementTree.fClear();
///Прогрузить новое дерево ///Прогрузить новое дерево
mGlobal.ElementTree.fRender(lStructureToRender); mGlobal.ElementTree.fRender(lStructureToRender);
if (lResponseJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lResponseJSON.Error);
}
}, },
dataType: "text" dataType: "text"
}); });
@ -193,6 +230,10 @@
} }
lHTMLTree+='</div>' lHTMLTree+='</div>'
$("#"+inElementId+" .content").append(lHTMLTree) $("#"+inElementId+" .content").append(lHTMLTree)
///Отображение ошибки
if (lResponseJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lResponseJSON.Error);
}
}, },
dataType: "text" dataType: "text"
}); });
@ -221,9 +262,10 @@
$(".rpa-object-tree .item").css("background-color",""); $(".rpa-object-tree .item").css("background-color","");
$("#"+inElementId).css("background-color","RGB(128,128,128)"); $("#"+inElementId).css("background-color","RGB(128,128,128)");
///Создать урезанную версию селектора ///Создать урезанную версию селектора
lTextAreaSpecificationArray=Array.from(lSpecificationArray); lTextAreaSpecificationArray=mGlobal.iSysClone(lSpecificationArray,true);
for (var i = 0; i< lTextAreaSpecificationArray.length; i++) { for (var i = 0; i< lTextAreaSpecificationArray.length; i++) {
Object.assign(lTextAreaSpecificationArray[i],lTextAreaSpecificationArray[i]); //lTextAreaSpecificationArray[i]=mGlobal.iSysClone(lTextAreaSpecificationArray[i],true)
//Object.assign(lTextAreaSpecificationArray[i],lTextAreaSpecificationArray[i]);
///Очистить ненужные ключи для выборки ///Очистить ненужные ключи для выборки
delete lTextAreaSpecificationArray[i]['rich_text'] delete lTextAreaSpecificationArray[i]['rich_text']
delete lTextAreaSpecificationArray[i]['process_id'] delete lTextAreaSpecificationArray[i]['process_id']
@ -253,21 +295,26 @@
function(lData,l2,l3) function(lData,l2,l3)
{ {
var lHTMLList='<div class="ui relaxed divided list">' var lHTMLList='<div class="ui relaxed divided list">'
var lJSONData = JSON.parse(lData).outputObject var lResponseJSON = JSON.parse(lData)
var lSpecificationArray=Object.keys(lJSONData) ///Ошибка
for (i=0;i<lSpecificationArray.length;i++) { if (lResponseJSON.hasOwnProperty("Error")) {
var lItemKey = lSpecificationArray[i] mGlobal.ShowModal("GUI Error",lResponseJSON.Error);
var lItemValue = lJSONData[lItemKey] } else {
lHTMLList+='\ var lJSONData = JSON.parse(lData).outputObject
<div class="item">\ var lSpecificationArray=Object.keys(lJSONData)
<div class="content">\ for (i=0;i<lSpecificationArray.length;i++) {
<div class="description"><p style="word-wrap: break-word;"><b> '+lItemKey+':</b> '+JSON.stringify(lItemValue)+'</p></div>\ var lItemKey = lSpecificationArray[i]
</div>\ var lItemValue = lJSONData[lItemKey]
</div>' lHTMLList+='\
} <div class="item">\
lHTMLList+='</div>' <div class="content">\
$(".rpa-property-list").html(lHTMLList) <div class="description"><p style="word-wrap: break-word;"><b> '+lItemKey+':</b> '+JSON.stringify(lItemValue)+'</p></div>\
</div>\
</div>'
}
lHTMLList+='</div>'
$(".rpa-property-list").html(lHTMLList)
}
}, },
dataType: "text" dataType: "text"
}); });
@ -282,6 +329,11 @@
function(lData,l2,l3) function(lData,l2,l3)
{ {
console.log('Success handle:'+inHandleId) console.log('Success handle:'+inHandleId)
var lResponseJSON = JSON.parse(lData)
///Ошибка
if (lResponseJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lResponseJSON.Error);
}
}, },
dataType: "text" dataType: "text"
}); });
@ -298,6 +350,7 @@
function(lData,l2,l3) function(lData,l2,l3)
{ {
lDataJSON=JSON.parse(lData); lDataJSON=JSON.parse(lData);
///Показать ошибку, если таковая возникла
if (lDataJSON.hasOwnProperty("Error")) { if (lDataJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lDataJSON.Error); mGlobal.ShowModal("GUI Error",lDataJSON.Error);
} }
@ -364,7 +417,7 @@
function(lData,l2,l3) function(lData,l2,l3)
{ {
//lDataJSON=JSON.parse(lData.outputObject); //lDataJSON=JSON.parse(lData.outputObject);
lDataJSON=JSON.parse(lData) var lDataJSON=JSON.parse(lData)
var lDataKeyList=lDataJSON.outputObject var lDataKeyList=lDataJSON.outputObject
var lValueList=[] var lValueList=[]
for (var i = 0; i< lDataKeyList.length;i++) { for (var i = 0; i< lDataKeyList.length;i++) {
@ -378,6 +431,10 @@
values: lValueList values: lValueList
}) })
; ;
///Показать ошибку, если таковая возникла
if (lDataJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lDataJSON.Error);
}
}, },
dataType: "text" dataType: "text"
}); });
@ -408,6 +465,10 @@
values: lValueList values: lValueList
}) })
; ;
///Показать ошибку, если таковая возникла
if (lDataJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lDataJSON.Error);
}
}, },
dataType: "text" dataType: "text"
}); });
@ -461,9 +522,12 @@
success: success:
function(lData,l2,l3) function(lData,l2,l3)
{ {
lDataJSON=JSON.parse(lData) var lDataJSON=JSON.parse(lData)
$(".gui-code-list-run-result").html(lDataJSON.outputObject) $(".gui-code-list-run-result").html(lDataJSON.outputObject)
///Показать ошибку, если таковая возникла
if (lDataJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lDataJSON.Error);
}
}, },
dataType: "text" dataType: "text"
}); });
@ -502,9 +566,12 @@
success: success:
function(lData,l2,l3) function(lData,l2,l3)
{ {
lDataJSON=JSON.parse(lData) var lDataJSON=JSON.parse(lData)
$(".gui-result").html(lDataJSON.outputObject) $(".gui-result").html(lDataJSON.outputObject)
///Показать ошибку, если таковая возникла
if (lDataJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lDataJSON.Error);
}
}, },
dataType: "text" dataType: "text"
}); });
@ -545,6 +612,10 @@
mGlobal.ElementTree.fClear(); mGlobal.ElementTree.fClear();
///Прогрузить новое дерево ///Прогрузить новое дерево
mGlobal.ElementTree.fRender(lResponseJSON.outputObject); mGlobal.ElementTree.fRender(lResponseJSON.outputObject);
///Показать ошибку, если таковая возникла
if (lResponseJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lResponseJSON.Error);
}
}, },
dataType: "text" dataType: "text"
}); });

@ -259,6 +259,14 @@ def PywinautoExtElementsGet (inSpecificationList,inElement=None):
if 'class_name' in inSpecificationList[0]: if 'class_name' in inSpecificationList[0]:
if lChildrenItem.element_info.class_name != inSpecificationList[0]["class_name"]: if lChildrenItem.element_info.class_name != inSpecificationList[0]["class_name"]:
lFlagAddChild=False lFlagAddChild=False
#Фильтрация по friendly_class_name
if 'friendly_class_name' in inSpecificationList[0]:
if lChildrenItem.friendly_class_name() != inSpecificationList[0]["friendly_class_name"]:
lFlagAddChild=False
#Фильтрация по control_type
if 'control_type' in inSpecificationList[0]:
if lChildrenItem.element_info.control_type != inSpecificationList[0]["control_type"]:
lFlagAddChild=False
##### #####
#Все проверки пройдены - флаг добавления #Все проверки пройдены - флаг добавления
if lFlagAddChild: if lFlagAddChild:
@ -459,7 +467,23 @@ def ElementRunAction(inControlSpecificationArray,inActionName,inArgumentList=[],
#Получить метод для вызова #Получить метод для вызова
lFunction = getattr(lObject, inActionName) lFunction = getattr(lObject, inActionName)
#Выполнить действие #Выполнить действие
return lFunction(*inArgumentList,**inkwArgumentObject) #Обернуто в безопасную обработку, тк для некоторых объектов метод не работает и может выдавать ошибку типа: NotImplementedError: This method not work properly for WinForms DataGrid, use cells()
try:
return lFunction(*inArgumentList,**inkwArgumentObject)
except Exception as e:
#Если ошибка возникла на action get_properties
if inActionName=="get_properties":
lResult={}
#Ручное формирование
lResult["class_name"]=lObject.class_name()
lResult["friendly_class_name"]=lObject.friendly_class_name()
lResult["texts"]=lObject.texts()
lResult["control_id"]=lObject.control_id()
lResult["control_count"]=lObject.control_count()
lResult["automation_id"]=lObject.automation_id()
return lResult
else:
raise e
def ElementGetInfo(inControlSpecificationArray): def ElementGetInfo(inControlSpecificationArray):
#Подготовка входного массива #Подготовка входного массива
@ -1100,6 +1124,12 @@ lText = "Bitness:" + str(struct.calcsize("P") * 8)
buffer = "" buffer = ""
lJSONInputString="" lJSONInputString=""
#Алгоритм включения debug режима (если передано ключевое слово debug как параметр)
#Если есть хотя бы один параметр (sys.argv[1+])
if len(sys.argv) > 1:
if sys.argv[1] == "debug":
mFlagIsDebug=True
#Выполнить чтение буфера, если не отладка библиотеки #Выполнить чтение буфера, если не отладка библиотеки
if not mFlagIsDebug: if not mFlagIsDebug:
#{'functionName':'', 'argsArray':[]} #{'functionName':'', 'argsArray':[]}

Loading…
Cancel
Save