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

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
Если у кого-то есть подобное решения для WhatsApp, я бы заказал шаблон для допиливания под мои нужды. Мне нужно неспешно рассылать сообщения по списку контактов и, возможно, чтобы он автоматом отвечал на некоторые типовые реплики, а так ответы сохранял в таблицу.
Возможно Вы в курсе, но все же. У WhatsApp есть вебверсия, я использовал связку NOX (для залогивания в вебверсии) и зеннопостер (непосредственно для работы в вебверсии ).
 
Последнее редактирование:
  • Спасибо
Реакции: Nick

Nick

Client
Регистрация
22.07.2014
Сообщения
1 980
Благодарностей
816
Баллы
113
Ой, это клёво) А поделись шабом? Можем поменяться на что-нибудь... :-)
 

Nightgarm

Client
Регистрация
06.09.2014
Сообщения
22
Благодарностей
8
Баллы
3
Подскажите как собрать элементы с одинаковыми значениями. Учитывая что меняется только index у родителя.

Или может возможно получить дамп и выдернуть через regex?
 

desided

Client
Регистрация
19.10.2015
Сообщения
120
Благодарностей
11
Баллы
18
Подскажите как собрать элементы с одинаковыми значениями. Учитывая что меняется только index у родителя.

Или может возможно получить дамп и выдернуть через regex?
собирай в список через findElements
 
  • Спасибо
Реакции: garat

myweb101

Client
Регистрация
29.04.2013
Сообщения
175
Благодарностей
30
Баллы
28
А кто работает с эмуляторами? Проблема в том, что многие данные передаются, начиная от device Id, IMEI, WIFI SSID, device name и пр. Работаю с Genymotion. Установил xposed framework, установил модуль Device Faker, (мне это больше понравилось https://github.com/bigsinger/AndroidIdChanger , но очень часто эмуль не грузился, если версия андройд была выше)вроде бы эмулирует, открываешь cpu_z или aida64 значения меняются, открываю tumblr или инсту, fiddler смотрю запросы, там палится и инфа берется через build.prop, меняю, все ок.
Но где можно взять список девайсов???
Кто еще как эмулирует?
Кстати это также относится и к реальным девайсам.
 

lybimiy86

Client
Регистрация
29.10.2016
Сообщения
97
Благодарностей
187
Баллы
33
А кто работает с эмуляторами? Проблема в том, что многие данные передаются, начиная от device Id, IMEI, WIFI SSID, device name и пр. Работаю с Genymotion. Установил xposed framework, установил модуль Device Faker, (мне это больше понравилось https://github.com/bigsinger/AndroidIdChanger , но очень часто эмуль не грузился, если версия андройд была выше)вроде бы эмулирует, открываешь cpu_z или aida64 значения меняются, открываю tumblr или инсту, fiddler смотрю запросы, там палится и инфа берется через build.prop, меняю, все ок.
Но где можно взять список девайсов???
Кто еще как эмулирует?
Кстати это также относится и к реальным девайсам.
Используй этот (уже предустановлены устройства) https://play.google.com/store/apps/details?id=com.devicefaker.free&hl=ru
 

myweb101

Client
Регистрация
29.04.2013
Сообщения
175
Благодарностей
30
Баллы
28
Эм. Как я писал, уже ставил и стояла про версия. Может есть решения не на xposed framework, а apk ?
 

Nightgarm

Client
Регистрация
06.09.2014
Сообщения
22
Благодарностей
8
Баллы
3

myweb101

Client
Регистрация
29.04.2013
Сообщения
175
Благодарностей
30
Баллы
28
У кого не получается найти активити стартовое, открывайте Android Studio, заходите в терминал - внизу и вбиваете команды. (потому что винда плохо воспринимает одинарные кавычки) или
Код:
Перейти в каталог c:\Android\sdk\build-tools\25.0.2 где лежит aapt.exe
adb shell pm list packages -f
adb pull путь из списка до APK, до =
aapt dump badging base.apk
launchable-activity: name - это и есть активити стартовое.
 
  • Спасибо
Реакции: irving zisman и braycho

myweb101

Client
Регистрация
29.04.2013
Сообщения
175
Благодарностей
30
Баллы
28
Какой надо Using подключить, чтобы сделать проверку кликабельности кнопки?

Код:
Boolean fname = driver.FindElement(By.XPath("//android.widget.Button[contains(@resource-id, 'action_button')]")).isEnabled();
if(fname){
    project.SendInfoToLog("Get Started");
}
UPD
Сделал через. Но все равно не понятно, как получить булевое значение состояния кнопки.

Код:
var fname = driver.FindElement(By.XPath("//android.widget.Button[contains(@resource-id, 'action_button')]")).GetAttribute("enabled");
project.SendInfoToLog(fname);
 
Последнее редактирование:

Hartwell

Client
Регистрация
25.09.2014
Сообщения
194
Благодарностей
118
Баллы
43
Как инициализировать sendKeys без "clear" данных по умолчанию в apk?
appium пытаеться очистить поле, но приложение сразу восстанавливает исходное значение, в итоге после 2-3 попыток clear text, appium заполняет отправленный sendKeys, в итоге изза того что курсор ввода в эмуляторе сбиваеться при очистке поля результат заполнения кривой.
Как можно дописать поле без clear? Или как взаимодействовать параметр replace (по умолчанию replace:"false")?
 

myweb101

Client
Регистрация
29.04.2013
Сообщения
175
Благодарностей
30
Баллы
28
Попробуй кликнуть по координатам, а потом
using OpenQA.Selenium.Interactions;

Код:
Actions typing = new Actions(driver);
typing .SendKeys("TEXT").Build().Perform();
 

Hartwell

Client
Регистрация
25.09.2014
Сообщения
194
Благодарностей
118
Баллы
43
Попробуй кликнуть по координатам, а потом
using OpenQA.Selenium.Interactions;

Код:
Actions typing = new Actions(driver);
typing .SendKeys("TEXT").Build().Perform();
1/5 заполняет корректно, но с проверкой @text, очисткой в случае не соответствия тратиться много времени + геморойненько


p.s. поддержка adb shell вроде как присутствует, только не соображу как инициализировать exec с adb shell input text (плюс в карму за пример кода Си :3 )
 

lybimiy86

Client
Регистрация
29.10.2016
Сообщения
97
Благодарностей
187
Баллы
33
1/5 заполняет корректно, но с проверкой @text, очисткой в случае не соответствия тратиться много времени + геморойненько


p.s. поддержка adb shell вроде как присутствует, только не соображу как инициализировать exec с adb shell input text (плюс в карму за пример кода Си :3 )
adb команды можно посылать и без Appium
Код:
var text = project.Variables["text"].Value;//берем текст с проекта и ложим в переменную
ProcessStartInfo startInfo1 = new ProcessStartInfo();
startInfo1.FileName = @"adb.exe";
startInfo1.Arguments = @"shell input text "+text;//параметры выполнения adb команды
startInfo1.WindowStyle = ProcessWindowStyle.Hidden;//скрываем окно выполнения
Process.Start(startInfo5).WaitForExit();//запускаем процесс и дожидаемся выполнения
 

Anatoliy777

Новичок
Регистрация
29.06.2016
Сообщения
17
Благодарностей
6
Баллы
3
А есть варианты приложение в исходное состояние возвращать?
 

lybimiy86

Client
Регистрация
29.10.2016
Сообщения
97
Благодарностей
187
Баллы
33
А есть варианты приложение в исходное состояние возвращать?
Можно запустить сервер с флагом --full-reset

Или через adb команду (C#):
Код:
ProcessStartInfo startInfo1 = new ProcessStartInfo();
startInfo1.FileName = @"adb.exe";
startInfo1.Arguments = @"shell pm clear com.instagram.android";
startInfo1.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo1).WaitForExit();
 
  • Спасибо
Реакции: Anatoliy777

Anatoliy777

Новичок
Регистрация
29.06.2016
Сообщения
17
Благодарностей
6
Баллы
3
Можно запустить сервер с флагом --full-reset

Или через adb команду (C#):
Код:
ProcessStartInfo startInfo1 = new ProcessStartInfo();
startInfo1.FileName = @"adb.exe";
startInfo1.Arguments = @"shell pm clear com.instagram.android";
startInfo1.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo1).WaitForExit();
За подсказку спасибо, но так приложение сносит к чертям собачим.
Решил через
Код:
adb shell pm clear com.package.foo
 

lybimiy86

Client
Регистрация
29.10.2016
Сообщения
97
Благодарностей
187
Баллы
33
За подсказку спасибо, но так приложение сносит к чертям собачим.
Решил через
Код:
adb shell pm clear com.package.foo
--full reset вернет устройство к первоначальному состоянию,т.е. если будут установлены приложения, то они удалятся.
А второй вариант ничего не сносит, он чистит кэш приложения как и ты написал в своем примере, только у меня пример на c#, чтобы не плодить батники
 
  • Спасибо
Реакции: Anatoliy777

Anatoliy777

Новичок
Регистрация
29.06.2016
Сообщения
17
Благодарностей
6
Баллы
3
--full reset вернет устройство к первоначальному состоянию,т.е. если будут установлены приложения, то они удалятся.
А второй вариант ничего не сносит, он чистит кэш приложения как и ты написал в своем примере, только у меня пример на c#, чтобы не плодить батники
У меня там шаб, сплошной костыль. У меня код активации даже через OCR скриншота распознается :-)Поэтому 1 лишний батник батник устраивает.
Теперь моя задача проксю устанавливать на соединение.
 

lybimiy86

Client
Регистрация
29.10.2016
Сообщения
97
Благодарностей
187
Баллы
33
У меня там шаб, сплошной костыль. У меня код активации даже через OCR скриншота распознается :-)Поэтому 1 лишний батник батник устраивает.
Теперь моя задача проксю устанавливать на соединение.
По прокси на соединение https://github.com/jpkrause/AndroidProxySetter
 

Anatoliy777

Новичок
Регистрация
29.06.2016
Сообщения
17
Благодарностей
6
Баллы
3

SteveJobs

Client
Регистрация
03.11.2016
Сообщения
283
Благодарностей
30
Баллы
28
Как спарсить текст с атрибута "text" или "resourse-id" ?
 

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
Друзья, а вот как бы открыть в браузере ссылку?
 

lybimiy86

Client
Регистрация
29.10.2016
Сообщения
97
Благодарностей
187
Баллы
33
Как спарсить текст с атрибута "text" или "resourse-id" ?
Берем с resource-id edtImei и ложим в переменную проекта IMEI
Код:
project.Variables["IMEI"].Value = driver.FindElementByXPath("//android.widget.EditText[contains(@resource-id, 'edtImei')]").Text;
 

SteveJobs

Client
Регистрация
03.11.2016
Сообщения
283
Благодарностей
30
Баллы
28
Берем с resource-id edtImei и ложим в переменную проекта IMEI
Код:
project.Variables["IMEI"].Value = driver.FindElementByXPath("//android.widget.EditText[contains(@resource-id, 'edtImei')]").Text;
А как мне спарсить в переменную Значение поля текст? В поле текст каждый раз будет разное значение. Как мы можем его получать?
 

Вложения

Последнее редактирование:

lybimiy86

Client
Регистрация
29.10.2016
Сообщения
97
Благодарностей
187
Баллы
33
А как мне спарсить в переменную Значение поля текст? В поле текст каждый раз будет разное значение. Как мы можем его получать?
PHP:
project.Variables["username"].Value = driver.FindElementByXPath("//android.widget.EditText[contains(@resource-id, 'username')]").GetAttribute("text");
 

lybimiy86

Client
Регистрация
29.10.2016
Сообщения
97
Благодарностей
187
Баллы
33
Друзья, а вот как бы открыть в браузере ссылку?
Вариант 1. Средствами adb. Через Батник. Если adb не указан в переменных средах, то добавить путь до adb.
Код:
adb shell am start -a android.intent.action.VIEW -d http://zennolab.com
Вариант 2. Средствами adb,но через C# код в кубике.
PHP:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"adb";
startInfo.Arguments = @"shell am start -a android.intent.action.VIEW -d http://zennolab.com";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo).WaitForExit();
Вариант 3. Средствами Appium. Нужно зайти в браузер перед этим
PHP:
driver.Navigate().GoToUrl("http://zennolab.com");
 

irving zisman

Client
Регистрация
18.05.2017
Сообщения
225
Благодарностей
28
Баллы
28
Друзья, а из того всего можно как-то сделать многопоток?
 

SteveJobs

Client
Регистрация
03.11.2016
Сообщения
283
Благодарностей
30
Баллы
28
Как продолжить код в другом C#? Это допустим первый С#

upload_2017-8-16_12-35-9.png

Это второй C# (он не работает, как продолжить?)

upload_2017-8-16_12-36-20.png
 

Anatoliy777

Новичок
Регистрация
29.06.2016
Сообщения
17
Благодарностей
6
Баллы
3
Как продолжить код в другом C#? Это допустим первый С#


Это второй C# (он не работает, как продолжить?)

в конце первого добавь
Код:
project.Context["drv"]= driver;
в начале второго
Код:
var driver = project.Context["drv"];
 

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