ZD добавить работу со свойствами элемента через C#

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
733
Благодарностей
485
Баллы
63
В окне "Свойства элемента", есть много полезной информации, к которой хотелось бы получить доступ. (Если уже такой есть, подскажите, как с ним работать)
122026

Нашел интерфейс public interface IAndroidElementAPI, куда они хорошо бы встали.
122027
 

Alex733

Client
Регистрация
27.11.2017
Сообщения
330
Благодарностей
243
Баллы
43
C#:
IAppiumDriverAPI driver = instance.DroidInstance.AppiumDriver;
var elem = driver.FindElementByXPath("//*");
return elem.GetAttribute("package");
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
733
Благодарностей
485
Баллы
63
C#:
IAppiumDriverAPI driver = instance.DroidInstance.AppiumDriver;
var elem = driver.FindElementByXPath("//*");
return elem.GetAttribute("package");
Да такое нашел, но это не совсем то, например через него нельзя получить атрибуты: center_x, center_y, width, height, index. Все это придется костылить и самому высчитывать, когда данные уже есть.

Еще было бы не плохо понять откуда эти атрибуты получаются, чтобы понимать, что я могу получить. Они точно берутся не из "Свойства элемента" и не из .DroidInstance.Hierarchy;

Хотя возможно и из .DroidInstance.Hierarchy; потому что все атрибуты парсятся, кроме index

Выдает ошибку:
122039
 
Последнее редактирование:

LaGir

Client
Регистрация
01.10.2015
Сообщения
227
Благодарностей
927
Баллы
93
Возможно, часть параметров не стали оформлять в API, чтобы не перегружать операции с элементами. Во всяком случае, судя по поведению в ZP, именно поэтому работа крайне сильно тормозилась в случаях, когда надо получать/проверять параметры сотен или тысяч элементов (т.е., возможно, поэтому для ZD было "облегчение", такое у меня предположение).
А так поддерживаю, набор свойств вроде есть, но довольно скудный и не совсем понятно, как те или иные вещи работают (а что-то как будто работает одним образом в одних приложениях, другим - в других). Но эти мысли тоже с поправкой на то, что я пока изучаю ZD и сравнительно недавно что-то пытаюсь с ним сделать.

Конкретно center_x, center_y, width, height, кстати, получаются из bounds, так что думаю в полноценных их свойствах смысла нет. Можно просто соорудить для себя пару методов расширения и использовать в тех случаях, когда они для чего-то нужны. Пример вычислений:
C#:
var matches = Regex.Matches(bounds, @"\[(\d+),(\d+)\]");
if (matches.Count == 2)
{
    // Координаты "углов" элемента
    int x1 = int.Parse(matches[0].Groups[1].Value);
    int y1 = int.Parse(matches[0].Groups[2].Value);
    int x2 = int.Parse(matches[1].Groups[1].Value);
    int y2 = int.Parse(matches[1].Groups[2].Value);
    // Ширина и высота
    int width = x2 - x1;
    int height = y2 - y1;
    project.SendInfoToLog("width: " + width);
    project.SendInfoToLog("height: " + height);
    // Центры по x и y
    int center_x = width / 2 + x1;
    int center_y = height / 2 + y1;
    project.SendInfoToLog("center_x: " + center_x);
    project.SendInfoToLog("center_y: " + center_y);
}
 
  • Спасибо
Реакции: Traff и Dmitriy Ka

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
733
Благодарностей
485
Баллы
63
Вопрос закрыт, своими силами и подсказками все что хотел - реализовал :-)
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)