2 место Автоматизация Android без посредников. Часть 1.

Спасибо, годная статья. Как раз ждал про андроид.
В использовании эмуляторов конечно есть и минус, что некоторые приложения не хотят там работать. Например алиэкспресс у меня так и не получилось запустить на эмуляторе.
 
  • Спасибо
Реакции: Earthshaker и WLDN
Думаю вместо прокси можно использовать реальный мобильный интернет. Включение/выключение авирежима сменит IP и вуаля.
Остаются вопросы с анонимностью - deviceid и прочими.
 
(В этом способе есть один минус. Если вы прерываете работу шаблона вручную, то pid не удаляется. Буду рад вашим идеям решения этой проблемы в комментариях.)
предлогаю обратить внимание на https://github.com/Ricky310711/CoolADB

ADBClient MyClient = new ADBClient();
var devices=MyClient.Devices()[0];
project.SendInfoToLog(devices);
string port= Regex.Match(devices,@"(?<=:).*").Value;
project.SendInfoToLog(port);


не надо будет мучиться с глобалками и с pid
 
  • Спасибо
Реакции: Dmitrij и WLDN
Статья огонь!
Как кликнуть по элементу, если нет resource-id и content-desc?
Есть только класс "android.widget.Button" и text "Смотреть"
Пробовал так, не получается
a.Click("//android.widget.Button[contains(@text, 'Смотреть видео')]", 0, 10);
a.Click("//android.widget.Button[@text='Смотреть']", 0, 10);
a.Click("//node[@text='Смотреть видео' and @class='android.widget.Button']", 0, 10);
 
Последнее редактирование:
  • Спасибо
Реакции: udder и WLDN
Статья огонь!
Как кликнуть по элементу, если нет resource-id и content-desc?
Есть только класс "android.widget.Button" и text "Смотреть"
Пробовал так, не получается
a.Click("//android.widget.Button[@text='Смотреть']", 0, 10); //XPath, Index, Секунды
a.Click("//node[@text='Смотреть видео' and @class='android.widget.Button']", 0, 10); //XPath, Index, Секунды
Привет, как вариант можно попробовать исправить "Смотреть видео" на смотреть.
a.Click("//node[@text='Смотреть' and @class='android.widget.Button']", 0, 10); //XPath, Index, Секунды

Можешь прислать скрин окна и атрибутов с UIAutomator сюда, я попробую помочь.
 
Думаю вместо прокси можно использовать реальный мобильный интернет. Включение/выключение авирежима сменит IP и вуаля.
Остаются вопросы с анонимностью - deviceid и прочими.
это на эмуляторе так можно ip менять ?
 
Думаю вместо прокси можно использовать реальный мобильный интернет. Включение/выключение авирежима сменит IP и вуаля.
с реальными устройствами это можно пробовать, только нужны симки на каждое устройство. А вот с эмуляторами, такое не прокатит.
 
Привет, как вариант можно попробовать исправить "Смотреть видео" на смотреть.
a.Click("//node[@text='Смотреть' and @class='android.widget.Button']", 0, 10); //XPath, Index, Секунды
Если текст = "Смотреть видео" то чтобы использовать только одно слово "Смотреть" в выражении xpath нужно использовать contains, так как text='Смотреть' не найдет, его там просто нет, ищется точное совпадение.
 
Последнее редактирование:
Так можно и с 3G модемом - выткнул-воткнул и нате новый IP.
опять же, айпишник модема один на все соединение и если вручную его вытаскивать/вставлять то смысл автоматизации пропадает.
 
с реальными устройствами это можно пробовать, только нужны симки на каждое устройство. А вот с эмуляторами, такое не прокатит.
с реальными устройствами есть нюансики, один из них - не нашёл возможности одновременной работы устройства в режиме adb и usb модема , пришлось добовлять перефирии, или как это у вас проггеров- костыль из железа))
 
с реальными устройствами есть нюансики
Вот и я про это. :-) Нюансики есть везде, и при работе с xpath, и при работе с аппиумом, и при работе с adb (неважно через dll или напрямую)
 
был бы конкурс для новичков, что то типа "песочницы на кубиках", выложил бы наработки с реальными устройствами...а то зайдешь , почитаешь и как в меме- " да ну его на..."))
 
  • Спасибо
Реакции: Sib, 606 и nit_off
был бы конкурс для новичков, что то типа "песочницы на кубиках", выложил бы наработки с реальными устройствами...а то зайдешь , почитаешь и как в меме- " да ну его на..."))
А почему нет? Ведь новичков тоже много на форуме. :ay: Есть еще раздел с внеконкурсными статьями. А если напишите в начале своей статьи, что Вы новичок, то все нормально будет. Опытные пользователи, тоже когда то новичками были. :az:
 
  • Спасибо
Реакции: fedorgen и sergio197675
был бы конкурс для новичков, что то типа "песочницы на кубиках", выложил бы наработки с реальными устройствами...а то зайдешь , почитаешь и как в меме- " да ну его на..."))
Вы ж можете и в этом конкурсе успеть
Напишите, заявки на участие вроде можно подавать до 24 мая,
Будет интересно почитать
 
  • Спасибо
Реакции: sergio197675
опять же, айпишник модема один на все соединение и если вручную его вытаскивать/вставлять то смысл автоматизации пропадает.
перегруз модема по расписанию
 
был бы конкурс для новичков, что то типа "песочницы на кубиках", выложил бы наработки с реальными устройствами...а то зайдешь , почитаешь и как в меме- " да ну его на..."))
Думаю всем интересно будет изучить любой опыт автоматизации, я так же пишу на кубиках.
 
А почему нет? Ведь новичков тоже много на форуме. :ay: Есть еще раздел с внеконкурсными статьями. А если напишите в начале своей статьи, что Вы новичок, то все нормально будет. Опытные пользователи, тоже когда то новичками были. :az:
Вы ж можете и в этом конкурсе успеть
Напишите, заявки на участие вроде можно подавать до 24 мая,
Будет интересно почитать
Думаю всем интересно будет изучить любой опыт автоматизации, я так же пишу на кубиках.
спасибо , за поддержку подал/одобрили заявку ....ЗЫ извиняюсь перед автором за флуд ,всем удачи!
 
  • Спасибо
Реакции: Manfred, seregakot и radv
Если защита слабенькая, то конечно проще будет использовать этот вариант.
А примеры с хорошей защитой можете привести? Любопытства ради) кроме фб и реги гугла)
 
Вы получите значения в HEX, преобразуем их в DEC
Для преобразования в коде (без использования сервисов) можно использовать такие варианты
C#:
Развернуть Свернуть Копировать
// Для преобразования из десятичного в шестнадцатеричное
string hexValue = decValue.ToString("X");

// Для преобразования из шестнадцатеричного в десятичный
// Вариант 1
int decValue = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

// Вариант 2
int decValue = Convert.ToInt32(hexValue, 16);

Тапаем с помощью sendevent, подставив номер event'а и координаты (в нашем случае двойной тап не нужен, поэтому я закомментил вторую часть в шаблоне):
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
string evnt = project.Variables["event"].Value;
string x = project.Variables["x"].Value;
string y = project.Variables["y"].Value;
a.Command(String.Format("sendevent /dev/input/event{0} 1 330 1", evnt), false);
a.Command(String.Format("sendevent /dev/input/event{0} 3 58 1", evnt), false);
a.Command(String.Format("sendevent /dev/input/event{0} 3 53 {1}", evnt, x), false);
a.Command(String.Format("sendevent /dev/input/event{0} 3 54 {1}", evnt, y), false);
a.Command(String.Format("sendevent /dev/input/event{0} 0 2 0", evnt), false);
a.Command(String.Format("sendevent /dev/input/event{0} 0 0 0", evnt), false);
a.Command(String.Format("sendevent /dev/input/event{0} 0 2 0", evnt), false);
a.Command(String.Format("sendevent /dev/input/event{0} 0 0 0", evnt), false);
a.Command(String.Format("sendevent /dev/input/event{0} 1 330 0", evnt), false);
a.Command(String.Format("sendevent /dev/input/event{0} 3 58 0", evnt), false);
a.Command(String.Format("sendevent /dev/input/event{0} 3 53 0", evnt), false);
a.Command(String.Format("sendevent /dev/input/event{0} 3 54 38", evnt), false);
a.Command(String.Format("sendevent /dev/input/event{0} 0 2 0", evnt), false);
a.Command(String.Format("sendevent /dev/input/event{0} 0 0 0", evnt), false);

Это столько строк ради одного тапа? Есть пояснения по каждой из строк этого примера? Зачем так заморачиваться? Координаты используются только в двух строках.

Может двойной тап, просто повторением одинарного сделать? Чем отличается тап через Click от такаого варианта?
 
  • Спасибо
Реакции: WLDN
Если текст = "Смотреть видео" то чтобы использовать только одно слово "Смотреть" в выражении xpath нужно использовать contains, так как text='Смотреть' не найдет, его там просто нет, ищется точное совпадение.
Помог человеку. Там другая проблема. Решением было составить длинный XPath и работа с индексами. :-)
Исходил из этой информации при составлении пути. Подумал, вдруг человек ошибся немного. :D
56113

Это столько строк ради одного тапа? Есть пояснения по каждой из строк этого примера? Зачем так заморачиваться? Координаты используются только в двух строках.

Может двойной тап, просто повторением одинарного сделать? Чем отличается тап через Click от такого варианта?
В теории можно, если сделать дамп окна, а затем отправить 2 инпута подряд, но здесь вопрос времени между тапами.
В статье написал как это делал я, и поделился наработками. На их основе можно писать свои собственные методы.
Если кому-то когда-нибудь понадобится sendevent, он может зайти сюда и посмотреть как это делал я.
Не претендую на звание кодера года или на всезнайку, поэтому делитесь своими мыслями, буду только рад. :-)

Более подробную информацию о sendevent можно найти в поисковике:
 
Последнее редактирование:
А примеры с хорошей защитой можете привести? Любопытства ради) кроме фб и реги гугла)
Привет. Всегда в пример привожу приложение ТикТок. Они постоянно совершенствуют свою защиту, поэтому в некоторых ситуациях не стоит идти напролом и автоматизировать всё подряд только на запросах.
Несомненно это принесёт опыт, но также потратит кучу времени. :(

На мой взгляд лучше комбинировать запросы и обычную автоматизацию клиентов.
 
Последнее редактирование:
  • Спасибо
Реакции: Dexio
был бы конкурс для новичков, что то типа "песочницы на кубиках", выложил бы наработки с реальными устройствами...а то зайдешь , почитаешь и как в меме- " да ну его на..."))
Во всех предыдущих конкурсах есть статьи как для новичков, так и для более продвинутых. Так что можно (и нужно) выкладывать и статьи для начинающих, чтобы у каждого была возможность найти что-то для своего уровня.
 
  • Спасибо
Реакции: WLDN и sergio197675
Во всех предыдущих конкурсах есть статьи как для новичков, так и для более продвинутых. Так что можно (и нужно) выкладывать и статьи для начинающих, чтобы у каждого была возможность найти что-то для своего уровня.
это понятно, но даже в спорте есть профи ринг , а есть любители , потому и предложил песочницу длч новичков, у кого глаз еще на замылен и идеи плещут) для этаких генераторов идей и схем))
или ещё лучше - номинации
например "лучшая техническая"
а для гуманитариев "лучший способ монетизации" и тд и тп))
 
  • Спасибо
Реакции: WLDN
Т.к. я довольно давно занимаюсь авоматизацией мобильных приложений, то хотел бы оставить своё мнение об этой статье.


Если полистать конкурсную статью с 6 конкурса статей: Управление любыми Android приложениями на смартфоне из ZP то на многие вопросы есть ответы и тема с appium достаточно изучена.
Ранее я автоматизировал приложения через Appium, но меня не устраивали батники, запущенные окна cmd и невысокая гибкость всей системы в целом.
Батники и запущенные окна cmd? Запускайте через c# и руководите сами этим окном. Хоть скрыто, хоть свернуто.
C#:
Развернуть Свернуть Копировать
var appium_path = project.Variables["appium_path"].Value;
var appium_js = project.Variables["appium_js"].Value;
var appium_port = project.Variables["appium_port"].Value;
var bootstrap_port = project.Variables["appium_bootstrap_port"].Value;

//Включаем сервер
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @appium_path+"node.exe";
startInfo.Arguments = @appium_js+" -a 127.0.0.1 -p "+appium_port+" -bp "+bootstrap_port+" --command-timeout 500 -cp "+appium_port+" --session-override --suppress-adb-kill-server";
//startInfo.WindowStyle = ProcessWindowStyle.Hidden;// - Запуск в скрытом режиме, без окон вообще
startInfo.WindowStyle = ProcessWindowStyle.Minimized;// - Запуск в свернутом режиме
Process.Start(startInfo);


Вы предлагаете работать с nox_adb? Если бы Вы работали с этим чудом китайской инженерной мысли, то вы бы знали, что это обрезанный adb, с вырезанными и переделенными функциями. И поэтому всегда рекомендуется удалить их adb и заменить оригинальными c platform-tools. Так собственно и обновлять его можно и использовать нововведения.

2 Пункт
Любые команды adb можно отправлять и без appium и без специально добавленных библиотек Можно указать как и прямой путь к adb, так и в переменные среды. Примеров в смежной теме полно. Пример
Так что вообще не вижу смысла во 2-м пункте статьи.
Также пример команды adb с возвратом ответа в переменную.
C#:
Развернуть Свернуть Копировать
Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "adb.exe";
p.StartInfo.Arguments = @"-s "+sn+" shell dumpsys battery | grep 'level'";
p.StartInfo.CreateNoWindow = true;
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
project.Variables["battery_level"].Value = output.Trim();
return output;
Конечно же работу с adb ещё можно оформить и в общий код, чтоб было эстетически приятнее работать с кодом.

3 пункт
Если работаем как в вашем случае с эмуляторами, то порт с нокса (как и у других эмуляторах) вытаскивается с файла конфигурации по пути: Nox\bin\BignoxVMS\Nox_1\Nox_1.vbox (как пример виртуальная машина 1).

Я бы назвал вариант взаимодействия с устройствами из этой статьи - одна из альтернатив Appium, которая очень далеко от Appium. Для сложных проектов точно не подойдет, если как какую-нибудь кликалку или легкую регистрацию в каких-нибудь проектах - пожалуйста.
Судя по темам автора - он может написать гораздо более интересную статью, чего я конечно и желаю в будущем.
 
Вы предлагаете работать с nox_adb? Если бы Вы работали с этим чудом китайской инженерной мысли, то вы бы знали, что это обрезанный adb, с вырезанными и переделенными функциями. И поэтому всегда рекомендуется удалить их adb и заменить оригинальными c platform-tools. Так собственно и обновлять его можно и использовать нововведения.
Благодарю за дополнение. :-) Действительно я работаю с оригинальным adb, по скринам это можно увидеть. Но nox_adb в большинстве случаев хватает, чтобы использовать готовую автоматизацию и не устанавливать на все сервера с ботами AndroidSDK. На мой взгляд это очень удобно.

Батники и запущенные окна cmd? Запускайте через c# и руководите сами этим окном. Хоть скрыто, хоть свернуто.

Любые команды adb можно отправлять и без appium и без специально добавленных библиотек Можно указать как и прямой путь к adb, так и в переменные среды. Примеров в смежной теме полно. Пример
Так что вообще не вижу смысла во 2-м пункте статьи.
Также пример команды adb с возвратом ответа в переменную.
Да, подобный вариант я также использовал в 3ей части моей статьи. В момент когда я работал с Appium, я не углублялся в сокрытие cmd окон, потому что это был разовый заказ. Действительно, их не проблема скрыть, но это меня и привело к тому, чтобы более углубиться в тему автоматизации.
Использование библиотеки это был лишь вопрос моего удобства, не более того. В автоматизации множество задач можно решить различными способами, и каждый выбирает то, что ему по душе.

Если работаем как в вашем случае с эмуляторами, то порт с нокса (как и у других эмуляторах) вытаскивается с файла конфигурации по пути: Nox\bin\BignoxVMS\Nox_1\Nox_1.vbox (как пример виртуальная машина 1).
Да, в файле есть некоторая информация о запущенном эмуляторе, в том числе и порт. Но получение PID было очень важно для меня, это было необходимо для выполнения следующей важной задачи по автоматизации. Поэтому я использовал именно этот вариант, возможно он пригодится другим людям для их задач.

Я бы назвал вариант взаимодействия с устройствами из этой статьи - одна из альтернатив Appium, которая очень далеко от Appium. Для сложных проектов точно не подойдет, если как какую-нибудь кликалку или легкую регистрацию в каких-нибудь проектах - пожалуйста.
Судя по темам автора - он может написать гораздо более интересную статью, чего я конечно и желаю в будущем.

Действительно я мог бы раскрыть множество вариантов работы с эмуляторами и приложениями. Но хотели бы вы этого?
Я вижу, что даже этой статьёй очень сильно взбудоражил комьюнити мобильных автоматизаторов, насколько сообщают мне некоторые источники.
И действительно содержание статьи лишь альтернативный способ автоматизации, не более того и каждый выбирает то, что ему будет понятнее и удобнее.
Статьёй не преследовал цели оставить кого-то без хлеба, поэтому и написал то, что и так может Appium.

Спасибо за развернутый отзыв, взаимно.:-)
 
Последнее редактирование:
  • Спасибо
Реакции: maksimk26 и avtostopshik
Действительно я мог бы раскрыть множество вариантов работы с эмуляторами и приложениями. Но хотели бы вы этого?
Информация всегда интересна. К тому же она имеет свойство меняться со времением, и не все смогут адаптироваться к таким изменениям. Кому то и описанное в статье по шагам перенести в свои проекты будет не по силам, а кто то просто решит сделать заказ у более опытных товарищей, чтобы сэкономить время и получить более стабильно работающий проект. Я лично знал про эту библиотеку, но не было времени разбираться с ней, и написал много своих похожих методов для работы с адб и эмуляторами. Исходя из своего опыта поддержу своего коллегу, что полностью отказаться от аппиума в пользу адб не получится, они друг друга дополняют. Автор все равно молодец, что поделился своим опытом и написал эту статью.
 

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