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

  • Спасибо
Реакции: udder
  • Спасибо
Реакции: brun0 и udder
Есть способ удобно дампить при такой ошибке, возможно в след конкурсе покажу как.
Есть способ удобно дампить при такой ошибке, возможно в след конкурсе покажу как.
15 конкурс статей как раз :) Будет круто, т.к вы прекрасно и доступно пишите. Я пока аппиум инспектор установлю.
Попробуй другой эмулятор или версию Андройда
Возможно, я пробовал MEMU 7 Android и свой физический смарт с Android 11
 
  • Спасибо
Реакции: WLDN
@WLDN Скажите, пожалуйста, как кликать когда нет resouce-id
75975


Пробовал так

a.Click("//node[@text='Start Messaging' and @class='android.widget.TextView']", 0, 10);
Элемент не находит
 
@WLDN Скажите, пожалуйста, как кликать когда нет resouce-id
Посмотреть вложение 75975

Пробовал так

a.Click("//node[@text='Start Messaging' and @class='android.widget.TextView']", 0, 10);
Элемент не находит
Попробовать без Class. Вообще должен находить.
Может там пробел какой-то другой, хз.

a.Click("//node[contains(@text,'Messaging')]", 0, 10);
 
  • Спасибо
Реакции: PUNKOFFYA и udder
Попробовать без Class. Вообще должен находить.
Может там пробел какой-то другой, хз.

a.Click("//node[contains(@text,'Messaging')]", 0, 10);
Работает, несколько часов пытался прожать кнопку, ваш код сработал. Теперь по аналогии много элементов сделал таким образом. В процессе возник вопрос, как в индекс поставить переменную?

Такой вариант не сработал
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Click("//node[contains(@text,'Photo')]", project.Variables["rnd"].Value, 10);

еще так попробовал.
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Click("//node[contains(@text,'Photo')]", 'project.Variables["rnd"].Value', 10);
 
Последнее редактирование:
ответил в личке

C#:
Развернуть Свернуть Копировать
List<string> ls = a.Parse("//node[@resource-id='com.google.android.youtube:id/duration' and @class='android.widget.TextView']", "text", 0, 5);
project.Variables["likes"] = ls[0];

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

Такой вариант не сработал
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Click("//node[contains(@text,'Photo')]", project.Variables["rnd"].Value, 10);

еще так попробовал.
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Click("//node[contains(@text,'Photo')]", 'project.Variables["rnd"].Value', 10);
Если речь о "глобальном" индексе:
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Click("//node[contains(@text,'Photo')]", int.Parse(project.Variables["rnd"].Value), 10);

Если индекс из атрибутов, то:
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Click(String.Format("//node[contains(@text,'Photo') and @index='{0}']", project.Variables["rnd"].Value), 0, 10);
 
  • Спасибо
Реакции: udder
C#:
Развернуть Свернуть Копировать
List<string> ls = a.Parse("//node[@resource-id='com.google.android.youtube:id/duration' and @class='android.widget.TextView']", "text", 0, 5);
project.Variables["likes"] = ls[0];

Любопытно, тоже понадобился парсинг не в список а в переменную, если не затруднит, то как изменить код?

project.Variables["likes"].Value = ls[0];
 
  • Спасибо
Реакции: udder
@WLDN
Выполнение действия CSharp OwnCode: Установка APK. Значение не может быть неопределенным.
Имя параметра: device"

Не удается установить APK из директории проекта.

В переменной deivce IP и порт эмулятора.

UPD
У меня несколько копий эмуля, подключался к другому порту.. Код отработал, но Telegram не установился.


C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
var device = a.Device();

SharpAdbClient.DeviceCommands.PackageManager manager = new SharpAdbClient.DeviceCommands.PackageManager(device);
try {
manager.UninstallPackage("org.telegram.messenger"); //удаление пакета
} catch (Exception e) {}
manager.InstallPackage(project.Directory + @"\telegram.apk", reinstall: false); //установка apk

Проблем была в том, что имя пакета указано неверно. У tg есть две версии: для Google Play с именем пакета org.telegram.messenger и версия APK с их офф сайта с именем пакета org.telegram.messenger.web



Я пошел путем установки APK, потому что не смог прожать кнопку "Установить" в Google Play, т.к элемент не могу найти.



76037


Варианты такие:


a.Click("//node[contains(@text,'Установить')]", 0, 10);
 
Последнее редактирование:
@WLDN
Выполнение действия CSharp OwnCode: Установка APK. Значение не может быть неопределенным.
Имя параметра: device"

Не удается установить APK из директории проекта.

В переменной deivce IP и порт эмулятора.

UPD
У меня несколько копий эмуля, подключался к другому порту.. Код отработал, но Telegram не установился.


C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
var device = a.Device();

SharpAdbClient.DeviceCommands.PackageManager manager = new SharpAdbClient.DeviceCommands.PackageManager(device);
try {
manager.UninstallPackage("org.telegram.messenger"); //удаление пакета
} catch (Exception e) {}
manager.InstallPackage(project.Directory + @"\telegram.apk", reinstall: false); //установка apk

Проблем была в том, что имя пакета указано неверно. У tg есть две версии: для Google Play с именем пакета org.telegram.messenger и версия APK с их офф сайта с именем пакета org.telegram.messenger.web



Я пошел путем установки APK, потому что не смог прожать кнопку "Установить" в Google Play, т.к элемент не могу найти.



Посмотреть вложение 76037

Варианты такие:


a.Click("//node[contains(@text,'Установить')]", 0, 10);
Так тут видно же resource-id если он есть то прям по нему и клик делаем 100% должно срабатывать.
Бывает ток что ресурс находится не в поле видимости(не экрана, а сам парсинг считает что не в поле видимости) , помогает скорлл немного вниз, немного вверх.
 
  • Спасибо
Реакции: udder
@WLDN
Выполнение действия CSharp OwnCode: Установка APK. Значение не может быть неопределенным.
Имя параметра: device"

Не удается установить APK из директории проекта.

В переменной deivce IP и порт эмулятора.

UPD
У меня несколько копий эмуля, подключался к другому порту.. Код отработал, но Telegram не установился.


C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
var device = a.Device();

SharpAdbClient.DeviceCommands.PackageManager manager = new SharpAdbClient.DeviceCommands.PackageManager(device);
try {
manager.UninstallPackage("org.telegram.messenger"); //удаление пакета
} catch (Exception e) {}
manager.InstallPackage(project.Directory + @"\telegram.apk", reinstall: false); //установка apk

Проблем была в том, что имя пакета указано неверно. У tg есть две версии: для Google Play с именем пакета org.telegram.messenger и версия APK с их офф сайта с именем пакета org.telegram.messenger.web



Я пошел путем установки APK, потому что не смог прожать кнопку "Установить" в Google Play, т.к элемент не могу найти.



Посмотреть вложение 76037

Варианты такие:


a.Click("//node[contains(@text,'Установить')]", 0, 10);
Он не видит device. Не знаю в чем проблема. Если не удаётся установить через PacketManager, то можно устанавливать через cmd. В след статье выложу сниппет.
 
  • Спасибо
Реакции: udder
Он не видит device. Не знаю в чем проблема. Если не удаётся установить через PacketManager, то можно устанавливать через cmd. В след статье выложу сниппет.
Я в посте уже написал ниже причину.
var a = project.Context["ADB"];
var device = a.Device();

SharpAdbClient.DeviceCommands.PackageManager manager = new SharpAdbClient.DeviceCommands.PackageManager(device);
try {
manager.UninstallPackage("org.telegram.messenger"); //удаление пакета
} catch (Exception e) {}
manager.InstallPackage(project.Directory + @"\telegram.apk", reinstall: false); //установка apk


имя пакета не соответствовал имени пакета APK. Поэтому была ошибка.
 
  • Спасибо
Реакции: WLDN
Интересует как устанавливать прокси, особенно интересна установка прокси с авторизацией.
Я тестировал со своей мобильной локальной http проксей. В браузера на ПК работает.
При установки на эмуляторе пропадает интернет в браузере на эмуляторе, но Google Play работает, можно скачивать. Я скачал приложение для проверки IP, выдает IP моего ПК, не прокси
var a = project.Context["ADB"];

a.Command("settings put global http_proxy 127.0.0.1:3097", false);


Помогает отключение прокси

var a = project.Context["ADB"];

a.Command("settings put global http_proxy :0", false);


Все-таки без прокси не вариант работать, интересует как наладить коннект.
 
Интересует как устанавливать прокси, особенно интересна установка прокси с авторизацией.
Я тестировал со своей мобильной локальной http проксей. В браузера на ПК работает.
При установки на эмуляторе пропадает интернет в браузере на эмуляторе, но Google Play работает, можно скачивать. Я скачал приложение для проверки IP, выдает IP моего ПК, не прокси
var a = project.Context["ADB"];

a.Command("settings put global http_proxy 127.0.0.1:3097", false);


Помогает отключение прокси

var a = project.Context["ADB"];

a.Command("settings put global http_proxy :0", false);


Все-таки без прокси не вариант работать, интересует как наладить коннект.
По моим испытания что я смотрел или root доступ нужен на тлф, или чтоб сам телефон поддерживал проксю на таком уровне, некоторые телефоны не сохраняют логин пароль... Легче всего для меня оказалось купить дешевые роутеры и каждый тлф к своему роутеру прикрепить а роутер уже повесить проксю.
 
  • Спасибо
Реакции: udder
Подскажите, пожалуйста, у меня такая проблема:

Есть клик по кнопке, время ожидания в коде указано 10 секунд. Но если ее не находит, то почему-то инстанс висит намного больше указанного времени (где-то минуту). В чем может быть дело?
Так происходит со всеми элементами, которые не находятся.
 
Последнее редактирование:
Подскажите, пожалуйста, у меня такая проблема:

Есть клик по кнопке, время ожидания в коде указано 10 секунд. Но если ее не находит, то почему-то инстанс висит намного больше указанного времени (где-то минуту). В чем может быть дело?
Так происходит со всеми элементами, которые не находятся.
Подтверждаю, у меня так же. При дебаге уходит много времени))
 
Подскажите, пожалуйста, у меня такая проблема:

Есть клик по кнопке, время ожидания в коде указано 10 секунд. Но если ее не находит, то почему-то инстанс висит намного больше указанного времени (где-то минуту). В чем может быть дело?
Так происходит со всеми элементами, которые не находятся.
Не минуту обычно, а секунд 30. 10 секунд это условное время ожидания. На самом деле там 10 запросов с промежутком в 1 секунду, я об этом отмечал в статье, емнип. Решение: использовать для дебага 1-2 секунды или стопать кубик в новых версиях зенки, он будет вылетать на ошибку.
 
  • Спасибо
Реакции: qweqwe5435 и udder
Не минуту обычно, а секунд 30. 10 секунд это условное время ожидания. На самом деле там 10 запросов с промежутком в 1 секунду, я об этом отмечал в статье, емнип. Решение: использовать для дебага 1-2 секунды или стопать кубик в новых версиях зенки, он будет вылетать на ошибку.
Спасибо) Теперь понятна логика работы. Действительно, в видео об этом рассказываете, но я упустил этот момент.
 
Последнее редактирование:
  • Спасибо
Реакции: WLDN
Спасибо) Теперь понятна логика работы. Действительно, в видео об этом рассказываете, но я упустил этот момент.
76301


В общем коде для всех методов можно сделать так, тогда паузы не будет, а лишь время на дамп xml
 
  • Спасибо
Реакции: qweqwe5435
На своем пк всё гуд установилось, на RDP почему-то не запускается uiautomatorviewer, в чем может быть проблема? Спасибо
Все верно установил, переменные среды так-же прописал, перезагружался, всё равно не запустилось. Батник открывается и буквально спустя момент закрывается сам.
 
Выполнение действия CSharp OwnCode: 1. The device '127.0.0.1:21513' was not found.

Очень часто теряется коннект с адб, в чем может быть дело?
 
На своем пк всё гуд установилось, на RDP почему-то не запускается uiautomatorviewer, в чем может быть проблема? Спасибо
Все верно установил, переменные среды так-же прописал, перезагружался, всё равно не запустилось. Батник открывается и буквально спустя момент закрывается сам.
батник открой через cmd тогда не будет закрываться
Выполнение действия CSharp OwnCode: 1. The device '127.0.0.1:21513' was not found.

Очень часто теряется коннект с адб, в чем может быть дело?
вот такая же проблема, у меня конфликтует адб через консоль иногда и килит коннект, хотя мему продолжает работать, но это не особо мешает работает я бы сказал в целом
 
Подскажите кто писал или пишет регеры, сейчас куча защит антифрода, только зарегил акк и он сразу в бан.
Какие шаги вы предпринимали кроме уникализации версий, имеи, разных прокси и т.д.?
Готов оплатить инфу.
 
А как можно получить дамп в переменную? :bw:
 
Подскажите характеристики сервера, что бы тянул работу шаблона в 10-15 потоков
 
@WLDN подскажите пожалуйста. Уже второй день не могу составить правильный xPath чтобы кликал на кнопку (тестирую с кубиком wait, но не находит, с click тоже не работает)

77925

Из последнего пробовал так:
C#:
Развернуть Свернуть Копировать
a.Wait("//node[@text='Start 7-Day Free Trial' and @resource-id='com.expressvpn.vpn:id/startTrialButton' and @class='android.widget.Button' and @package='com.expressvpn.vpn' and @clickable='true']", 3, 10);

и так:
C#:
Развернуть Свернуть Копировать
a.Wait("//node[@index='0' and @class='android.widget.FrameLayout']/node[@index='0' and class='android.widget.LinearLayout']/node[@index='0' and class='android.widget.FrameLayout']/node[@index='0' and @resource-id='com.expressvpn.vpn:id/action_bar_root' and class='android.widget.LinearLayout']/node[@index='0' and @resource-id='android:id/content' and class='android.widget.FrameLayout']/node[@index='0' and @resource-id='com.expressvpn.vpn:id/welcome_screen_root' and class='android.view.ViewGroup']/node[@resource-id='com.expressvpn.vpn:id/startTrialButton' and @class='android.widget.Button' and @package='com.expressvpn.vpn' and @clickable='true']", 3, 10);

Что я делаю не так и будет ли эмулятор работать с впн?

П.С. проблему решил тапом по координатам, но интересно разобраться в моём конкретном случае почему не находит элемент.

В логе выводит следующее:
Выполнение действия CSharp OwnCode: Wait. Can't find element
 
Последнее редактирование:
  • Спасибо
Реакции: LifeIsCool
Используйте значение из resource-id
//*[@resource-id = 'айди элемента']
Я его и использую, только добавляю дополнительные параметры поиска. Только что попробовал только resource-id, всё равно не ищет.

Столкнулся ещё с одной проблемой - uiautomatorviewer не может получить скриншот девайса в этом же приложении в следующем окне после тапа по кнопке. Было у кого такое? При этом

C:\WINDOWS\system32>adb connect 127.0.0.1:62001
already connected to 127.0.0.1:62001

77926
 

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