- Регистрация
- 10.09.2021
- Сообщения
- 1 260
- Благодарностей
- 679
- Баллы
- 113
Введение
Приветствую всех на 12-ом конкурсе шаблонов форума ZennoLab!
В данном шаблоне в первую очередь я хотел бы продемонстрировать каким образом можно находить пути xPath к элементам которые крайне не уникальны. Постараюсь вкратце донести логику которой я руководствуюсь при построении путей. Сам шаблон реализует только регистрацию, заполнения профиля нету, мне он видится больше как учебный материал а не готовый инструмент для регистрации аккаунтов.
Входные настройки
В входных настройках указывается прокся, если она мобильная то указывается и ссылка, для смены ip.
Сервис по приему смс выбирается и настраивается в сниппете, по умолчанию выбран smsHub(smsActivate) и страна usa, не виртуальные номера.
Логика работы шаблона
Построение путей
Основная проблема заключается в том, что у элементов нету никаких уникальных данных в дереве по которым их можно было бы легко идентифицировать.
Первое что приходит на ум это определить элемент по нескольким его атрибутам, на пример кнопку Next можно без проблем найти таким образом.
//*[@index='0' and @clickable='true']
Элементов с атрибутом index который равен 0 на странице несколько, а вот тех у кого Index = 0 и при этом атрибут clickable = true только один, это самый простой способов найти кнопку, хотя бывают и элементы которые не кнопки и у них атрибут clickable = true.
Цепочку в таком xPath можно выстраивать и длиннее, на пример:
//*[@index='0' and @clickable='true' and @focusable='true' and @displayed='true']
В целом по такому принципу проходила большая часть регистрации, в некоторых местах я ещё подключал имя класса, на пример в указании даты рождения.
//*[@class='android.view.View' and @index='0' and @clickable='true' and @focusable='true']
Самый на мой взгляд интересный момент был как раз в указании даты рождения, там нельзя было ввести её используя эмуляцию клавиатуры, надо было кликать по клавиатуре которую предоставлял FB. По прошлому способу найти кнопки не представлялось возможным, слишком много совпадений.
Тут как раз можно использовать другой способ подбора xPath, если внимательно изучить дерево то становится заметно что страница состоит из групп элементов "ViewGroup" и только в одном из них есть ещё 12 элементов "ViewGroup", эти 12 элементов как раз и есть наши кнопки, осталось только получить эту коллекцию элементов с помощью вот такого xPath
//android.view.ViewGroup[@class='android.view.ViewGroup' and count(android.view.ViewGroup[@class='android.view.ViewGroup']) = 12]//android.view.ViewGroup
Тут мы грубо говоря ищем элемент android.view.ViewGroup у которого внутри есть элементы android.view.ViewGroup и их количество = 12
Не знаю как работать с коллекцией элементов на кубиках, поэтому использовал c#
C#:
// Получаем нашу клавиатуру
var hec = instance.DroidInstance.AppiumDriver.FindElementsByXPath
("//android.view.ViewGroup[@class='android.view.ViewGroup' and count(android.view.ViewGroup[@class='android.view.ViewGroup']) = 12]//android.view.ViewGroup");
hec.ElementAt(0).Click(); //Делаем клик по нулевому элементу (это единица)
hec.ElementAt(1).Click(); //Делаем клик по первому элементу (это двойка)
//и тд.
Заключение
Данные способы сложно назвать панацеей, но лично в моих проектах они показали себя более стабильными чем на пример поиск по картинке, да, в подобных приложениях не получится сделать проверку наличия текста на странице и по большому счету шаблон выполняется в слепую.
хотя теоретически можно сделать скрин экрана, отправить его в сервис и узнать что на нем написано, и проверить, нужная ли это нам страница
Спасибо за внимание)
- Номер конкурса шаблонов
- Двенадцатый конкурс шаблонов
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование модератором: