#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={}
$(document)
.ready(function() {
mGlobal.GUIElement={}
mGlobal.GenerateUniqueID=function(inPrefix="ID") {
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.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)
{
@ -69,6 +103,9 @@
mGlobal.ElementTree.fClear();
///Прогрузить новое дерево
mGlobal.ElementTree.fRender(lStructureToRender);
if (lResponseJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lResponseJSON.Error);
}
},
dataType: "text"
});
@ -193,6 +230,10 @@
}
lHTMLTree+='</div>'
$("#"+inElementId+" .content").append(lHTMLTree)
///Отображение ошибки
if (lResponseJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lResponseJSON.Error);
}
},
dataType: "text"
});
@ -221,9 +262,10 @@
$(".rpa-object-tree .item").css("background-color","");
$("#"+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++) {
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]['process_id']
@ -253,21 +295,26 @@
function(lData,l2,l3)
{
var lHTMLList='<div class="ui relaxed divided list">'
var lJSONData = JSON.parse(lData).outputObject
var lSpecificationArray=Object.keys(lJSONData)
for (i=0;i<lSpecificationArray.length;i++) {
var lItemKey = lSpecificationArray[i]
var lItemValue = lJSONData[lItemKey]
lHTMLList+='\
<div class="item">\
<div class="content">\
<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)
var lResponseJSON = JSON.parse(lData)
///Ошибка
if (lResponseJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lResponseJSON.Error);
} else {
var lJSONData = JSON.parse(lData).outputObject
var lSpecificationArray=Object.keys(lJSONData)
for (i=0;i<lSpecificationArray.length;i++) {
var lItemKey = lSpecificationArray[i]
var lItemValue = lJSONData[lItemKey]
lHTMLList+='\
<div class="item">\
<div class="content">\
<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"
});
@ -282,6 +329,11 @@
function(lData,l2,l3)
{
console.log('Success handle:'+inHandleId)
var lResponseJSON = JSON.parse(lData)
///Ошибка
if (lResponseJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lResponseJSON.Error);
}
},
dataType: "text"
});
@ -298,6 +350,7 @@
function(lData,l2,l3)
{
lDataJSON=JSON.parse(lData);
///Показать ошибку, если таковая возникла
if (lDataJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lDataJSON.Error);
}
@ -364,7 +417,7 @@
function(lData,l2,l3)
{
//lDataJSON=JSON.parse(lData.outputObject);
lDataJSON=JSON.parse(lData)
var lDataJSON=JSON.parse(lData)
var lDataKeyList=lDataJSON.outputObject
var lValueList=[]
for (var i = 0; i< lDataKeyList.length;i++) {
@ -378,6 +431,10 @@
values: lValueList
})
;
///Показать ошибку, если таковая возникла
if (lDataJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lDataJSON.Error);
}
},
dataType: "text"
});
@ -408,6 +465,10 @@
values: lValueList
})
;
///Показать ошибку, если таковая возникла
if (lDataJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lDataJSON.Error);
}
},
dataType: "text"
});
@ -461,9 +522,12 @@
success:
function(lData,l2,l3)
{
lDataJSON=JSON.parse(lData)
var lDataJSON=JSON.parse(lData)
$(".gui-code-list-run-result").html(lDataJSON.outputObject)
///Показать ошибку, если таковая возникла
if (lDataJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lDataJSON.Error);
}
},
dataType: "text"
});
@ -502,9 +566,12 @@
success:
function(lData,l2,l3)
{
lDataJSON=JSON.parse(lData)
var lDataJSON=JSON.parse(lData)
$(".gui-result").html(lDataJSON.outputObject)
///Показать ошибку, если таковая возникла
if (lDataJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lDataJSON.Error);
}
},
dataType: "text"
});
@ -545,6 +612,10 @@
mGlobal.ElementTree.fClear();
///Прогрузить новое дерево
mGlobal.ElementTree.fRender(lResponseJSON.outputObject);
///Показать ошибку, если таковая возникла
if (lResponseJSON.hasOwnProperty("Error")) {
mGlobal.ShowModal("GUI Error",lResponseJSON.Error);
}
},
dataType: "text"
});

@ -259,6 +259,14 @@ def PywinautoExtElementsGet (inSpecificationList,inElement=None):
if 'class_name' in inSpecificationList[0]:
if lChildrenItem.element_info.class_name != inSpecificationList[0]["class_name"]:
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:
@ -459,7 +467,23 @@ def ElementRunAction(inControlSpecificationArray,inActionName,inArgumentList=[],
#Получить метод для вызова
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):
#Подготовка входного массива
@ -1100,6 +1124,12 @@ lText = "Bitness:" + str(struct.calcsize("P") * 8)
buffer = ""
lJSONInputString=""
#Алгоритм включения debug режима (если передано ключевое слово debug как параметр)
#Если есть хотя бы один параметр (sys.argv[1+])
if len(sys.argv) > 1:
if sys.argv[1] == "debug":
mFlagIsDebug=True
#Выполнить чтение буфера, если не отладка библиотеки
if not mFlagIsDebug:
#{'functionName':'', 'argsArray':[]}

Loading…
Cancel
Save