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

Ребята, а значения каких атрибутов можно получать, кроме "text"? И вообще, какие методы ещё есть, кроме
.GetAttribute("text")
.Text
.Click()
.SendKeys("")
Что ещё можно сделать?
Но вообще, сейчас вопрос такой: мне нужно получить текст с атрибута content-desc, но не нахожу нужного метода - может кто-нибудь знает подходящий?
 
Подскажите как спарсить номера из приложения.
Был подобный пример
Код:
Развернуть Свернуть Копировать
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 элементов удовлетворяющих параметру поиска.

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

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

Адрес и порт сервера аппиум. Так правильно будет: 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
 
Последнее редактирование:
Спасибо, получилось запустить на новой версии.

Адрес и порт сервера аппиум. Так правильно будет: 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 оказывается очень много нюансов
 
Чтобы завелся
uiautomatorviewer.bat
Необходимо установить JDK 8 версии
У меня стояла 12 версия, и не запускался.
 
Последнее редактирование:
Не верно, порт, да, этот, но необходимо обязательно дописать 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 есть инспектор
24a945546714.jpg


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

6b3688aa9f5f.jpg
 
  • Спасибо
Реакции: udder
В батнике только надо путь поменять на C:/Users/***User***/AppData/Local/Programs/Appium/resources/app/node_modules/appium/build/lib/main.js
 
  • Спасибо
Реакции: udder
Я просто сокращенно написал.


В appium desktop есть инспектор
24a945546714.jpg

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

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


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

У вас установлен по этому пути?
C:/Users/***User***/AppData/Local/Programs/Appium/
 
а в чем разница в том, чтобы Аппиум запустить через .ехе и .bat?
 
  • Спасибо
Реакции: udder
А никто не сталкивался со след. проблемой:
Копируешь файл (например, видео или картинку) через adb push на телефон и при попытке его выбрать в приложении, файл не отображается (все старые нормально, новое нет), перезагружаешь телефон - и новые появляются, пробовал на разных приложениях, такое ощущение, что проводник телефона нужно как-то обновлять или кеш очищать.
Поделитесь советом...
 
А никто не сталкивался со след. проблемой:
Копируешь файл (например, видео или картинку) через adb push на телефон и при попытке его выбрать в приложении, файл не отображается (все старые нормально, новое нет), перезагружаешь телефон - и новые появляются, пробовал на разных приложениях, такое ощущение, что проводник телефона нужно как-то обновлять или кеш очищать.
Поделитесь советом...
Создаешь одну картинку с определенным именем. Перекидываешь ее на телефон, перезагружаешь,чтоб она у тебя виделась. Далее когда тебе нужно ее сменить - берешь с пк фото, называешь таким же именем как у тебя на телефоне и просто заменяешь её. В итоге у тебя миниатюра будет от старой фотки, а в нужное приложение загрузится новая картинка
 
  • Спасибо
Реакции: Zoron
Создаешь одну картинку с определенным именем. Перекидываешь ее на телефон, перезагружаешь,чтоб она у тебя виделась. Далее когда тебе нужно ее сменить - берешь с пк фото, называешь таким же именем как у тебя на телефоне и просто заменяешь её. В итоге у тебя миниатюра будет от старой фотки, а в нужное приложение загрузится новая картинка
Интересная идея, завтра обязательно попробую )
Но я так понимаю ты тоже столкнулся с данной проблемой и другого решения не нашлось? )
 
Ребята, подскажите в чем проблема, юзаю клик по координатам, мне нужен 1 клик, а он вразброс 3-4 клика делает
Код:
Развернуть Свернуть Копировать
TouchAction touchAction = new TouchAction(driver);
touchAction.Tap(100, 100).Perform();
 
Del
 
Последнее редактирование:
Вопрос, можно ли как то парсить информацию? я вижу только кнопки да иконки, а нужны данные, может быть как то можно перехватывать то что сервер отправляет приложению, а оно уже подставляет свои иконки и ТД и тп
 
Вопрос, можно ли как то парсить информацию? я вижу только кнопки да иконки, а нужны данные, может быть как то можно перехватывать то что сервер отправляет приложению, а оно уже подставляет свои иконки и ТД и тп
Все возможно. Приложение в виде xml отображается. Можно пройтись по дереву элементов и парсить что нужно. Если встроиться между приложением и сервером. то это другая тема типо MITM также возможно.
 
Все возможно. Приложение в виде xml отображается. Можно пройтись по дереву элементов и парсить что нужно. Если встроиться между приложением и сервером. то это другая тема типо MITM также возможно.
к сожалению в дереве элементов я вижу только элементы без какой либо инфы )) так просто некоторые названия кнопок ))
 
А у тебя вообще получилось подцепиться к этому серверу в консоли? А то запускаю в консоли и код выдает ошибку "неверный адрес сервера"
Данное окно у меня появляет когда я запускаю Appium через exe файл.

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

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

У вас установлен по этому пути?
C:/Users/***User***/AppData/Local/Programs/Appium/
 
Код:
Развернуть Свернуть Копировать
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));
}
то при каждой вставке нового символа, предыдущий стирается.
 
Парни, кто шарит, для проксирования использовал proxyfier, сейчас переделал свой шаблон под многопоток, встала задача каждому эмулятору выдавать свой прокси, вот сижу думаю как это дело лучше организовать

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

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

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

Спасибо, пока что сделал через изменение данных в apk proxydroid , 1 фиг пока что мобильные прокси и их не много, дальше буду думать
 
Последнее редактирование:

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