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

radv

Client
Регистрация
11.05.2015
Сообщения
3 785
Благодарностей
1 949
Баллы
113

ruthless

Client
Регистрация
13.02.2017
Сообщения
220
Благодарностей
63
Баллы
28
Ребят, помогите плз:
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, Секунды
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 718
Баллы
113
Ребят, помогите плз:
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

ruthless

Client
Регистрация
13.02.2017
Сообщения
220
Благодарностей
63
Баллы
28
C#:
a.Click($"//node[@bounds='{project.Variables["need_bounds"].Value}' and @package='com.facebook.lite']", 0, 30); //XPath, Index, Секунды
Молниеносный ответ, благодарю :-)
НО...
Выполнение действия CSharp OwnCode. Не удается выполнить привязки исполняющей среды по нулевой ссылке
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
C#:
a.Click("//node[@bounds='" + project.Variables["need_bounds"].Value + "' and @package='com.facebook.lite']", 0, 30);
 
  • Спасибо
Реакции: bizon_stas и ruthless

ruthless

Client
Регистрация
13.02.2017
Сообщения
220
Благодарностей
63
Баллы
28

ruthless

Client
Регистрация
13.02.2017
Сообщения
220
Благодарностей
63
Баллы
28
C#:
a.Click($"//node[@bounds='{project.Variables["need_bounds"].Value}' and @package='com.facebook.lite']", 0, 30); //XPath, Index, Секунды
Извиняюсь. Всё отлично отработало. Коннект с адб/ВМ слетел просто. Благодарю вас :-)
 

ruthless

Client
Регистрация
13.02.2017
Сообщения
220
Благодарностей
63
Баллы
28
Кто ни будь разобрался как получить контент в нормальной кодировке если буквы русские?
Или подскажите пожалуйста что это за кодировка?
â¨ÐлаÑÑ, как -бÑдÑо Ñам едеÑÑ Ð² ÑÑом поезде. 6â дâ .â
Приветствую. Раньше на сервере декодировал это дело. Сейчас на пк тесты проводил, обнаружил что кодировка читается как русский без проблем. Вы решили данную проблему? Я так полагаю нужно смотреть в сторону региональных настроек в системе?
 

ruthless

Client
Регистрация
13.02.2017
Сообщения
220
Благодарностей
63
Баллы
28
Все возможные настройки изменил на сервере. Всё равно текст на русском парсится в Windows-1251.
 

ruthless

Client
Регистрация
13.02.2017
Сообщения
220
Благодарностей
63
Баллы
28
Приветствую. Раньше на сервере декодировал это дело. Сейчас на пк тесты проводил, обнаружил что кодировка читается как русский без проблем. Вы решили данную проблему? Я так полагаю нужно смотреть в сторону региональных настроек в системе?
Нашёл решение, библиотеки .dll с пк на сервер перенес, проблема отвалилась.
Теперь русский текст парсится корректно.
 
  • Спасибо
Реакции: WLDN

webstudioNSS

Client
Регистрация
30.01.2020
Сообщения
44
Благодарностей
6
Баллы
8
Здравствуйте! А подскажите пожалуйста, какой командой в adb можно удалить инстанс , например Nox_1 или другие
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113

webstudioNSS

Client
Регистрация
30.01.2020
Сообщения
44
Благодарностей
6
Баллы
8
Ты ничего не путаешь?
а что не так? вопрос по теме автоматизации Андройд. Перефразирую: не знаю как в через адб удалять созданные устройства Nox, какой командой. Возможно товарищи подскажут.
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
а что не так? вопрос по теме автоматизации Андройд
Все не так, простыми словами adb управляет системой андроид, а не программой NOX. Нужно удалить Nox_1, удаляй папку с копией эмулятора с помощью кубика или c#. В Memu есть своя оболочка для управления эмуляторами memuc в нокс такой вроде нет, но все равно к adb это отношения не имеет.
 
  • Спасибо
Реакции: WLDN и webstudioNSS

webstudioNSS

Client
Регистрация
30.01.2020
Сообщения
44
Благодарностей
6
Баллы
8
Все не так, простыми словами adb управляет системой андроид, а не программой NOX. Нужно удалить Nox_1, удаляй папку с копией эмулятора с помощью кубика или c#. В Memu есть своя оболочка для управления эмуляторами memuc в нокс такой вроде нет, но все равно к adb это отношения не имеет.
понял, спасибо
 
  • Спасибо
Реакции: Koqpe

ruthless

Client
Регистрация
13.02.2017
Сообщения
220
Благодарностей
63
Баллы
28
  • Спасибо
Реакции: webstudioNSS

devffy

Client
Регистрация
16.03.2019
Сообщения
542
Благодарностей
188
Баллы
43

ruthless

Client
Регистрация
13.02.2017
Сообщения
220
Благодарностей
63
Баллы
28
все таки зря покупал зеннодроид? :aq:
ага, потратил уйму времени на написание шаблона, обкатку, фиксы, костыли - в итоге мой внутренний псих достиг предела и решил уйти обратно :-) думал манибек запросить, но решил дать ему шанс на реабилитацию, всё таки стараются ребята над ним, хочется думать :-)
 
  • Спасибо
Реакции: devffy

sten30

Client
Регистрация
05.09.2017
Сообщения
247
Благодарностей
30
Баллы
28
Как получить весь XML экрана приложения в переменную?
 

ruthless

Client
Регистрация
13.02.2017
Сообщения
220
Благодарностей
63
Баллы
28

Вложения

  • Спасибо
Реакции: sten30

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
566
Баллы
93
Друзья, у вас есть
a.Command("команда", true);

используйте это для дампа. В переменной receiver будет ваш xml.
 

morfeus

Client
Регистрация
23.02.2012
Сообщения
171
Благодарностей
28
Баллы
28
Может кто поможет... затеянный регер + создаватель я создал и работает медленно правда... теперь хочу избавиться от консольных окон...

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

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 она тоже вся на батниках
 

trecho

Client
Регистрация
12.07.2018
Сообщения
171
Благодарностей
124
Баллы
43
Заметил вот такую особенность, когда запущено приложение psiphon
Открыто именно как на картинке ниже, не запускается UI Automator
Возможно кто то сталкивался с данной проблемой и знает как решить?

Посмотреть вложение 62220
у меня похожая проблема, вам свою удалось решить?
 

trecho

Client
Регистрация
12.07.2018
Сообщения
171
Благодарностей
124
Баллы
43
Потратил день на поиски источника проблемы, делюсь опытом
В одном приложении, один экран, ничем не примечательней других, выдавал ошибку в 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 файл.
 
Последнее редактирование:

baracuda

Client
Регистрация
19.06.2013
Сообщения
792
Благодарностей
277
Баллы
63
Всем доброго дня.
подскажите, как вводить посимвольно текст(с паузами)

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

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

через adb возможно тоже пойдёт вариант
 

vrska

Client
Регистрация
07.02.2010
Сообщения
589
Благодарностей
408
Баллы
63
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

trecho

Client
Регистрация
12.07.2018
Сообщения
171
Благодарностей
124
Баллы
43
реальное устройство, несмотря на все настройки, иногда само собой блокируется, и когда такое случается, a.Wait ищет элемент бесконечно
как сделать проверку блокировки экрана?
 

vrska

Client
Регистрация
07.02.2010
Сообщения
589
Благодарностей
408
Баллы
63
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

vrska

Client
Регистрация
07.02.2010
Сообщения
589
Благодарностей
408
Баллы
63
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

webstudioNSS

Client
Регистрация
30.01.2020
Сообщения
44
Благодарностей
6
Баллы
8
прошу прощение за вопрос, а с Мэму есть у кого-то опыт удаления гугл сервисов конкретному устройству ip:port через adb?
 

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