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

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
566
Баллы
93
Давай тогда вернемся к С
Если в фразе присутствует пробел, тогда не работает
А если пробела нет - все работает

Не работает
C#:
var a = project.Context["ADB"];
a.Text("Helo Friend"); //ввод текста
Работает
C#:
var a = project.Context["ADB"];
a.Text("Helo_Friend"); //ввод текста
В комментариях уже есть ответ на этот вопрос. Замена пробела на %s
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
В комментариях уже есть ответ на этот вопрос. Замена пробела на %s
21.png


Почему то записывает без пробела хотя указано с пробелом Hello%sWord


C#:
var a = project.Context["ADB"];
a.Text(project.Variables["Client"].Value); //ввод текста
 

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
566
Баллы
93
  • Спасибо
Реакции: udder

morgansho

Client
Регистрация
18.11.2018
Сообщения
16
Благодарностей
4
Баллы
3
А список event'ов ограничен 85, как написано в статье?
наткнулся на полный список event'ов https://gist.github.com/arjunv/2bbcca9a1a1c127749f8dcb6d36fb0bc
конкретно мне интересен "key_paste": "adb shell input keyevent 279" , потому что при вводе текста ещё пробел можно заменить на %s , но буквы или знаки типа "β à ñ" и тд не могу ввести. Это возможно у меня только с помощью копировать/вставить)
может будут какие-то идеи как можно сделать ввод таких знаков или как вставить текст такой?)
 
  • Спасибо
Реакции: sergio197675

Szerzs

Client
Регистрация
15.06.2019
Сообщения
260
Благодарностей
68
Баллы
28
Чем мне нравится этот метод автоматизации,это тем,что он работает и в nox и в memu.Я хотел попробовать его ещё в Genymotion-но не получилось настроить стартовые кубики (во первых-ip устройства не нашёл,во вторых-Get Pid,Get Device.
Чем хорош Genymotion: если на моём рабочем ноуте могу запустить постер+1 nox,то с постером в Genymotion могу запустить 3 эмулятора! Производительность-бешеная! Я думаю,это многие бы оценили.
 
  • Спасибо
Реакции: Yuriy Zymlex
H

Hamna

Guest
Всем привет, подключал кто-нибудь физические устройства таким методом? Подскажите правильно я понимаю: по идее телефон сразу подключается и не надо его через дополнительные команды подключать или надо устанавливать соединение через ip и порт? Я совсем запутался
 
  • Спасибо
Реакции: orka13 и Eldario

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
23.png


Приветствую, подскажите пжл
Как можно бороться с этой нодой?
 

Szerzs

Client
Регистрация
15.06.2019
Сообщения
260
Благодарностей
68
Баллы
28
Всем привет, подключал кто-нибудь физические устройства таким методом? Подскажите правильно я понимаю: по идее телефон сразу подключается и не надо его через дополнительные команды подключать или надо устанавливать соединение через ip и порт? Я совсем запутался
Я подключал.Нужны доп. команды.
Я делал так:
ПЕРЕД НАЧАЛОМ УСТАНОВИТЬ USB ДРАЙВЕР СМАРТФОНА!
1.Включил режим разработчика.Отладка по usb.Узнал ip на смарте (скажем он у нас 192.168.0.102).
2.Вписал их в проекте,где нужно.
3. Поочерёдно в командной строке вводил эти команды (думал автоматизировать через кубики-но не получилось.Может кто подскажет?):
1- adb kill-server

2- adb usb

3- adb tcpip 5555

4- adb connect 192.168.0.102:5555
Как получили в 4м пункте ответ connected to 192.168.0.105:5555-можно запускать проект
 

Szerzs

Client
Регистрация
15.06.2019
Сообщения
260
Благодарностей
68
Баллы
28
У меня такой вопрос по запуску memu в командной строке : вот в nox скажем запустить по номеру эмулятор команда такая (запускаю через батник):
"D:\Program Files\Nox\bin\Nox.exe" -clone:Nox_10".
Вроде те же пути и названия в memu ("D:\Program Files\Microvirt\MEmu\MEmu.exe" -clone:MEmu_10)" - а не работает).
Может кно-нибудь подсказать: как memu по номерам запускать?
 

radv

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

dr.reklam

Client
Регистрация
02.06.2020
Сообщения
64
Благодарностей
15
Баллы
8
Подскажите как правильно вставить переменную в путь xpath

C#:
var a = project.Context["ADB"];

a.Wait("//node[@text=(project.Variables["random"].Value)]", 0, 10); //XPath, Index, Секунды
Так не получается, пишет
"Компиляция кода Ошибка в действии "CS1525" "Недопустимый терм ")" в выражении". [Строка: 2; Cтолбец: 66]"
 

morgansho

Client
Регистрация
18.11.2018
Сообщения
16
Благодарностей
4
Баллы
3
Подскажите как правильно вставить переменную в путь xpath

C#:
var a = project.Context["ADB"];

a.Wait("//node[@text=(project.Variables["random"].Value)]", 0, 10); //XPath, Index, Секунды
Так не получается, пишет
"Компиляция кода Ошибка в действии "CS1525" "Недопустимый терм ")" в выражении". [Строка: 2; Cтолбец: 66]"
попробуй так
C#:
var a = project.Context["ADB"];

a.Wait("//node[@text='"+project.Variables["random"].Value+"']", 0, 10); //XPath, Index, Секунды
 

ErikMoor

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

25.png
 

Szerzs

Client
Регистрация
15.06.2019
Сообщения
260
Благодарностей
68
Баллы
28
Может быть, что нужно экранировать вводимые символы с помощью \ перед вводимым символом. Или заменить пробелы на %s (например, если проблема связана с ними)
При вводе предложения вместо пробелов вставляю %s (иначе вообще ничего не пишется), но слова склеиваются в одно длинное предложение.Не подскажете,в чём проблема? может есть другие способы отправлять нормальные предложения? Символ \ не помогает.
 

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
566
Баллы
93
При вводе предложения вместо пробелов вставляю %s (иначе вообще ничего не пишется), но слова склеиваются в одно длинное предложение.Не подскажете,в чём проблема? может есть другие способы отправлять нормальные предложения? Символ \ не помогает.
Не могу подсказать, не знаю. Есть другой универсальный способ, готов продать его.
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
Подскажите пжл, как запустить нужную копию nox


C#:
var proc = System.Diagnostics.Process.Start(project.Variables["settings_nox"].Value, Regex.Match(project.Variables["start_cmd"].Value, "-clone:.*").ToString());

Этим кодом запускается первый эмуль
К примеру список эмулей:
1
2
3
4
Кодом что выше все время запускается первый эмуль, но если первый уже запущен, то следующий по списку не запускается
Но мне надо что бы запускал именно тот что мне надо к примеру под номером 3
 

dizney

Client
Регистрация
25.01.2014
Сообщения
51
Благодарностей
52
Баллы
18
Подскажите пжл, как запустить нужную копию nox


C#:
var proc = System.Diagnostics.Process.Start(project.Variables["settings_nox"].Value, Regex.Match(project.Variables["start_cmd"].Value, "-clone:.*").ToString());

Этим кодом запускается первый эмуль
К примеру список эмулей:
1
2
3
4
Кодом что выше все время запускается первый эмуль, но если первый уже запущен, то следующий по списку не запускается
Но мне надо что бы запускал именно тот что мне надо к примеру под номером 3
C#:
var param = project.Variables["param"].Value;
var proc = System.Diagnostics.Process.Start(project.Variables["settings_nox"].Value, Regex.Match(project.Variables["start_cmd"].Value, "-clone:Nox_"+param).ToString());
Переменная param, там добавляете копию эмулятора, начиная с 0.
 
  • Спасибо
Реакции: Dorian_Gray и ErikMoor

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
Спасибо за ответ, но запускается все время первый эмулятор
Вот еще вопрос, а как тогда закрыть конкретный эмулятор ?
Этим кодом, он его выключает power , но окно открыто как на фото

C#:
var a = project.Context["ADB"];

a.KeyEvent("26"); //26 -->  "KEYCODE_POWER"
 

Вложения

  • 26 КБ Просмотры: 190

dizney

Client
Регистрация
25.01.2014
Сообщения
51
Благодарностей
52
Баллы
18
Спасибо за ответ, но запускается все время первый эмулятор
Вы пробовали подставить число отличное от 0? Если да, тогда вот рабочий код:

C#:
var param = project.Variables["param"].Value;

ProcessStartInfo startInfo1 = new ProcessStartInfo();
startInfo1.FileName = @"C:\Program Files\Nox\bin\nox.exe";//указываете свой путь
startInfo1.Arguments = @"start -clone:Nox_"+param;//параметры выполнения adb команды
startInfo1.WindowStyle = ProcessWindowStyle.Hidden;//скрываем окно выполнения
var process = System.Diagnostics.Process.Start(startInfo1);
Код для закрытия конкретного эмулятора:

C#:
var param = project.Variables["param"].Value;

ProcessStartInfo startInfo1 = new ProcessStartInfo();
startInfo1.FileName = @"C:\Program Files\Nox\bin\nox.exe";//указываете свой путь
startInfo1.Arguments = @"-clone:Nox_"+param+" -quit";//параметры выполнения adb команды
startInfo1.WindowStyle = ProcessWindowStyle.Hidden;//скрываем окно выполнения
Process.Start(startInfo1).WaitForExit();
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 529
Благодарностей
3 375
Баллы
113
Если запускать с открытого окна cmd, все вводится верно
Но если запускать батник который лежит по этому же пути c:\Program Files (x86)\Microvirt\MEmu\1.bat
Учитывайте так же, что кодировка консоли и файла имеете значение всегда.
62894

В C# строка UTF-8.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 529
Благодарностей
3 375
Баллы
113
Чем хорош Genymotion: если на моём рабочем ноуте могу запустить постер+1 nox,то с постером в Genymotion могу запустить 3 эмулятора! Производительность-бешеная! Я думаю,это многие бы оценили.
К сожалению, Genymotion продукт не бесплатный и со своими условиями, и наврядли бы многих устроила + его стоимость к цене дроида.
 

Szerzs

Client
Регистрация
15.06.2019
Сообщения
260
Благодарностей
68
Баллы
28
Вот есть 2 кода: тап по координатам и свайп.
Свайп:

var a = project.Context["ADB"];
a.Swipe("200", "600", "200", "200", "900"); //координаты x1, y1, x2, y2, sss - скорость в милисекундах

Как вставить из переменной рандомное число в координату y1 (вместо значения "600")-чтоб можно было рандомно менять длину свайпа.

И тап по координатам:

var a = project.Context["ADB"];
a.Command("input tap 294 36", false); //где x и y твои координаты

Так же: из переменной брать значения x и y
 
  • Спасибо
Реакции: GrandArab

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
566
Баллы
93
Вот есть 2 кода: тап по координатам и свайп.
Свайп:

var a = project.Context["ADB"];
a.Swipe("200", "600", "200", "200", "900"); //координаты x1, y1, x2, y2, sss - скорость в милисекундах

Как вставить из переменной рандомное число в координату y1 (вместо значения "600")-чтоб можно было рандомно менять длину свайпа.

И тап по координатам:

var a = project.Context["ADB"];
a.Command("input tap 294 36", false); //где x и y твои координаты

Так же: из переменной брать значения x и y
Свайп:
var a = project.Context["ADB"];
string y1 = Global.Classes.rnd.Next(400,800).ToString();
    a.Swipe("200", y1, "200", "200", "900"); //координаты x1, y1, x2, y2, sss - скорость в милисекундах
Тап по координатам:
var a = project.Context["ADB"];
string x = Global.Classes.rnd.Next(200,400).ToString();
string y = Global.Classes.rnd.Next(20,40).ToString();
a.Command(String.Format("input tap {0} {1}",x, y), false); //где x и y твои координаты
 
  • Спасибо
Реакции: GrandArab

Szerzs

Client
Регистрация
15.06.2019
Сообщения
260
Благодарностей
68
Баллы
28
Свайп:
var a = project.Context["ADB"];
string y1 = Global.Classes.rnd.Next(400,800).ToString();
    a.Swipe("200", y1, "200", "200", "900"); //координаты x1, y1, x2, y2, sss - скорость в милисекундах
Тап по координатам:
var a = project.Context["ADB"];
string x = Global.Classes.rnd.Next(200,400).ToString();
string y = Global.Classes.rnd.Next(20,40).ToString();
a.Command(String.Format("input tap {0} {1}",x, y), false); //где x и y твои координаты

Спасибо-попробую.А существует ли вариант не парсинга а копирования? Обычно на сайтах ссылки завёрнуты просто в слова под нод content-desc:

Screenshot_1.png


Слово оплата-это ссылка.Вот есть вариант парсить или копировать именно ссылку?
 

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
566
Баллы
93
Спасибо-попробую.А существует ли вариант не парсинга а копирования? Обычно на сайтах ссылки завёрнуты просто в слова под нод content-desc:

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

Слово оплата-это ссылка.Вот есть вариант парсить или копировать именно ссылку?
Попробуй сделать dump xml и поискать ссылку там, если в UIAutomator или в xml не выведет, то этим способом нельзя.
 
  • Спасибо
Реакции: Szerzs

Szerzs

Client
Регистрация
15.06.2019
Сообщения
260
Благодарностей
68
Баллы
28
var a = project.Context["ADB"];
string x = Global.Classes.rnd.Next(200,400).ToString();
string y = Global.Classes.rnd.Next(20,40).ToString();
a.Command(String.Format("input tap {0} {1}",x, y), false); //где x и y твои координаты


Тапает в одном месте.
 

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
566
Баллы
93
var a = project.Context["ADB"];
string x = Global.Classes.rnd.Next(200,400).ToString();
string y = Global.Classes.rnd.Next(20,40).ToString();
a.Command(String.Format("input tap {0} {1}",x, y), false); //где x и y твои координаты


Тапает в одном месте.
Ну я же не знаю какие тебе координаты нужны, подставь свои. Я сбрасываю пример всегда, а не код, который нужно использовать в работе.
 

Szerzs

Client
Регистрация
15.06.2019
Сообщения
260
Благодарностей
68
Баллы
28

loka23

Client
Регистрация
02.08.2019
Сообщения
134
Благодарностей
10
Баллы
18
Помогите :-) Застрял почти в самом начале. Что значит -
"Команды adb теперь можно пропустить через подключенную библиотеку SharpAdbClient."? Где эти команды выполнять? В cmd не получается, т.к. он не находит команды adb. Хоть в ноксе режим отладчика по USB включен.
Пробовал через телефон просто путём вывода нужного приложения, но оно с данным именем не запускается.
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 820
Благодарностей
2 030
Баллы
113
Помогите :-) Застрял почти в самом начале. Что значит -
"Команды adb теперь можно пропустить через подключенную библиотеку SharpAdbClient."? Где эти команды выполнять? В cmd не получается, т.к. он не находит команды adb. Хоть в ноксе режим отладчика по USB включен.
Пробовал через телефон просто путём вывода нужного приложения, но оно с данным именем не запускается.
а сам adb установлен? Прочитайте еще раз не торопясь (в том числе под спойлерами). Проверьте, все ли нужное для работы установили.
 
  • Спасибо
Реакции: WLDN

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