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

Ребят, помогите плз:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Click("//node[@bounds='' and @package='com.facebook.lite']", 0, 30); //XPath, Index, Секунды

//Нужно вставить переменную проекта project.Variables["need_bounds"].Value; в @bounds=''
//Разные варианты перепробовал, нифига не получается.

Мои неудачные попытки:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
var bounds = project.Variables["need_bounds"].Value;
a.Click("//node[@bounds='bounds' and @package='com.facebook.lite']", 0, 10); //XPath, Index, Секунды

var a = project.Context["ADB"];
a.Click(String.Format("//node[@bounds='{0}' and @package='com.facebook.lite']", project.Variables["need_bounds"].Value, 0, 10)); //XPath, Index, Секунды

var a = project.Context["ADB"];
a.Click("//node[@bounds='project.Variables["need_bounds"].Value' and @package='com.facebook.lite']", 0, 10)); //XPath, Index, Секунды

var a = project.Context["ADB"];
a.Click(String.Format("//node[@bounds='{0}' and @package='com.facebook.lite']", project.Variables["need_bounds"].Value), 0, 10); //XPath, Index, Секунды

var a = project.Context["ADB"];
string need_bounds = project.Variables["need_bounds"].Value;
a.Click("//node[@bounds='need_bounds' and @package='com.facebook.lite']", 0, 10); //XPath, Index, Секунды

var a = project.Context["ADB"];
a.Click("//node[@bounds='"+project.Variables["need_bounds"].Value+"' and @package='com.facebook.lite']", 0, 10); //XPath, Index, Секунды

var a = project.Context["ADB"];
a.Click("//node[@bounds='(project.Variables["need_bounds"].Value);' and @package='com.facebook.lite']", 0, 10)); //XPath, Index, Секунды
 
Последнее редактирование:
Ребят, помогите плз:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Click("//node[@bounds='' and @package='com.facebook.lite']", 0, 30); //XPath, Index, Секунды

//Нужно вставить переменную проекта project.Variables["need_bounds"].Value; в @bounds=''
//Разные варианты перепробовал, нифига не получается.
C#:
Развернуть Свернуть Копировать
a.Click($"//node[@bounds='{project.Variables["need_bounds"].Value}' and @package='com.facebook.lite']", 0, 30); //XPath, Index, Секунды
 
  • Спасибо
Реакции: ruthless
C#:
Развернуть Свернуть Копировать
a.Click($"//node[@bounds='{project.Variables["need_bounds"].Value}' and @package='com.facebook.lite']", 0, 30); //XPath, Index, Секунды
Молниеносный ответ, благодарю :)
НО...
Выполнение действия CSharp OwnCode. Не удается выполнить привязки исполняющей среды по нулевой ссылке
 
C#:
Развернуть Свернуть Копировать
a.Click("//node[@bounds='" + project.Variables["need_bounds"].Value + "' and @package='com.facebook.lite']", 0, 30);
 
  • Спасибо
Реакции: bizon_stas и ruthless
C#:
Развернуть Свернуть Копировать
a.Click($"//node[@bounds='{project.Variables["need_bounds"].Value}' and @package='com.facebook.lite']", 0, 30); //XPath, Index, Секунды
Извиняюсь. Всё отлично отработало. Коннект с адб/ВМ слетел просто. Благодарю вас :-)
 
Кто ни будь разобрался как получить контент в нормальной кодировке если буквы русские?
Или подскажите пожалуйста что это за кодировка?
â¨ÐлаÑÑ, как -бÑдÑо Ñам едеÑÑ Ð² ÑÑом поезде. 6â дâ .â
Приветствую. Раньше на сервере декодировал это дело. Сейчас на пк тесты проводил, обнаружил что кодировка читается как русский без проблем. Вы решили данную проблему? Я так полагаю нужно смотреть в сторону региональных настроек в системе?
 
Все возможные настройки изменил на сервере. Всё равно текст на русском парсится в Windows-1251.
 
Приветствую. Раньше на сервере декодировал это дело. Сейчас на пк тесты проводил, обнаружил что кодировка читается как русский без проблем. Вы решили данную проблему? Я так полагаю нужно смотреть в сторону региональных настроек в системе?
Нашёл решение, библиотеки .dll с пк на сервер перенес, проблема отвалилась.
Теперь русский текст парсится корректно.
 
  • Спасибо
Реакции: WLDN
Здравствуйте! А подскажите пожалуйста, какой командой в adb можно удалить инстанс , например Nox_1 или другие
 
Ты ничего не путаешь?
а что не так? вопрос по теме автоматизации Андройд. Перефразирую: не знаю как в через адб удалять созданные устройства Nox, какой командой. Возможно товарищи подскажут.
 
а что не так? вопрос по теме автоматизации Андройд
Все не так, простыми словами adb управляет системой андроид, а не программой NOX. Нужно удалить Nox_1, удаляй папку с копией эмулятора с помощью кубика или c#. В Memu есть своя оболочка для управления эмуляторами memuc в нокс такой вроде нет, но все равно к adb это отношения не имеет.
 
  • Спасибо
Реакции: WLDN и webstudioNSS
Все не так, простыми словами adb управляет системой андроид, а не программой NOX. Нужно удалить Nox_1, удаляй папку с копией эмулятора с помощью кубика или c#. В Memu есть своя оболочка для управления эмуляторами memuc в нокс такой вроде нет, но все равно к adb это отношения не имеет.
понял, спасибо
 
  • Спасибо
Реакции: Koqpe
все таки зря покупал зеннодроид? :aq:
ага, потратил уйму времени на написание шаблона, обкатку, фиксы, костыли - в итоге мой внутренний псих достиг предела и решил уйти обратно :) думал манибек запросить, но решил дать ему шанс на реабилитацию, всё таки стараются ребята над ним, хочется думать :)
 
  • Спасибо
Реакции: devffy
Как получить весь XML экрана приложения в переменную?
 

Вложения

  • 2021-08-16_13-07-55.png
    2021-08-16_13-07-55.png
    39,6 KB · Просмотры: 272
  • Спасибо
Реакции: sten30
Может кто поможет... затеянный регер + создаватель я создал и работает медленно правда... теперь хочу избавиться от консольных окон...

Например что бы кликнуть по координатам я запускаю батник

C#:
Развернуть Свернуть Копировать
C:\Nox\bin\adb.exe shell input tap 810 1510

Но что то мне подсказывает что нужно как то и без батника обойтись...

Ввел я в консоль
C#:
Развернуть Свернуть Копировать
adb shell getevent

нажал по элементу и там ничего не поменялось...

Может кто поможет ?Мне хочется научиться вводить команды через Сsharp минуюя батники


81826


Еще пробовал так

C#:
Развернуть Свернуть Копировать
a.Command(String.Format("C:/Nox/bin/adb.exe shell input tap 810 1510"), false);

Выполнение команд CMD через csharp интересно еще и для второго скрипта который создает проксю через FreeProxy Control Centre она тоже вся на батниках
 
Заметил вот такую особенность, когда запущено приложение psiphon
Открыто именно как на картинке ниже, не запускается UI Automator
Возможно кто то сталкивался с данной проблемой и знает как решить?

Посмотреть вложение 62220
у меня похожая проблема, вам свою удалось решить?
 
Потратил день на поиски источника проблемы, делюсь опытом
В одном приложении, один экран, ничем не примечательней других, выдавал ошибку в uiautomator
Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!
Любые действия с использованием xpath тоже просто зависали.
Разгадка кроется в результате выполнения команды adb
Код:
Развернуть Свернуть Копировать
adb shell uiautomator dump
ERROR: could not get idle state.
Это означает, что на этом экране что-то выполняется, и дамп получить невозможно.
В моем случае экран был полностью статичный, потому это было совсем неочевидно.
Вот только как с этим бороться, я хз, может кто из спецов по android знает.

Также, столкнулся с проблемой на другом экране, uiautomator выдавал ошибку
Error taking device screenshot: null
Не получилось создать скриншот, но это не беда.
Скорее всего, приложение не позволяет сделать скрин из-за политики безопасность, например, так делает telegram в секретных чатах.
Дамп можно сделать вручную, а без скриншота обойтись.
Используем adb shell uiautomator dump чтобы сделать дамп, и adb pull /sdcard/window_dump.xml чтобы сохранить его в папку, из которой у вас запущен adb. Открываем его в браузере и пользуемся.
Или, если вам привычнее работать с uiautomator, переименуйте расширение на .uix, и откройте в нем, а вместо скриншота подойдет любой png файл.
 
Последнее редактирование:
Всем доброго дня.
подскажите, как вводить посимвольно текст(с паузами)

текст = мама мыла раму.

a.Text(project.Variables["текст"].Value);

через adb возможно тоже пойдёт вариант
 
Error taking device screenshot: null
Потратил на решение этой тупой проблемы 3 дня.
На устройствах Xiaomi 4 Pro(Android 6) и Samsung Tab S6 Lite(Android 11) все работало нормально.
На Samsung A02(Android 10) uiautomatorviewer возвращал null. Appium Inspector работал исправно

Путь до android-sdk не должен содержать пробелы. Переустановка в "привильное" место помогла
82719
 
  • Спасибо
Реакции: orka13
реальное устройство, несмотря на все настройки, иногда само собой блокируется, и когда такое случается, a.Wait ищет элемент бесконечно
как сделать проверку блокировки экрана?
 
Bash:
Развернуть Свернуть Копировать
adb shell dumpsys power | grep 'mHolding'
mHoldingDisplaySuspendBlocker=false - выключен
mHoldingDisplaySuspendBlocker=true - включен

Bash:
Развернуть Свернуть Копировать
adb shell dumpsys display | grep "mScreenState"
mScreenState=OFF/ON
mScreenStateInternal=OFF/ON
 
Последнее редактирование:
  • Спасибо
Реакции: pym933, brun0 и trecho
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
var device = a.Device();

SharpAdbClient.DeviceCommands.PackageManager manager = new SharpAdbClient.DeviceCommands.PackageManager(device);
manager.InstallPackage(project.Directory + @"\youtube.apk", reinstall: false);
Данный код заливает apk на телефон в папку /data/local/tmp и пытается установить оттуда.
Если устройство не рутованное, этот код не сработает т.к. нет прав доступа для установки apk из этой папки. Тестилось на Android 10.

Решается следующим способом
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
var device = a.Device();

string apk = @"D:/apps/Android/aida64.apk";
using(var fs = new FileStream(apk, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    AdbClient.Instance.Install(device, fs);
}
 
  • Спасибо
Реакции: pym933, Nukoller и trecho
прошу прощение за вопрос, а с Мэму есть у кого-то опыт удаления гугл сервисов конкретному устройству ip:port через adb?
 

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