Проверка на десятки признаков в ZennoDroid Enterprise за пару секунд

Регистрация
23.12.2014
Сообщения
639
Благодарностей
196
Баллы
43
Zennodroid Enterprise пользуюсь с первых дней публикации и создавал много шаблонов под свои нужды, по сути основная логика шаблонов - это поиск совпадения на экране , а именно текстовая проверка , получить координаты, получить ширину и/или высоту , клик, получить данные все это каждый раз или по несколько раз обращаюсь к XML структуре , а это вне зависимости от модели телефона занимает не малое время.
Раньше мои проверки выглядели +- вот так
115701


Теория

В первую очередь приступил к вторичным проверкам из серии ошибка приложения, раскрыта шторка, смс , всплывашки от операторов, будильник, PlayMarket , нет интернета, пуш уведомления, запрос геолокации , капча и тд и все они могут вклинится во время работы иных шаблонов и нарушить всю логику работы шаблонов.

Было принято решение реализовать универсальную проверку, Но стандартными методами разрастались шаблоны и очень большие задержки были и было принято решение попробывать сократить время исполнения шаблона без ущерба для стабильности и естественно не обошлось без советов из участников нашего форума.

Первая реализация

Выстроил логику
1) Получил структуру XML
2) Положил содержимое в список
3) Чекаю по очереди все признаки (не только текст)
4) Если совпадение на вторичные признаки то сразу на решение
Сейчас выглядит вот так
115702

Практика

Практически во всех моих шаблонах используется эта универсальная проверка и на этом же принципе реализован чуть более усложненный вариант уже под логику шаблонов используя белый и черный список .

1) Получил xml
2) Записал в список
3) Поиск по признакам (не только текст)
4) При совпадении получаю координаты x1,y1,x2,y2 помог @xDIXIx

Далее использую обработанные данные для последующих действий.

Приложил простейший пример реализации на 23 самые необходимые на мой взгляд проверки, на выходе или решение (закрытие или свайп) и/или совпадение в переменной, все это отрабатывает за 1-2 секунды.
 
Тема статьи
Другое
Номер конкурса статей
Двадцатый конкурс статей

Вложения

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование:

radv

Client
Регистрация
11.05.2015
Сообщения
3 786
Благодарностей
1 951
Баллы
113
Приложил простейший пример реализации на 23 самые необходимые на мой взгляд проверки, на выходе или решение (закрытие или свайп) и/или совпадение в переменной, все это отрабатывает за 1-2 секунды.
А можете сделать скриншоты или описания каждой проверки, чтобы их не только в файле проекта их можно было посмотреть?
 
Регистрация
23.12.2014
Сообщения
639
Благодарностей
196
Баллы
43
А можете сделать скриншоты или описания каждой проверки, чтобы их не только в файле проекта их можно было посмотреть?
1-2 проверка шторки и закрытие их
3-5 ошибка приложения и приложение не отвечает (выводит в переменную)
6-12 проверка на плеймаркет и закрытие его
13 проверка на плеер и закрытие
14 проверка на камеру и закрытие
15-16 проверка на главную телефона (выводит в переменную)
17 проверка на плеер и закрытие
18 проверка на часы/будильник и закрытие
19 проверка на обновления (приложение Яндекс на пол экрана)
20 проверка на поделиться и закрытие
21 проверка на активную строку браузера и закрытие
22 -23 проверка на контакты (нечаяно нажали на номер телефона) и закрытие
По сути добавить можно любой признак и последующее действие
 
  • Спасибо
Реакции: radv

Dgo

Новичок
Регистрация
24.08.2022
Сообщения
17
Благодарностей
2
Баллы
3
Еще можно это все в 1 кубик c# положить и будет всего лишь 1 кубик
 
  • Спасибо
Реакции: Dmitriy Ka
Регистрация
23.12.2014
Сообщения
639
Благодарностей
196
Баллы
43

myndeswx

Client
Регистрация
15.05.2017
Сообщения
436
Благодарностей
104
Баллы
43
Nice! After using ZD for a while I realized to use the same method, just get the XML once and regex the contents to see what state is it in. It is also important to check the 'bounds' because the element can be on the XML but not visible on the screen (need to scroll if you need to click it).
 
  • Спасибо
Реакции: Мамикон

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
730
Благодарностей
479
Баллы
63
Открывал хоть шаблон в Enterprise?
Вообще он прав, а что в Enterprise шаблон будет как-то по другому работать?

Идея прикольная, только ее можно сделать чуть лучше и уйти от работы со списком (пробегаться по списку строк XML ну такое себе, если взять во внимание, что там будет куча ненужных строк, а мы их все проверяем на Contains)

Если мы работаем на С#, то у нас есть такой интерфейс: instance.DroidInstance.AppiumDriver;
Он имеет методы, которые позволяют находить элементы и если элемент не найден возвращает null.

Можно сделать что-то типа такого:

C#:
var driver = instance.DroidInstance.AppiumDriver;
var text = project.Variables["poisk"].Value; // poisk - переменная из шаблона
var element = driver.FindElementByXPath($"//*[@text=\"{text}\"]");
if (element == null)
    throw new Exception("Not found: " + text);
Если элемент будет найден выйдем по зеленой, если нет, по красной.
 
  • Спасибо
Реакции: Dgo
Регистрация
23.12.2014
Сообщения
639
Благодарностей
196
Баллы
43
Вообще он прав, а что в Enterprise шаблон будет как-то по другому работать?

Идея прикольная, только ее можно сделать чуть лучше и уйти от работы со списком (пробегаться по списку строк XML ну такое себе, если взять во внимание, что там будет куча ненужных строк, а мы их все проверяем на Contains)

Если мы работаем на С#, то у нас есть такой интерфейс: instance.DroidInstance.AppiumDriver;
Он имеет методы, которые позволяют находить элементы и если элемент не найден возвращает null.

Можно сделать что-то типа такого:

C#:
var driver = instance.DroidInstance.AppiumDriver;
var text = project.Variables["poisk"].Value; // poisk - переменная из шаблона
var element = driver.FindElementByXPath($"//*[@text=\"{text}\"]");
if (element == null)
    throw new Exception("Not found: " + text);
Если элемент будет найден выйдем по зеленой, если нет, по красной.
Повторюсь шаблон хоть открывали?
Ну ХЗ ...... сколько раз по "Вашему сценарию" надо будет обращаться к телефону для 20 проверок? 20?:bi: а в Этом сценарии всего 1 :ah:
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
730
Благодарностей
479
Баллы
63
Повторюсь шаблон хоть открывали?
Конечно открывал, поэтому и говорю работа с XML через списки сомнительное решение.


Ну ХЗ ...... сколько раз по "Вашему сценарию" надо будет обращаться к телефону для 20 проверок? 20?:bi: а в Этом сценарии всего 1 :ah:
Я точно не знаю, как разработчики реализовали методы FindElement, но я думаю что данные методы не обращается к телефону, а работает напрямую с XML, то есть так же один раз обращаемся к телефону получаем XML и работаем с ней через xPath, как крутые ребята :-)

Ну и если душнить, то зачем мы возвращаем -1 и следующим кубиком делаем проверку на это значение, если мы можем сразу в C# уйти по красной ветке.
122300
 
  • Спасибо
Реакции: Dgo
Регистрация
23.12.2014
Сообщения
639
Благодарностей
196
Баллы
43
Конечно открывал, поэтому и говорю работа с XML через списки сомнительное решение.



Я точно не знаю, как разработчики реализовали методы FindElement, но я думаю что данные методы не обращается к телефону, а работает напрямую с XML, то есть так же один раз обращаемся к телефону получаем XML и работаем с ней через xPath, как крутые ребята :-)

Ну и если душнить, то зачем мы возвращаем -1 и следующим кубиком делаем проверку на это значение, если мы можем сразу в C# уйти по красной ветке.
Номер строки можно и нужно использовать для дальнейшей обработки (взять строку под номером N , получить оттуда координаты и прочие данные )

Душнить точно не надо, но вот параллельно с к критикой было бы справедливо условно доработать этот шаблон в выложить на форум, иначе это все просто условное повышение самооценки .
 
Регистрация
23.12.2014
Сообщения
639
Благодарностей
196
Баллы
43

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
730
Благодарностей
479
Баллы
63
Номер строки можно и нужно использовать для дальнейшей обработки (взять строку под номером N , получить оттуда координаты и прочие данные )
Но в вашем шаблоне это не используется. Открою секрет, через методы FindElement(), мы тоже можем получить координаты и прочие данные.

Душнить точно не надо, но вот параллельно с к критикой было бы справедливо условно доработать этот шаблон в выложить на форум, иначе это все просто условное повышение самооценки.
Это и было сделано:
Вообще он прав, а что в Enterprise шаблон будет как-то по другому работать?

Идея прикольная, только ее можно сделать чуть лучше и уйти от работы со списком (пробегаться по списку строк XML ну такое себе, если взять во внимание, что там будет куча ненужных строк, а мы их все проверяем на Contains)

Если мы работаем на С#, то у нас есть такой интерфейс: instance.DroidInstance.AppiumDriver;
Он имеет методы, которые позволяют находить элементы и если элемент не найден возвращает null.

Можно сделать что-то типа такого:

C#:
var driver = instance.DroidInstance.AppiumDriver;
var text = project.Variables["poisk"].Value; // poisk - переменная из шаблона
var element = driver.FindElementByXPath($"//*[@text=\"{text}\"]");
if (element == null)
    throw new Exception("Not found: " + text);
Если элемент будет найден выйдем по зеленой, если нет, по красной.

Каждый раз обращается к телефону
Откуда такая уверенность? :-)
Метод работает с XML, который уже подгружен в instance, зачем ему обращаться к телефону?


Спорить больше не вижу смысла, идея хорошая, реализация сомнительная. Возьму себе на вооружение, но только перепишу под себя, без листов:D
 
Регистрация
23.12.2014
Сообщения
639
Благодарностей
196
Баллы
43
Но в вашем шаблоне это не используется. Открою секрет, через методы FindElement(), мы тоже можем получить координаты и прочие данные.


Это и было сделано:


Откуда такая уверенность? :-)
Метод работает с XML, который уже подгружен в instance, зачем ему обращаться к телефону?


Спорить больше не вижу смысла, идея хорошая, реализация сомнительная. Возьму себе на вооружение, но только перепишу под себя, без листов:D
Вопрос лишь в том что выложенный в открытый рабочий, доступный для понимания всем шаблон критикуешь по сути .........
Отвечу 2 поговорками
1) Критикуешь - предлагай!
2) Нет предела совершенству!!!
 
Регистрация
23.12.2014
Сообщения
639
Благодарностей
196
Баллы
43
Но в вашем шаблоне это не используется. Открою секрет, через методы FindElement(), мы тоже можем получить координаты и прочие данные.
Это статья про подход к работе (МЕТОД) , и в нем приведен пример реализации этого подхода в виде этого шаблона.....
Прошло тем более почти пол года и естественно прогресс не стоит на месте........
 
Последнее редактирование:
  • Спасибо
Реакции: rdjt

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
730
Благодарностей
479
Баллы
63
  • Спасибо
Реакции: djaga

Dgo

Новичок
Регистрация
24.08.2022
Сообщения
17
Благодарностей
2
Баллы
3
Открывал хоть шаблон в Enterprise?
у меня нет зенодроид по этому не могу открыть, но судя по описанию идет проверка xml на совпадения, это ооооочень громоздко. Не проще все сделать в одном кубике c#, через массив перебирая элементы и находя совпадение. можно для этого даже отдельный класс написать и положить в общий код, загоняя документ и ожидая получения совпадения.
 
Регистрация
23.12.2014
Сообщения
639
Благодарностей
196
Баллы
43
Закидывайте рабочие варианты, но в любом случае будет громоздко именно по тому что у каждого совпадения есть свое решение (действие) или несколько решений при совпадении с другими условиями.
 
Последнее редактирование:

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