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

Gang

Client
Регистрация
04.04.2010
Сообщения
579
Благодарностей
313
Баллы
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 версии.

Может кто сталкивался с такой проблемой?
 
  • Спасибо
Реакции: Dorian_Gray

Kinomanius

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

bashka

Client
Регистрация
13.06.2017
Сообщения
182
Благодарностей
130
Баллы
43
Кто ни будь разобрался как получить контент в нормальной кодировке если буквы русские?
Или подскажите пожалуйста что это за кодировка?
â¨ÐлаÑÑ, как -бÑдÑо Ñам едеÑÑ Ð² ÑÑом поезде. 6â дâ .â
 

bashka

Client
Регистрация
13.06.2017
Сообщения
182
Благодарностей
130
Баллы
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, Секунды
 
  • Спасибо
Реакции: udder

bvbfor

Client
Регистрация
10.04.2016
Сообщения
384
Благодарностей
212
Баллы
43
Подскажите как парсить данные не в список, а в переменную
Вот стандартный парсинг в список
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

bashka

Client
Регистрация
13.06.2017
Сообщения
182
Благодарностей
130
Баллы
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, Секунды
Можете дать один пример работающего парсинга в переменную?
 
  • Спасибо
Реакции: udder

bvbfor

Client
Регистрация
10.04.2016
Сообщения
384
Благодарностей
212
Баллы
43
Ваш код выдает ошибку.
Компиляция кода Ошибка в действии "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

radv

Client
Регистрация
11.05.2015
Сообщения
3 820
Благодарностей
2 030
Баллы
113
организация многопоточного режима и обработка зависаний.
Часто при многопотоке устройства отваливаются (device.State = Offline и disconnect) можно как то переподключить устройство без его перезагрузки?

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

bashka

Client
Регистрация
13.06.2017
Сообщения
182
Благодарностей
130
Баллы
43
Часто при многопотоке устройства отваливаются (device.State = Offline и disconnect) можно как то переподключить устройство без его перезагрузки?

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

radv

Client
Регистрация
11.05.2015
Сообщения
3 820
Благодарностей
2 030
Баллы
113
Последнее редактирование:
  • Спасибо
Реакции: bashka

bashka

Client
Регистрация
13.06.2017
Сообщения
182
Благодарностей
130
Баллы
43
пока тестирую и ловлю эти ошибки на ноксе
А я решил сделать шаг вперед и перевести все на мему эмулятор, хотя вначале было на ноксе.. Думаю команда зены не зря перевела дроид с нокса на мему, как сделают много поток будет самое то. В чем плюс этого нокса?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 820
Благодарностей
2 030
Баллы
113
А я решил сделать шаг вперед и перевести все на мему эмулятор, хотя вначале было на ноксе.. Думаю команда зены не зря перевела дроид с нокса на мему, как сделают много поток будет самое то. В чем плюс этого нокса?
Просто хочется разнообразия. а у дроида и не было нокса, там блюстакс был вроде.
 
Последнее редактирование:

Jeronimo

Client
Регистрация
07.01.2014
Сообщения
236
Благодарностей
205
Баллы
43
Всем привет, я так понял вторая часть статьи так и не вышла?
 
  • Спасибо
Реакции: WLDN

Hanma

Client
Регистрация
02.07.2020
Сообщения
22
Благодарностей
8
Баллы
3
  • Спасибо
Реакции: Jeronimo

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
566
Баллы
93
Всем привет, я так понял вторая часть статьи так и не вышла?
Привет, в декабре катастрофически не хватало времени на участие в конкурсе. Если весной будет поспокойнее, то сделаю вторую часть.
 

ErikMoor

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

ErikMoor

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

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

brun0

Client
Регистрация
28.04.2020
Сообщения
36
Благодарностей
22
Баллы
8
  • Спасибо
Реакции: ErikMoor

ErikMoor

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

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
  • Спасибо
Реакции: WLDN и brun0

orka13

Client
Регистрация
07.05.2015
Сообщения
2 179
Благодарностей
2 187
Баллы
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 командами узнаю, типа ввожу:
Код:
adb shell ifconfig
Получаю:
Код:
lo        Link encap:UNSPEC
          inet addr:127.0.0.1  Mask:255.0.0.0....
Это оно?
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 099
Благодарностей
648
Баллы
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
 
  • Спасибо
Реакции: orka13

orka13

Client
Регистрация
07.05.2015
Сообщения
2 179
Благодарностей
2 187
Баллы
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
Регистрация
07.05.2015
Сообщения
2 179
Благодарностей
2 187
Баллы
113
Не получилось побороть этот глюк с неполным 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

JuicyJose

Client
Регистрация
21.12.2014
Сообщения
20
Благодарностей
9
Баллы
3
Интересный глюк выскочил. При вводе текста через команду
C#:
a.Text(name); //ввод текста
все дубли букв которые стоят рядом будут удалены.
Например вместо Kitty будет Kity

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

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
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
Регистрация
11.05.2015
Сообщения
3 820
Благодарностей
2 030
Баллы
113
Подскажите пжл, можно ли вместо "Hey Bro" вставить регулярку? Если да ,то как это реализовать ? К примеру регулярку Hey\Bro.*
Вам надо научиться составлять пути xpath, и регулярки использовать только в случае, когда без них не обойтись, иначе может работать с ошибкой/ В случае работы с элементами регулярки не подходят. Можно искать по частичному совпадению через contains, но и в этом случае, вы должны понимать, какой элемент найдется.
 
  • Спасибо
Реакции: ErikMoor

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
В том то и дело что по xpath не отловить то что мне нужно, только регуляркой можно
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 820
Благодарностей
2 030
Баллы
113
В том то и дело что по xpath не отловить то что мне нужно, только регуляркой можно
Скорее всего можно, но сложнее. Тогда можешь пробовать определить координаты для клика.
 

Gang

Client
Регистрация
04.04.2010
Сообщения
579
Благодарностей
313
Баллы
63
Подскажите пжл, можно ли вместо "Hey Bro" вставить регулярку? Если да ,то как это реализовать ? К примеру регулярку Hey\Bro.*
В xpath2.0 есть поддержка регулярок. Вот пример //div[matches(@id,'foo\d+')] пробуйте
 
  • Спасибо
Реакции: udder

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