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

Давай тогда вернемся к С
Если в фразе присутствует пробел, тогда не работает
А если пробела нет - все работает

Не работает
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Text("Helo Friend"); //ввод текста

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


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


C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Text(project.Variables["Client"].Value); //ввод текста
 
Посмотреть вложение 62077

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


C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Text(project.Variables["Client"].Value); //ввод текста
По всей видимости, потому что у Memu в приложениях багнутый ввод с помощью adb input
 
  • Спасибо
Реакции: udder
А список event'ов ограничен 85, как написано в статье?
наткнулся на полный список event'ов https://gist.github.com/arjunv/2bbcca9a1a1c127749f8dcb6d36fb0bc
конкретно мне интересен "key_paste": "adb shell input keyevent 279" , потому что при вводе текста ещё пробел можно заменить на %s , но буквы или знаки типа "β à ñ" и тд не могу ввести. Это возможно у меня только с помощью копировать/вставить)
может будут какие-то идеи как можно сделать ввод таких знаков или как вставить текст такой?)
 
  • Спасибо
Реакции: sergio197675
Чем мне нравится этот метод автоматизации,это тем,что он работает и в nox и в memu.Я хотел попробовать его ещё в Genymotion-но не получилось настроить стартовые кубики (во первых-ip устройства не нашёл,во вторых-Get Pid,Get Device.
Чем хорош Genymotion: если на моём рабочем ноуте могу запустить постер+1 nox,то с постером в Genymotion могу запустить 3 эмулятора! Производительность-бешеная! Я думаю,это многие бы оценили.
 
  • Спасибо
Реакции: Yuriy Zymlex
Всем привет, подключал кто-нибудь физические устройства таким методом? Подскажите правильно я понимаю: по идее телефон сразу подключается и не надо его через дополнительные команды подключать или надо устанавливать соединение через ip и порт? Я совсем запутался
 
  • Спасибо
Реакции: orka13 и Eldario
23.png


Приветствую, подскажите пжл
Как можно бороться с этой нодой?
 
Всем привет, подключал кто-нибудь физические устройства таким методом? Подскажите правильно я понимаю: по идее телефон сразу подключается и не надо его через дополнительные команды подключать или надо устанавливать соединение через 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-можно запускать проект
 
У меня такой вопрос по запуску memu в командной строке : вот в nox скажем запустить по номеру эмулятор команда такая (запускаю через батник):
"D:\Program Files\Nox\bin\Nox.exe" -clone:Nox_10".
Вроде те же пути и названия в memu ("D:\Program Files\Microvirt\MEmu\MEmu.exe" -clone:MEmu_10)" - а не работает).
Может кно-нибудь подсказать: как memu по номерам запускать?
 
Подскажите как правильно вставить переменную в путь xpath

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

a.Wait("//node[@text=(project.Variables["random"].Value)]", 0, 10); //XPath, Index, Секунды
Так не получается, пишет
"Компиляция кода Ошибка в действии "CS1525" "Недопустимый терм ")" в выражении". [Строка: 2; Cтолбец: 66]"
 
Подскажите как правильно вставить переменную в путь 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, Секунды
 
Заметил вот такую особенность, когда запущено приложение psiphon
Открыто именно как на картинке ниже, не запускается UI Automator
Возможно кто то сталкивался с данной проблемой и знает как решить?

25.png
 
Может быть, что нужно экранировать вводимые символы с помощью \ перед вводимым символом. Или заменить пробелы на %s (например, если проблема связана с ними)

При вводе предложения вместо пробелов вставляю %s (иначе вообще ничего не пишется), но слова склеиваются в одно длинное предложение.Не подскажете,в чём проблема? может есть другие способы отправлять нормальные предложения? Символ \ не помогает.
 
При вводе предложения вместо пробелов вставляю %s (иначе вообще ничего не пишется), но слова склеиваются в одно длинное предложение.Не подскажете,в чём проблема? может есть другие способы отправлять нормальные предложения? Символ \ не помогает.
Не могу подсказать, не знаю. Есть другой универсальный способ, готов продать его.
 
Подскажите пжл, как запустить нужную копию 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
 
Подскажите пжл, как запустить нужную копию 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
Спасибо за ответ, но запускается все время первый эмулятор
Вот еще вопрос, а как тогда закрыть конкретный эмулятор ?
Этим кодом, он его выключает power , но окно открыто как на фото

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

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

Вложения

  • 26.png
    26.png
    26 KB · Просмотры: 277
Спасибо за ответ, но запускается все время первый эмулятор

Вы пробовали подставить число отличное от 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();
 
Если запускать с открытого окна cmd, все вводится верно
Но если запускать батник который лежит по этому же пути c:\Program Files (x86)\Microvirt\MEmu\1.bat
Учитывайте так же, что кодировка консоли и файла имеете значение всегда.
62894

В C# строка UTF-8.
 
Чем хорош Genymotion: если на моём рабочем ноуте могу запустить постер+1 nox,то с постером в Genymotion могу запустить 3 эмулятора! Производительность-бешеная! Я думаю,это многие бы оценили.
К сожалению, Genymotion продукт не бесплатный и со своими условиями, и наврядли бы многих устроила + его стоимость к цене дроида.
 
Вот есть 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
Вот есть 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
Свайп:
Развернуть Свернуть Копировать
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


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

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

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


Тапает в одном месте.
 
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 твои координаты


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

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