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

Gang

Client
Joined
Apr 4, 2010
Messages
579
Reaction score
313
Points
63
Помогите с импортом .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 версии.

Может кто сталкивался с такой проблемой?
 
  • Thank you
Reactions: Dorian_Gray

Kinomanius

Активный пользователь
Joined
Jan 20, 2020
Messages
184
Reaction score
26
Points
28
Никто не сталкивался с проблемой, что после того как через memuc (типо адб) изменишь конфигурацию эмулятора ( мак-адрес например ) один раз оно сработает, а вот на второй\третий раз уже не прокатывает?
Пробовал переустановить всё, опять первый раз работает, а вот после релоуда и повторного изменения уже нет.
Опишу по пунктам, если кто не понял.
1. Меняю конфигурацию командой setconfigex
2. Запускаю эмулятор
3. Вуаля, мак сменился.
4. Закрываю его командой stop через тот же memuc
5. Меняю конфигурацию командой setconfigex
6. Запускаю эмулятор
7. Ничего не меняется всё по старому.
Переустановка помогает да, на одну попытку. Есть какой то процесс который не закрывается вместе с эмулятором, сталкивался кто? Ранее оставлял вопрос в теме, но тут именно с мему статья написана.
 

bashka

Client
Joined
Jun 13, 2017
Messages
182
Reaction score
130
Points
43
Кто ни будь разобрался как получить контент в нормальной кодировке если буквы русские?
Или подскажите пожалуйста что это за кодировка?
â¨ÐлаÑÑ, как -бÑдÑо Ñам едеÑÑ Ð² ÑÑом поезде. 6â дâ .â
 

bashka

Client
Joined
Jun 13, 2017
Messages
182
Reaction score
130
Points
43
Привет, дорогие зенщики! :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, Секунды
 
  • Thank you
Reactions: udder

bvbfor

Client
Joined
Apr 10, 2016
Messages
434
Reaction score
263
Points
63
Подскажите как парсить данные не в список, а в переменную
Вот стандартный парсинг в список
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];
 
Last edited:
  • Thank you
Reactions: udder and bashka

bashka

Client
Joined
Jun 13, 2017
Messages
182
Reaction score
130
Points
43
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, Секунды
Можете дать один пример работающего парсинга в переменную?
 
  • Thank you
Reactions: udder

bvbfor

Client
Joined
Apr 10, 2016
Messages
434
Reaction score
263
Points
63
Ваш код выдает ошибку.
Компиляция кода Ошибка в действии "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, Секунды
Можете дать один пример работающего парсинга в переменную?
ответил в личке
 
  • Thank you
Reactions: udder

radv

Client
Joined
May 11, 2015
Messages
3,855
Reaction score
2,086
Points
113
организация многопоточного режима и обработка зависаний.
Часто при многопотоке устройства отваливаются (device.State = Offline и disconnect) можно как то переподключить устройство без его перезагрузки?

Пробовал AdbClient.Instance.Connect(nameDevice); но подключение не восстанавливается. Есть еще варианты?
 
  • Thank you
Reactions: udder

bashka

Client
Joined
Jun 13, 2017
Messages
182
Reaction score
130
Points
43
Часто при многопотоке устройства отваливаются (device.State = Offline и disconnect) можно как то переподключить устройство без его перезагрузки?

Пробовал AdbClient.Instance.Connect(nameDevice); но подключение не восстанавливается. Есть еще варианты?
Тоже думаю как конекниться обратно при недоступности телефона. У вас реальный телефоны или виртуальные?
 

radv

Client
Joined
May 11, 2015
Messages
3,855
Reaction score
2,086
Points
113
Тоже думаю как конекниться обратно при недоступности телефона. У вас реальный телефоны или виртуальные?
пока тестирую и ловлю эти ошибки на ноксе
 
Last edited:
  • Thank you
Reactions: bashka

bashka

Client
Joined
Jun 13, 2017
Messages
182
Reaction score
130
Points
43
пока тестирую и ловлю эти ошибки на ноксе
А я решил сделать шаг вперед и перевести все на мему эмулятор, хотя вначале было на ноксе.. Думаю команда зены не зря перевела дроид с нокса на мему, как сделают много поток будет самое то. В чем плюс этого нокса?
 

radv

Client
Joined
May 11, 2015
Messages
3,855
Reaction score
2,086
Points
113
А я решил сделать шаг вперед и перевести все на мему эмулятор, хотя вначале было на ноксе.. Думаю команда зены не зря перевела дроид с нокса на мему, как сделают много поток будет самое то. В чем плюс этого нокса?
Просто хочется разнообразия. а у дроида и не было нокса, там блюстакс был вроде.
 
Last edited:

Jeronimo

Client
Joined
Jan 7, 2014
Messages
236
Reaction score
205
Points
43
Всем привет, я так понял вторая часть статьи так и не вышла?
 
  • Thank you
Reactions: WLDN

Hanma

Client
Joined
Jul 2, 2020
Messages
22
Reaction score
8
Points
3
Всем привет, я так понял вторая часть статьи так и не вышла?
nope, самостоятельно идет развитие
 
  • Thank you
Reactions: Jeronimo

WLDN

Client
Joined
Jul 9, 2015
Messages
357
Reaction score
569
Points
93
Всем привет, я так понял вторая часть статьи так и не вышла?
Привет, в декабре катастрофически не хватало времени на участие в конкурсе. Если весной будет поспокойнее, то сделаю вторую часть.
 

ErikMoor

Client
Joined
Mar 24, 2016
Messages
123
Reaction score
22
Points
18
Подскажите как тапнуть по координатам если они постоянны, а точнее записаны в переменные x и y
За ранее спасибо
 

ErikMoor

Client
Joined
Mar 24, 2016
Messages
123
Reaction score
22
Points
18
71192

Есть диапазон данных X=649-720,Y=122-215 из UI Automatator Viewer
Как тапнуть (touch) по этому диапозону
Помогите пжл. Пол дня ломаю голову
 

brun0

Client
Joined
Apr 28, 2020
Messages
36
Reaction score
22
Points
8
View attachment 71192
Есть диапазон данных X=649-720,Y=122-215 из UI Automatator Viewer
Как тапнуть (touch) по этому диапозону
Помогите пжл. Пол дня ломаю голову
я беру среднее значение, в твоем случае Х:
(720-649) /2 = 35; x = 649 + 35 = 684
 
  • Thank you
Reactions: ErikMoor

ErikMoor

Client
Joined
Mar 24, 2016
Messages
123
Reaction score
22
Points
18
я беру среднее значение, в твоем случае Х:
(720-649) /2 = 35; x = 649 + 35 = 684
Как в кубике это реализовать ?
 

ErikMoor

Client
Joined
Mar 24, 2016
Messages
123
Reaction score
22
Points
18
Как в кубике это реализовать ?
Сам разобрался
Точнее там уже все реализовано
Нужно только прописать xpath к объекту по которому нужно тапнуть
71206
 
  • Thank you
Reactions: WLDN and brun0

orka13

Client
Joined
May 7, 2015
Messages
2,182
Reaction score
2,193
Points
113
@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 командами узнаю, типа ввожу:
Code:
adb shell ifconfig
Получаю:
Code:
lo        Link encap:UNSPEC
          inet addr:127.0.0.1  Mask:255.0.0.0....
Это оно?
 

Koqpe

Client
Joined
Dec 23, 2014
Messages
1,099
Reaction score
648
Points
113
Разобрались с этим нюансом?
Я подключил телефон по 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
 
  • Thank you
Reactions: orka13

orka13

Client
Joined
May 7, 2015
Messages
2,182
Reaction score
2,193
Points
113
Я подключил телефон по 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, у меня там разные эмуляторы до того работали.
 

orka13

Client
Joined
May 7, 2015
Messages
2,182
Reaction score
2,193
Points
113
Не получилось побороть этот глюк с неполным XML. Пробовал локализировать причину:
  • на другом ПК с нуля ставить ADB из этого топика,
  • потом ADB из 4pda,
  • потом ADB из последней ANDROID STUDIO,
  • подключал по Wifi\USB,
  • тестил в зенке, в uiautomatorviewer.bat, и вручную с консоли командой:
Code:
adb shell uiautomator dump && adb pull /sdcard/window_dump.xml && start window_dump.xml
но всегда итог тот же:
если XML-файл выгрузки слишком большой (допустим больше 100 Килобайт, это больше ~100 000 символов), то в ~80% случаев его XML будет будто обрезан, то есть только первые элементы дерева попадают в него. Пример, где часто ловлю крупные XML: работа с выдачей Google в Chrome браузере, там часто невидимые элементы тоже попадают в XML-файл, увеличивая его размер.
В гугле есть одинокие подобные жалобы, но решений не нашел.
 
  • Thank you
Reactions: IVANGOOD

JuicyJose

Client
Joined
Dec 21, 2014
Messages
20
Reaction score
9
Points
3
Интересный глюк выскочил. При вводе текста через команду
C#:
a.Text(name); //ввод текста
все дубли букв которые стоят рядом будут удалены.
Например вместо Kitty будет Kity

Так же данная команда не воспринимает текст с пробелами
 

ErikMoor

Client
Joined
Mar 24, 2016
Messages
123
Reaction score
22
Points
18
a.Click("//node[contains(@text, 'Hey Bro') and @class='android.widget.Button']", 0, 10);
Только учитывайте, что регистр текста тоже важен и по созданному xpath должен находиться всего 1 элемент. Рекомендую почитать статьи по работе с xpath, они есть и на форуме и на других сайтах. Можете поискать видео на ютуб, так же обучение по xpath есть в различных видеокурсах (например в ZennoAcademy от sibbora, возможно есть в курсах других авторов)
Подскажите пжл, можно ли вместо "Hey Bro" вставить регулярку? Если да ,то как это реализовать ? К примеру регулярку Hey\Bro.*
 

radv

Client
Joined
May 11, 2015
Messages
3,855
Reaction score
2,086
Points
113
Подскажите пжл, можно ли вместо "Hey Bro" вставить регулярку? Если да ,то как это реализовать ? К примеру регулярку Hey\Bro.*
Вам надо научиться составлять пути xpath, и регулярки использовать только в случае, когда без них не обойтись, иначе может работать с ошибкой/ В случае работы с элементами регулярки не подходят. Можно искать по частичному совпадению через contains, но и в этом случае, вы должны понимать, какой элемент найдется.
 
  • Thank you
Reactions: ErikMoor

ErikMoor

Client
Joined
Mar 24, 2016
Messages
123
Reaction score
22
Points
18
В том то и дело что по xpath не отловить то что мне нужно, только регуляркой можно
 

radv

Client
Joined
May 11, 2015
Messages
3,855
Reaction score
2,086
Points
113
В том то и дело что по xpath не отловить то что мне нужно, только регуляркой можно
Скорее всего можно, но сложнее. Тогда можешь пробовать определить координаты для клика.
 

Gang

Client
Joined
Apr 4, 2010
Messages
579
Reaction score
313
Points
63
Подскажите пжл, можно ли вместо "Hey Bro" вставить регулярку? Если да ,то как это реализовать ? К примеру регулярку Hey\Bro.*
В xpath2.0 есть поддержка регулярок. Вот пример //div[matches(@id,'foo\d+')] пробуйте
 
  • Thank you
Reactions: udder

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)