4 место Управление любыми Android приложениями на смартфоне из ZP

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
754
Благодарностей
135
Баллы
43
Ребята, а значения каких атрибутов можно получать, кроме "text"? И вообще, какие методы ещё есть, кроме
.GetAttribute("text")
.Text
.Click()
.SendKeys("")
Что ещё можно сделать?
Но вообще, сейчас вопрос такой: мне нужно получить текст с атрибута content-desc, но не нахожу нужного метода - может кто-нибудь знает подходящий?
 

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
754
Благодарностей
135
Баллы
43

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113

lustVVV

Client
Регистрация
19.06.2018
Сообщения
45
Благодарностей
32
Баллы
18
Подскажите как спарсить номера из приложения.
Был подобный пример
Код:
IZennoList listElements = project.Lists["Список 2"]; // создаём объект lstTest типа IZennoList и привязываем его к списку проекта
var elements = driver.FindElementsByXPath("//android.widget.TextView[contains(@resource-id, 'mobi.chat:id/count_members')]"); // ищем все совпадения и сохраняем их в переменную elements
foreach(string oneElement in elements) // делаем перебор коллекции
{
listElements.Add(oneElement.GetAttribute("text")); // добавляем каждый элемент в конец списка
}
Выводит ошибку: Ошибка в действии "CS1061" ""string" не содержит определение для "GetAttribute". Не удалось найти метод расширения "GetAttribute", принимающий первый аргумент типа "string" (пропущена директива using или ссылка на сборку?)"

Такой пример выводит только 1 значение.
Код:
project.Variables["username"].Value = driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'mobi.chat:id/count_members')]").GetAttribute("text");
Попытка добавить номер совпадения
Код:
project.Variables["username"].Value = driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'mobi.chat:id/count_members')][3]").GetAttribute("text");
Выводит ошибку An element could not be located on the page using the given search parameters. Хотя на странице 15 элементов удовлетворяющих параметру поиска.
Апну, может кто-то делал парсер..
 

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
754
Благодарностей
135
Баллы
43

udder

Client
Регистрация
28.03.2017
Сообщения
595
Благодарностей
118
Баллы
43
В новых версиях APPIUM Я нашел Appium.js по пути
C:\Program Files\Appium\node_modules\npm\node_modules\appium\lib\Appium.js

Скажите, пожалуйста, при составлении батника имеет значение в какую сторону слеш? \ или /

Теперь в APPIUM нету Node.exe скачал отсюда https://yadi.sk/d/EutLjP2OWZmQTQ и перенес в папку в APPIUM

Батник создал, но он сразу же закрывается, где - то ошибка

Мануал:
"C:/Program Files (x86)/Appium/node.exe" "C:/Program Files (x86)/Appium/node_modules/appium/bin/Appium.js" --address 127.0.0.1 --chromedriver-port 9516 --bootstrap-port 4725 --selendroid-port 8082 --no-reset --local-timezone
 
Последнее редактирование:

udder

Client
Регистрация
28.03.2017
Сообщения
595
Благодарностей
118
Баллы
43
Вот актуальный код для новых версий
"C:/Program Files/nodejs/node.exe" "C:/Program Files (x86)/Appium/resources/app/node_modules/appium/build/lib/main.js" --address 127.0.0.1 --chromedriver-port 6006 --bootstrap-port 2296 --selendroid-port 8082 --no-reset --local-timezone -U 127.0.0.1:21523 -p 4725

Удалось стартануть.

upload_2019-6-7_10-51-25.png


Почему красны выделено -U, --udid
и --no-reset

Работаю с Nox, перед тем как получить команду adb devices
я делаю подключение к adb эмуля adb connect 127.0.0.1:62025

После этого эмулятор отвечает на команды adb, в настройках аппиума или где то еще это нужно отразить?

Что означает данная строка:

AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:62025/wd/hub"), cap); // инициализируем экземпляр класса драйвера с настроечками

Т.к у меня ошибка

Выполнение действия CSharp OwnCode. A exception with a null response was thrown sending an HTTP request to the remote WebDriver server for URL http://127.0.0.1:62025/wd/hub/session. The status of the exception was ConnectionClosed, and the message was: Базовое соединение закрыто: Соединение было неожиданно закрыто.
 
Последнее редактирование:
  • Спасибо
Реакции: nrg8601

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
754
Благодарностей
135
Баллы
43
Привет всем! Кто-нибудь сталкивался с такой проблемой: запускаю приложение, далее в коде шаблон делает несколько действий в пределах одного кубика, но к 15-му шагу вылетает с ошибкой - типа не может кликнуть по элементу. И это при условии, что путь до элемента составлен верно. Затем, если вынести только один элемент в другой кубик и попытаться кликнуть - всё равно не кликает. А если опять запустить приложение (ну повторно запустить кубик, который приложение открывает) то тогда по этому самому элементу уже кликает без проблем. И я бы подумал, что дело во времени - что через некоторое время разъединяет связь с эмулятором. Но нет - во первых, выжидал и бОльшее время, и разъединения не было, во вторых, в настройках указал чтобы 20 минут не разъединял, и то это при бездействии. А тут уже на второй минуте вырубает, причём всегда только в том случаее, если доходит до определённого места. Да и место это ничем не примечательное, предшествующее ему - это тап по координатам:
driver.Tap(1, 25, 85, 20); Thread.Sleep(500);
А затем уже клик по элементу:
driver.FindElementByXPath("//android.view.ViewGroup//android.view.View").Click();
В общем знает ли кто-нибудь, почему может такое разъединение происходить на ровном месте каждый раз?

UP: Отключает не из-за места, а всё таки после какого-то количества кликов, либо по времени. Но почему - не ясно. Через минуту или через две отключает
 
Последнее редактирование:

nrg8601

Client
Регистрация
22.06.2010
Сообщения
74
Благодарностей
68
Баллы
18
  • Спасибо
Реакции: udder

udder

Client
Регистрация
28.03.2017
Сообщения
595
Благодарностей
118
Баллы
43
Спасибо, получилось запустить на новой версии.

Адрес и порт сервера аппиум. Так правильно будет: http://127.0.0.1:4725
При запуске Appium у вас тоже присутсвуют строки?
[Appium] -U,--udid => --default-capabilities '{"udid":"127.0.0.1:21523"}'
[Appium] --no-reset => --default-capabilities '{"noReset":true}'

Спасибо вам за подсказку.





Получил имя пакета командой
dumpsys window windows | grep mCurrentFocus
 
Последнее редактирование:

udder

Client
Регистрация
28.03.2017
Сообщения
595
Благодарностей
118
Баллы
43
Спасибо, получилось запустить на новой версии.

Адрес и порт сервера аппиум. Так правильно будет: http://127.0.0.1:4725
Не верно, порт, да, этот, но необходимо обязательно дописать wd/hub" http://127.0.0.1:4725/wd/hub

Далее, я использую NOX.

Необходимо получить IP и PORT по которому идет коннект по ADB
Демонстрация в ролике..
Затем нужно прописать полученный IP и порт в батнике запуска АППИУМА


"C:/Program Files/nodejs/node.exe" "C:/Program Files/Appium/resources/app/node_modules/appium/build/lib/main.js" --address 127.0.0.1 --chromedriver-port 6006 --bootstrap-port 2296 --selendroid-port 8082 --no-reset --local-timezone -U 127.0.0.1:62025 -p 4725

Выделил черным текстом порт ADB

p.s оказывается очень много нюансов
 

udder

Client
Регистрация
28.03.2017
Сообщения
595
Благодарностей
118
Баллы
43
Чтобы завелся
uiautomatorviewer.bat
Необходимо установить JDK 8 версии
У меня стояла 12 версия, и не запускался.
 
Последнее редактирование:

nrg8601

Client
Регистрация
22.06.2010
Сообщения
74
Благодарностей
68
Баллы
18
Не верно, порт, да, этот, но необходимо обязательно дописать wd/hub" http://127.0.0.1:4725/wd/hub
Я просто сокращенно написал.
Не знаю что за ошибки у тебя. Стоит node v10.16.0. Брал тут - https://nodejs.org/en/ , appium desktop 1.13.0 - https://github.com/appium/appium-desktop/releases/tag/v1.13.0
Библиотеки - appium-dotnet-driver.dll 3.0.0.2, WebDriver.dll, WebDriver.Support.dll - 3.0.1
еще у меня не стартует \Android\android-sdk\tools\uiautomatorviewer.bat
В appium desktop есть инспектор


Настройки только нужно там прописать

 
  • Спасибо
Реакции: udder

nrg8601

Client
Регистрация
22.06.2010
Сообщения
74
Благодарностей
68
Баллы
18
В батнике только надо путь поменять на C:/Users/***User***/AppData/Local/Programs/Appium/resources/app/node_modules/appium/build/lib/main.js
 
  • Спасибо
Реакции: udder

udder

Client
Регистрация
28.03.2017
Сообщения
595
Благодарностей
118
Баллы
43
Я просто сокращенно написал.


В appium desktop есть инспектор
Данное окно у меня появляет когда я запускаю Appium через exe файл.

Если через батник то вот такое
upload_2019-6-10_8-52-23.png


Appium установлен в C:\Program Files\Appium

У вас установлен по этому пути?
C:/Users/***User***/AppData/Local/Programs/Appium/
 

nrg8601

Client
Регистрация
22.06.2010
Сообщения
74
Благодарностей
68
Баллы
18
  • Спасибо
Реакции: udder

Assassin

Client
Регистрация
17.11.2011
Сообщения
24
Благодарностей
3
Баллы
3
а в чем разница в том, чтобы Аппиум запустить через .ехе и .bat?
 
  • Спасибо
Реакции: udder

Zoron

Client
Регистрация
24.09.2014
Сообщения
145
Благодарностей
39
Баллы
28
А никто не сталкивался со след. проблемой:
Копируешь файл (например, видео или картинку) через adb push на телефон и при попытке его выбрать в приложении, файл не отображается (все старые нормально, новое нет), перезагружаешь телефон - и новые появляются, пробовал на разных приложениях, такое ощущение, что проводник телефона нужно как-то обновлять или кеш очищать.
Поделитесь советом...
 

lybimiy86

Client
Регистрация
29.10.2016
Сообщения
97
Благодарностей
187
Баллы
33
А никто не сталкивался со след. проблемой:
Копируешь файл (например, видео или картинку) через adb push на телефон и при попытке его выбрать в приложении, файл не отображается (все старые нормально, новое нет), перезагружаешь телефон - и новые появляются, пробовал на разных приложениях, такое ощущение, что проводник телефона нужно как-то обновлять или кеш очищать.
Поделитесь советом...
Создаешь одну картинку с определенным именем. Перекидываешь ее на телефон, перезагружаешь,чтоб она у тебя виделась. Далее когда тебе нужно ее сменить - берешь с пк фото, называешь таким же именем как у тебя на телефоне и просто заменяешь её. В итоге у тебя миниатюра будет от старой фотки, а в нужное приложение загрузится новая картинка
 
  • Спасибо
Реакции: Zoron

Zoron

Client
Регистрация
24.09.2014
Сообщения
145
Благодарностей
39
Баллы
28
Создаешь одну картинку с определенным именем. Перекидываешь ее на телефон, перезагружаешь,чтоб она у тебя виделась. Далее когда тебе нужно ее сменить - берешь с пк фото, называешь таким же именем как у тебя на телефоне и просто заменяешь её. В итоге у тебя миниатюра будет от старой фотки, а в нужное приложение загрузится новая картинка
Интересная идея, завтра обязательно попробую )
Но я так понимаю ты тоже столкнулся с данной проблемой и другого решения не нашлось? )
 

Assassin

Client
Регистрация
17.11.2011
Сообщения
24
Благодарностей
3
Баллы
3
Ребята, подскажите в чем проблема, юзаю клик по координатам, мне нужен 1 клик, а он вразброс 3-4 клика делает
Код:
TouchAction touchAction = new TouchAction(driver);
touchAction.Tap(100, 100).Perform();
 

fri-lancer

Client
Регистрация
01.10.2013
Сообщения
404
Благодарностей
155
Баллы
43
Del
 
Последнее редактирование:

kokoko

Client
Регистрация
23.06.2016
Сообщения
249
Благодарностей
19
Баллы
18
Вопрос, можно ли как то парсить информацию? я вижу только кнопки да иконки, а нужны данные, может быть как то можно перехватывать то что сервер отправляет приложению, а оно уже подставляет свои иконки и ТД и тп
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63
Вопрос, можно ли как то парсить информацию? я вижу только кнопки да иконки, а нужны данные, может быть как то можно перехватывать то что сервер отправляет приложению, а оно уже подставляет свои иконки и ТД и тп
Все возможно. Приложение в виде xml отображается. Можно пройтись по дереву элементов и парсить что нужно. Если встроиться между приложением и сервером. то это другая тема типо MITM также возможно.
 

kokoko

Client
Регистрация
23.06.2016
Сообщения
249
Благодарностей
19
Баллы
18
Все возможно. Приложение в виде xml отображается. Можно пройтись по дереву элементов и парсить что нужно. Если встроиться между приложением и сервером. то это другая тема типо MITM также возможно.
к сожалению в дереве элементов я вижу только элементы без какой либо инфы )) так просто некоторые названия кнопок ))
 

Stelsgrower

Client
Регистрация
21.12.2018
Сообщения
134
Благодарностей
62
Баллы
28
А у тебя вообще получилось подцепиться к этому серверу в консоли? А то запускаю в консоли и код выдает ошибку "неверный адрес сервера"
Данное окно у меня появляет когда я запускаю Appium через exe файл.

Если через батник то вот такое
Посмотреть вложение 39641

Appium установлен в C:\Program Files\Appium

У вас установлен по этому пути?
C:/Users/***User***/AppData/Local/Programs/Appium/
 

Monitor

Client
Регистрация
27.12.2016
Сообщения
62
Благодарностей
37
Баллы
18
Код:
driver.FindElementByXPath("//android.widget.EditText[contains(@resource-id, 'edit_text')]").SendKeys("Мой длинный текст");
Как с помощью SendKeys() можно вставить текст с некоторой задержкой (0,3-0,7 сек) между символами? Ну или используя другой метод, т.е. чтобы была имитация ввода с клавиатуры. Если вставлять таким образом:
Код:
string mytext = "Мой длинный текст";
foreach (char ch in mytext)
{
   driver.FindElementByXPath("//android.widget.EditText[contains(@resource-id, 'edit_text')]").SendKeys(ch.ToString());
   System.Threading.Thread.Sleep(new Random().Next(300,700));
}
то при каждой вставке нового символа, предыдущий стирается.
 

ebrwebrw

Client
Регистрация
20.08.2018
Сообщения
221
Благодарностей
163
Баллы
43
Парни, кто шарит, для проксирования использовал proxyfier, сейчас переделал свой шаблон под многопоток, встала задача каждому эмулятору выдавать свой прокси, вот сижу думаю как это дело лучше организовать

Ставить на каждый эмулятор proxydroid и его через эмулятор уже шаблоном настраивать? хотелось бы что-то, что можно заранее сконфигурировать(например изменить данные в apk файле или собрать из исходников с нужными настройками прокси) и установить, с последующим запуском пропуская момент настройки
 
Последнее редактирование:

vanjan

Client
Регистрация
22.01.2017
Сообщения
3
Благодарностей
2
Баллы
3
Парни, кто шарит, для проксирования использовал proxyfier, сейчас переделал свой шаблон под многопоток, встала задача каждому эмулятору выдавать свой прокси, вот сижу думаю как это дело лучше организовать

Ставить на каждый эмулятор proxydroid и его через эмулятор уже шаблоном настраивать? хотелось бы что-то, что можно заранее сконфигурировать(например изменить данные в apk файле или собрать из исходников с нужными настройками прокси) и установить, с последующим запуском пропуская момент настройки
После установки, проксидройд создает файл конфигурации где то в памяти андройда ( точно где не скажу, пол года назад юзал такое решение, но могу сказать одно, что рут точно нужен).
Я делал так, устанавливал проксидройд, потом генерировал у себя на пк файл конфигурации (по шаблону оригинального, просто менял на свой ip и port) и просто заменял этим файлом оригинальный файл на андройде. Потом запускал проксидройд и там уже все данные были прописаны. Оставалось только включить проксирование.
 
  • Спасибо
Реакции: avtostopshik и ebrwebrw

ebrwebrw

Client
Регистрация
20.08.2018
Сообщения
221
Благодарностей
163
Баллы
43
После установки, проксидройд создает файл конфигурации где то в памяти андройда ( точно где не скажу, пол года назад юзал такое решение, но могу сказать одно, что рут точно нужен).
Я делал так, устанавливал проксидройд, потом генерировал у себя на пк файл конфигурации (по шаблону оригинального, просто менял на свой ip и port) и просто заменял этим файлом оригинальный файл на андройде. Потом запускал проксидройд и там уже все данные были прописаны. Оставалось только включить проксирование.
Спасибо, пока что сделал через изменение данных в apk proxydroid , 1 фиг пока что мобильные прокси и их не много, дальше буду думать
 
Последнее редактирование:

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