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

Помогите с импортом .vcf файла на Android 7 через adb.

Импортирую данной командой
C#:
Развернуть Свернуть Копировать
adb shell am start -t "text/vcard" -d "file:///storage/sdcard0/Download/contacts.vcf" -a android.intent.action.VIEW com.android.contacts

На Android 4 и 5 нормально импортирует. А на Android 7 пишет Не удалось импортировать данные vCard (Ошибка ввода-вывода)

Хотя командой
C#:
Развернуть Свернуть Копировать
adb shell pm clear com.android.contacts
успешно очищает контакты и на 7 версии.

Может кто сталкивался с такой проблемой?
 
  • Спасибо
Реакции: Dorian_Gray
Никто не сталкивался с проблемой, что после того как через memuc (типо адб) изменишь конфигурацию эмулятора ( мак-адрес например ) один раз оно сработает, а вот на второй\третий раз уже не прокатывает?
Пробовал переустановить всё, опять первый раз работает, а вот после релоуда и повторного изменения уже нет.
Опишу по пунктам, если кто не понял.
1. Меняю конфигурацию командой setconfigex
2. Запускаю эмулятор
3. Вуаля, мак сменился.
4. Закрываю его командой stop через тот же memuc
5. Меняю конфигурацию командой setconfigex
6. Запускаю эмулятор
7. Ничего не меняется всё по старому.
Переустановка помогает да, на одну попытку. Есть какой то процесс который не закрывается вместе с эмулятором, сталкивался кто? Ранее оставлял вопрос в теме, но тут именно с мему статья написана.
 
Кто ни будь разобрался как получить контент в нормальной кодировке если буквы русские?
Или подскажите пожалуйста что это за кодировка?
â¨ÐлаÑÑ, как -бÑдÑо Ñам едеÑÑ Ð² ÑÑом поезде. 6â дâ .â
 
Привет, дорогие зенщики! :az:
! :bt:

Подскажите как парсить данные не в список, а в переменную
Вот стандартный парсинг в список
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
//project.Lists["likes"].Clear();
project.Lists["likes"].AddRange(a.Parse("//node[@resource-id='com.zhiliaoapp.musically.go:id/rg' and @class='android.widget.TextView']", "text", 0, 5)); //XPath, какой аттрибут парсить, Index, Секунды
Пробовал так, не подошло
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
//project.Lists["likes"].Clear();
project.Variables["likes"].AddRange(a.Parse("//node[@resource-id='com.zhiliaoapp.musically.go:id/rg' and @class='android.widget.TextView']", "text", 0, 5)); //XPath, какой аттрибут парсить, Index, Секунды
 
  • Спасибо
Реакции: udder
Подскажите как парсить данные не в список, а в переменную
Вот стандартный парсинг в список
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
//project.Lists["likes"].Clear();
project.Lists["likes"].AddRange(a.Parse("//node[@resource-id='com.zhiliaoapp.musically.go:id/rg' and @class='android.widget.TextView']", "text", 0, 5)); //XPath, какой аттрибут парсить, Index, Секунды
Пробовал так, не подошло
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
//project.Lists["likes"].Clear();
project.Variables["likes"].AddRange(a.Parse("//node[@resource-id='com.zhiliaoapp.musically.go:id/rg' and @class='android.widget.TextView']", "text", 0, 5)); //XPath, какой аттрибут парсить, Index, Секунды

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];
 
Последнее редактирование:
  • Спасибо
Реакции: udder и bashka
C#:
Развернуть Свернуть Копировать
project.Variables["likes"] = a.Parse("//node[@resource-id='com.zhiliaoapp.musically.go:id/rg' and @class='android.widget.TextView']", "text", 0, 5); //XPath, какой аттрибут парсить, Index, Секунды
Ваш код выдает ошибку.
Компиляция кода Ошибка в действии "CS0200" "Property or indexer 'ILocalVariables.this[string]' cannot be assigned to -- it is read only". [Строка: 7; Cтолбец: 1]
А старый нормально парсит в список.

C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
project.Lists["likes"].Clear();
project.Lists["likes"].AddRange(a.Parse("//node[@resource-id='com.zhiliaoapp.musically.go:id/rg' and @class='android.widget.TextView']", "text", 0, 5)); //XPath, какой аттрибут парсить, Index, Секунды

// project.Variables["likes"] = a.Parse("//node[@resource-id='com.zhiliaoapp.musically.go:id/rg' and @class='android.widget.TextView']", "text", 0, 5); //XPath, какой аттрибут парсить, Index, Секунды

Можете дать один пример работающего парсинга в переменную?
 
  • Спасибо
Реакции: udder
Ваш код выдает ошибку.
Компиляция кода Ошибка в действии "CS0200" "Property or indexer 'ILocalVariables.this[string]' cannot be assigned to -- it is read only". [Строка: 7; Cтолбец: 1]
А старый нормально парсит в список.

C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
project.Lists["likes"].Clear();
project.Lists["likes"].AddRange(a.Parse("//node[@resource-id='com.zhiliaoapp.musically.go:id/rg' and @class='android.widget.TextView']", "text", 0, 5)); //XPath, какой аттрибут парсить, Index, Секунды

// project.Variables["likes"] = a.Parse("//node[@resource-id='com.zhiliaoapp.musically.go:id/rg' and @class='android.widget.TextView']", "text", 0, 5); //XPath, какой аттрибут парсить, Index, Секунды

Можете дать один пример работающего парсинга в переменную?
ответил в личке
 
  • Спасибо
Реакции: udder
организация многопоточного режима и обработка зависаний.
Часто при многопотоке устройства отваливаются (device.State = Offline и disconnect) можно как то переподключить устройство без его перезагрузки?

Пробовал AdbClient.Instance.Connect(nameDevice); но подключение не восстанавливается. Есть еще варианты?
 
  • Спасибо
Реакции: udder
Часто при многопотоке устройства отваливаются (device.State = Offline и disconnect) можно как то переподключить устройство без его перезагрузки?

Пробовал AdbClient.Instance.Connect(nameDevice); но подключение не восстанавливается. Есть еще варианты?
Тоже думаю как конекниться обратно при недоступности телефона. У вас реальный телефоны или виртуальные?
 
Последнее редактирование:
  • Спасибо
Реакции: bashka
пока тестирую и ловлю эти ошибки на ноксе
А я решил сделать шаг вперед и перевести все на мему эмулятор, хотя вначале было на ноксе.. Думаю команда зены не зря перевела дроид с нокса на мему, как сделают много поток будет самое то. В чем плюс этого нокса?
 
А я решил сделать шаг вперед и перевести все на мему эмулятор, хотя вначале было на ноксе.. Думаю команда зены не зря перевела дроид с нокса на мему, как сделают много поток будет самое то. В чем плюс этого нокса?
Просто хочется разнообразия. а у дроида и не было нокса, там блюстакс был вроде.
 
Последнее редактирование:
Всем привет, я так понял вторая часть статьи так и не вышла?
 
  • Спасибо
Реакции: WLDN
Всем привет, я так понял вторая часть статьи так и не вышла?
Привет, в декабре катастрофически не хватало времени на участие в конкурсе. Если весной будет поспокойнее, то сделаю вторую часть.
 
Подскажите как тапнуть по координатам если они постоянны, а точнее записаны в переменные x и y
За ранее спасибо
 
71192

Есть диапазон данных X=649-720,Y=122-215 из UI Automatator Viewer
Как тапнуть (touch) по этому диапозону
Помогите пжл. Пол дня ломаю голову
 
  • Спасибо
Реакции: ErikMoor
@WLDN
Для подключения реального устройства по USB(если это возможно), что нужно указывать здесь:
C#:
Развернуть Свернуть Копировать
AdbClient.Instance.Connect(new DnsEndPoint(?));
у метода Connect() три перезагрузки, может есть метод подключения через USB, не могу правильно указать device.

P.S. По wifi получилось подключится без проблем, но нужен мобильный интернет :-) .
Разобрались с этим нюансом? А то я по тем же стопам иду. Хочу адаптировать шаблон под реальные смартфоны, но очень туго получается.
Главный косяк: в большинстве случаев uiautomatorviewer выгружает в XML только урл браузера без содержания страницы. В эмуляторах такое тоже могло происходить, но очень редко, а тут наоборот почти постоянно так.
---------------------------
Я подключал.Нужны доп. команды.
Я делал так:
ПЕРЕД НАЧАЛОМ УСТАНОВИТЬ 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-можно запускать проект
А как узнать "ip на смарте" ? Я через консоль Linux командами узнаю, типа ввожу:
Код:
Развернуть Свернуть Копировать
adb shell ifconfig
Получаю:
Код:
Развернуть Свернуть Копировать
lo        Link encap:UNSPEC
          inet addr:127.0.0.1  Mask:255.0.0.0....
Это оно?
 
Разобрались с этим нюансом?
Я подключил телефон по Wi-Fi:
C#:
Развернуть Свернуть Копировать
AdbClient.Instance.Connect(new DnsEndPoint("192.168.0.102", 5553));
и на этом успокоился).
Да, я такой командой получаю, когда несколько телефонов подключено
C#:
Развернуть Свернуть Копировать
adb -s IBJNYHСЕРИЙНИКтЕЛЕФОНА shell ifconfig wlan0

Безымянный рисунок.png
Главный косяк: в большинстве случаев uiautomatorviewer выгружает в XML только урл браузера без содержания страницы
У меня два тела с 6 андроидом, с браузерами никогда не было проблем, если я правильно тебя понял:
Безымянный рисунок3.png

Безымянный рисунок1.png

Безымянный рисунок2.png
 
  • Спасибо
Реакции: orka13
Я подключил телефон по Wi-Fi:
C#:
Развернуть Свернуть Копировать
AdbClient.Instance.Connect(new DnsEndPoint("192.168.0.102", 5553));
и на этом успокоился).

Да, я такой командой получаю, когда несколько телефонов подключено
C#:
Развернуть Свернуть Копировать
adb -s IBJNYHСЕРИЙНИКтЕЛЕФОНА shell ifconfig wlan0


У меня два тела с 6 андроидом, с браузерами никогда не было проблем, если я правильно тебя понял:
А как тогда при включенном Wifi на телефоне и подключении ADB-Wifi заставить приложения (браузер) на телефоне работать в 4G сети? Не смог нагуглить решение. Первое что в голову сбрело: костылем настроить на WiFi-роутере правилами (благо там Микротик с кучей опций) для телефона только локальную сеть с ПК, и не давать выходит в интернет. Тогда логично что телефон должен продолжать 4G использовать для приложений.
У меня тот косяк с ADB на трех разных телефонах с Андроид 4, 8, 9. Подозреваю что лучше взять другой чистый комп и на нем тестировать, а то может я нагородил лишнего с ADB\JAVA, у меня там разные эмуляторы до того работали.
 
Не получилось побороть этот глюк с неполным XML. Пробовал локализировать причину:
  • на другом ПК с нуля ставить ADB из этого топика,
  • потом ADB из 4pda,
  • потом ADB из последней ANDROID STUDIO,
  • подключал по Wifi\USB,
  • тестил в зенке, в uiautomatorviewer.bat, и вручную с консоли командой:
Код:
Развернуть Свернуть Копировать
adb shell uiautomator dump && adb pull /sdcard/window_dump.xml && start window_dump.xml

но всегда итог тот же:
если XML-файл выгрузки слишком большой (допустим больше 100 Килобайт, это больше ~100 000 символов), то в ~80% случаев его XML будет будто обрезан, то есть только первые элементы дерева попадают в него. Пример, где часто ловлю крупные XML: работа с выдачей Google в Chrome браузере, там часто невидимые элементы тоже попадают в XML-файл, увеличивая его размер.
В гугле есть одинокие подобные жалобы, но решений не нашел.
 
  • Спасибо
Реакции: IVANGOOD
Интересный глюк выскочил. При вводе текста через команду
C#:
Развернуть Свернуть Копировать
a.Text(name); //ввод текста
все дубли букв которые стоят рядом будут удалены.
Например вместо Kitty будет Kity

Так же данная команда не воспринимает текст с пробелами
 
a.Click("//node[contains(@text, 'Hey Bro') and @class='android.widget.Button']", 0, 10);
Только учитывайте, что регистр текста тоже важен и по созданному xpath должен находиться всего 1 элемент. Рекомендую почитать статьи по работе с xpath, они есть и на форуме и на других сайтах. Можете поискать видео на ютуб, так же обучение по xpath есть в различных видеокурсах (например в ZennoAcademy от sibbora, возможно есть в курсах других авторов)
Подскажите пжл, можно ли вместо "Hey Bro" вставить регулярку? Если да ,то как это реализовать ? К примеру регулярку Hey\Bro.*
 
Подскажите пжл, можно ли вместо "Hey Bro" вставить регулярку? Если да ,то как это реализовать ? К примеру регулярку Hey\Bro.*
Вам надо научиться составлять пути xpath, и регулярки использовать только в случае, когда без них не обойтись, иначе может работать с ошибкой/ В случае работы с элементами регулярки не подходят. Можно искать по частичному совпадению через contains, но и в этом случае, вы должны понимать, какой элемент найдется.
 
  • Спасибо
Реакции: ErikMoor
В том то и дело что по xpath не отловить то что мне нужно, только регуляркой можно
 
В том то и дело что по xpath не отловить то что мне нужно, только регуляркой можно
Скорее всего можно, но сложнее. Тогда можешь пробовать определить координаты для клика.
 
Подскажите пжл, можно ли вместо "Hey Bro" вставить регулярку? Если да ,то как это реализовать ? К примеру регулярку Hey\Bro.*
В xpath2.0 есть поддержка регулярок. Вот пример //div[matches(@id,'foo\d+')] пробуйте
 
  • Спасибо
Реакции: udder

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