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

Привет всем! Аппиум требует API 17 версии, а это уже андроид 4.2+, но у меня на мобиле посделняя доступная версия андрюхи это 4.1.2. Собственно как заставить работать аппиум с версии API 16 ? Заранее спс за совет !
Код:
Развернуть Свернуть Копировать
capabilities.setCapability("automationName", "Selendroid");
 
  • Спасибо
Реакции: frion-seo
Привет всем! Аппиум требует API 17 версии, а это уже андроид 4.2+, но у меня на мобиле посделняя доступная версия андрюхи это 4.1.2. Собственно как заставить работать аппиум с версии API 16 ? Заранее спс за совет !
попробуй более раннюю версию аппиума скачать
 
  • Спасибо
Реакции: frion-seo
Код:
Развернуть Свернуть Копировать
capabilities.setCapability("automationName", "Selendroid");
Код:
Развернуть Свернуть Копировать
DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)
cap.SetCapability("platformVersion", "4.1.2");// версия платформы (тоже любая)
cap.SetCapability("platformName", "Android");//имя платформы
cap.setCapability("automationName", "Selendroid");
cap.SetCapability("appPackage", "com.google.android.gsf.login"); // пространство имен используемое приложением
cap.SetCapability("appActivity", ".AccountIntroUIActivity"); // активное окно
AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); // и

вот такие ошибки лезут
8a7e62f7576449449eee82ddbf51d643.png
 
Код:
Развернуть Свернуть Копировать
DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)
cap.SetCapability("platformVersion", "4.1.2");// версия платформы (тоже любая)
cap.SetCapability("platformName", "Android");//имя платформы
cap.setCapability("automationName", "Selendroid");
cap.SetCapability("appPackage", "com.google.android.gsf.login"); // пространство имен используемое приложением
cap.SetCapability("appActivity", ".AccountIntroUIActivity"); // активное окно
AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); // и

вот такие ошибки лезут
8a7e62f7576449449eee82ddbf51d643.png
Синтаксическая ошибка.
Вместо setCapability должно быть SetCapability

Настройки можно сократить до следующего вида:
C#:
Развернуть Свернуть Копировать
DesiredCapabilities cap = new DesiredCapabilities();
cap.SetCapability("platformName", "Android");
cap.SetCapability("deviceName", "Android");
cap.setCapability("automationName", "Selendroid");
cap.SetCapability("appPackage", "com.google.android.gsf.login");
cap.SetCapability("appActivity", ".AccountIntroUIActivity");
AndroidDriver<AndroidElement> driver = new AndroidDriver<AndroidElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap);
 
  • Спасибо
Реакции: frion-seo
  • Спасибо
Реакции: frion-seo
Напечатать не текст, а содержание переменной. К примеру взять со списка логин,пароль, поместить их в переменную и напечатать в нужные поля.
Код:
Развернуть Свернуть Копировать
driver.FindElementByXPath("//android.widget.EditText[contains(@text, 'Адрес эл. почты')]").SendKeys(project.Variables["email"].Value);
 
Последнее редактирование:
setCapability пишется с большой буквы SetCapability в C#
C#:
Развернуть Свернуть Копировать
cap.SetCapability("newCommandTimeout","180");
 
  • Спасибо
Реакции: frion-seo
setCapability пишется с большой буквы SetCapability в C#
C#:
Развернуть Свернуть Копировать
cap.SetCapability("newCommandTimeout","180");
Не помогло.
В debug appium
info: [debug] Device launched! Ready for commands
info: [debug] Setting command timeout to 180 secs
info: [debug] Appium session started with sessionId 641af53d-58b2-4155-9b61-2ea65b677c0b
undefined
В ZennoPoster:
Тип Время Сообщение
17:57:48 Выполнение действия CSharp OwnCode The HTTP request to the remote WebDriver server for URL http://127.0.0.1:4723/wd/hub/session timed out after 60 seconds.
 
Спасибо за хорошую статью. Возникло несколько вопросов:

1.При запуске Appium добавил ключ установки .apk, соответственно появилась задержка при запуске приложения и в логе ZennoPostera появилась ошибка в связи с превышением таймаута

Пробовал добавить
Код:
Развернуть Свернуть Копировать
cap.setCapability("newCommandTimeout","180");
Выдает:

Добавление в запуск Appium ключа --command-timeout не помогает
Вопрос: как увеличить таймаут?

2.Как напечатать не текст, а содержание переменной? К примеру взять со списка логин,пароль, поместить их в переменную и напечатать в нужные поля.
РЕШЕНО. Спасибо Kare
Код:
Развернуть Свернуть Копировать
var text = project.Variables["email"].Value;
driver.FindElementByXPath("//android.widget.EditText[contains(@text, 'Адрес эл. почты')]").SendKeys(project.Variables["email"].Value);


3.Как взять Text с resource-id и записать его в файл/таблицу?

4.Как реализовать логику? К примеру если найден один элемент-делаем одно действие, если другой элемент-другое действие.

5.При ожидании элемента, если не находит его, то все останавливается, как сделать, чтоб логика при превышении wait продолжала дальше отрабатывать?

6.Что нужно доработать, чтоб установка приложений работала?
Добавляю код:
Код:
Развернуть Свернуть Копировать
String appPath = "‪E:\\appium\\APK files\\com.whatsapp.apk";
cap.setCapability("app", appPath );
Ошибка:


7.Как сделать задержку по времени между командами?

8.Как свайпы делать?

Версия ZennoPoster 5.9.9.1. Android 6.0.1
Не помогло.
В debug appium

В ZennoPoster:
Что значит не помогло?
Читай в логе написано:
info: [debug] Setting command timeout to 180 secs

Значит команда сработала.
А вылетает у тебя потому, что ты команды следующей не даешь в течении определенного времени, или возможно элемент у тебя не может найтись в течении 60секунд, если установлено ожидание на поиск элементов.
 
  • Спасибо
Реакции: frion-seo
Что значит не помогло?
Читай в логе написано:
info: [debug] Setting command timeout to 180 secs

Значит команда сработала.
А вылетает у тебя потому, что ты команды следующей не даешь в течении определенного времени, или возможно элемент у тебя не может найтись в течении 60секунд, если установлено ожидание на поиск элементов.
Ничего лишнего нет
Код:
Развернуть Свернуть Копировать
var text = project.Variables["email"].Value;
DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("newCommandTimeout","180");
cap.SetCapability("deviceName", "Aliexpress"); // имя девайся (абсолютно любое)
cap.SetCapability("platformVersion", "6.0.1");// версия платформы (тоже любая)
cap.SetCapability("platformName", "Android");//имя платформы
cap.SetCapability("appPackage", "com.alibaba.aliexpresshd");
cap.SetCapability("appActivity", "com.alibaba.aliexpresshd.module.home.MainActivity");
cap.SetCapability("unicodeKeyboard", "true");

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

driver.FindElementByXPath("//android.widget.Button[contains(@resource-id, 'button1')]").Click();
Помоги с другими вопросами пожалуйста. Если с 6 вопросом разобраться, то необходимость в установке приложения через AppiumStart пропадет
 
У тебя запрос не получает ответа по ссылке.
Измени свою ссылку в проекте на следующую:
Код:
Развернуть Свернуть Копировать
http://localhost:4723/wd/hub
 
  • Спасибо
Реакции: lybimiy86 и frion-seo
Свайп вверх:
C#:
Развернуть Свернуть Копировать
            Size size = driver.Manage().Window.Size;
            Point start = new Point((int)(size.Width * 0.5), (int)(size.Height * 0.5));
            Point end = new Point((int)(size.Width * 0.5), (int)(size.Height * 0.8));
            driver.Swipe(start.X, start.Y, end.X, end.Y, 500);

Свайп вниз:
C#:
Развернуть Свернуть Копировать
            Size size = driver.Manage().Window.Size;
            Point start = new Point((int)(size.Width * 0.5), (int)(size.Height * 0.5));
            Point end = new Point((int)(size.Width * 0.5), (int)(size.Height * 0.2));
            driver.Swipe(start.X, start.Y, end.X, end.Y, 500);
 
Пробую начать управлять приложением на эмуляторе Memu. Установил все пакеты по инструкции. Хочу узнать appPackage и аppActivity, пишу в командной строке соответствующую командуи ничего не получаю... подскажите, что делаю не так
d8b26842b2a7367ad996045ab2333f18.png
 
Пробую начать управлять приложением на эмуляторе Memu. Установил все пакеты по инструкции. Хочу узнать appPackage и аppActivity, пишу в командной строке соответствующую командуи ничего не получаю... подскажите, что делаю не так
d8b26842b2a7367ad996045ab2333f18.png
ты не добавил adb в переменные среды. Либо по этой инструкции:
http://www.software-testing-tutoria.../09/set-androidhome-and-path-environment.html
Либо добавляй к команде путь к adb,но лучше 1 способ на будущее.
3 Вариант узнать appPackage и аppActivity это установить с playmarket Activity Launcher, но чтоб работала вся схема, все равно лучше 1 пункт для начала
 
Команда сработала, однако сами девайсы не обнаруживаются. Поделитесь опытом, кто управлял эмулятором, какой эмулятор использовали, в чем отличия от классической схемы?


c425ee7bec624e9f9b57f127aac38640.png
 
Команда сработала, однако сами девайсы не обнаруживаются. Поделитесь опытом, кто управлял эмулятором, какой эмулятор использовали, в чем отличия от классической схемы?


c425ee7bec624e9f9b57f127aac38640.png
Стандартный эмулятор от андройд - слишком тормозной.
Последний Bluestacks - в бесплатной версии время от времени просит установить пару рекомендуемых программ.
Многие и я в том числе, рекомендуют Gennymotion.
Другие эмуляторы не тестировал.
 
  • Спасибо
Реакции: samsonnn
Появились такие вопросы:
Необходимо ввести капчу в приложении.
1d91c624ee69.png
1d91c624ee69.png
Код для отправки я нашел, вопрос: как получить эту картинку на пк?
Пока решил костылем: через adb получаю скриншот, кубиком обрезаю капчу и отправляю на распознавание.
Код:
Развернуть Свернуть Копировать
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png D:\
adb shell rm /sdcard/screen.png

Еще вопрос, в ходе работы нужно переключаться с телефона на работу в zennoposter, соответственно когда второй раз запустим скрипт-он открывает активити, который указан в настройке. Как запустить скрипт, чтоб он продолжил работу,а не перезагружал текущее состояние? Сервер я не останавливаю, увеличил ожидание команды через --command-timeout может есть какой-то способ подключиться к этой сессии?
Пока костыль: открываем новый сеанс с активити рабочего стола, потом возвращаемся к состоянию текущему через ярлык

Ну и подскажите наконец уже как составить конструкцию из if else. Помогите с синтаксисом
if driver.FindElementByXPath("//android.widget.EditText[contains(@text, 'identifying code')]")
делаем что-то
else
Решение: Использовать FindElements и .Count>0). Пример:
if (driver.FindElementsByXPath("//android.widget.ImageButton[contains(@resource-id, 'left_action')]").Count>0)


Спасибо всем заранее!
 
Последнее редактирование:
  • Спасибо
Реакции: irving zisman и zennoX
Команда сработала, однако сами девайсы не обнаруживаются. Поделитесь опытом, кто управлял эмулятором, какой эмулятор использовали, в чем отличия от классической схемы?


c425ee7bec624e9f9b57f127aac38640.png
Про Nox писали выше,что там с adb намудрено, вроде как работать не будет.
Koplayer - стабильный эмулятор, но оперативки жрет много. Не устанавливается доп.рекламных приложений.
Gennymotion - за счет эмуляции многих устройств из коробки наверное самый лучший,но у меня иногда ошибки сыпались, и рекламные проги загружались.
Эмуль Android x86 шляпа - долго включается и медленно работает и на virtualbox и на vmare.

Вариант не с эмулем. Телефон с CM 13 на борту + xprivacy = много разных устройств на телефоне за счет эмуляции параметров (xprivacy за это отвечает) и создание нового пользователя возможностями самого CM. У меня этот вариант, потому что проги палят сейчас все подряд и эмули хрен спрячешь, кстати поэтому считаю ZennoDroid не конкурентным абсолютно.
 
  • Спасибо
Реакции: orka13 и littleKongo
Коллеги, обращаюсь к Вам, кто разобрался в данной теме и способен автоматизировать все что-то угодно на андроиде и владеет хорошими навыками кодинга на C# или java. Есть большой интересный проект, ищу исполнителя, кому интересно пишите в ЛС.
 
Вариант не с эмулем. Телефон с CM 13 на борту + xprivacy = много разных устройств на телефоне за счет эмуляции параметров (xprivacy за это отвечает) и создание нового пользователя возможностями самого CM. У меня этот вариант, потому что проги палят сейчас все подряд и эмули хрен спрячешь, кстати поэтому считаю ZennoDroid не конкурентным абсолютно.
Почему именно CM 13? Чем он лучше?
 
Почему именно CM 13? Чем он лучше?
Не говорю, что именно он лучше всех, но с ним не возникает косяков, к примеру неделю назад в скайпе у меня спросили, почему команда adb, которую я давал (по одному проекту) adb shell svc data disable выдает ошибку с ограничением прав, adb root тоже не помогало, в настройках разработчика тоже небыло пункта о присвоении прав root. Вообщем он целую неделю ковырял свою прошивку,в итоге сегодня прошился на cm и все у него заработало из коробки. CM необязательно 13, просто для моего устройства и для многих других на 6 андроиде - это последний. Внутри телефона почти все можно реализовать через adb команды, автоматизация нужна внутри приложения, appium одно из решений.
 
У кого можно заказать написание подобного?
 
поправил, теперь вот такая фигня пошла
36e9872c81e141eb89690ca0820b104a.png
Такая же проблема, не могу понять, как ее исправить.
Использую этот код:
Код:
Развернуть Свернуть Копировать
DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)
cap.SetCapability("platformVersion", "4.1.1");// версия платформы (тоже любая)
cap.SetCapability("platformName", "Android");//имя платформы
cap.SetCapability("automationName", "Selendroid");
cap.SetCapability("appPackage", "com.instagram.android"); // пространство имен используемое приложением
cap.SetCapability("appActivity", ".activity.MainTabActivity"); // активное окно
AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); // инициализируем экземпляр класса драйвера с настроечками
info: --> POST /wd/hub/session {"desiredCapabilities":{"deviceName":"Insta","platformVersion":"4.1.1","platformName":"Android","automationName":"Selendroid","appPackage":"com.instagram.android","appActivity":".activity.MainTabActivity"}}
info: Client User-Agent string: undefined
info: [debug] Didn't get app but did get Android package, will attempt to launch it on the device
info: [debug] Creating new appium session 5d7e0022-4399-48cd-a70d-7bb11980c0f4
info: [debug] Starting selendroid server
info: [debug] Getting Java version
info: Java version is: 1.8.0_121
info: [debug] Checking whether adb is present
info: [debug] Using adb from C:\Users\Eduard\AppData\Local\Android\android-sdk\platform-tools\adb.exe
info: [debug] Checking whether selendroid is built yet
info: [debug] Selendroid server exists!
info: [debug] Using fast reset? false
info: [debug] Preparing device for session
info: [debug] Not checking whether app is present since we are assuming it's already on the device
info: Retrieving device
info: [debug] Trying to find a connected android device
info: [debug] Getting connected devices...
info: [debug] executing cmd: C:\Users\Eduard\AppData\Local\Android\android-sdk\platform-tools\adb.exe devices
info: [debug] 2 device(s) connected
info: Found device L7AAN7SONJGECYZP
info: [debug] Setting device id to L7AAN7SONJGECYZP
info: [debug] Waiting for device to be ready and to respond to shell commands (timeout = 5)
info: [debug] executing cmd: C:\Users\Eduard\AppData\Local\Android\android-sdk\platform-tools\adb.exe -s L7AAN7SONJGECYZP wait-for-device
info: [debug] executing cmd: C:\Users\Eduard\AppData\Local\Android\android-sdk\platform-tools\adb.exe -s L7AAN7SONJGECYZP shell "echo 'ready'"
info: [debug] Starting logcat capture
info: [debug] Checking whether aapt is present
info: [debug] Using aapt from C:\Users\Eduard\AppData\Local\Android\android-sdk\build-tools\25.0.2\aapt.exe
info: [debug] Checking if has internet permission from manifest.
info: [debug] executing cmd: C:\Users\Eduard\AppData\Local\Android\android-sdk\build-tools\25.0.2\aapt.exe dump badging
warn: ERROR: no dump file specified

info: [debug] Cleaning up appium session
error: Failed to start an Appium session, err was: Error: hasInternetPermissionFromManifest failed. Error: Command failed: ERROR: no dump file specified

info: [debug] Error: hasInternetPermissionFromManifest failed. Error: Command failed: ERROR: no dump file specified

at C:\Program Files (x86)\Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js:1664:19
at ChildProcess.exithandler (child_process.js:641:7)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at maybeClose (child_process.js:743:16)
at Process.ChildProcess._handle.onexit (child_process.js:810:5)
info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: hasInternetPermissionFromManifest failed. Error: Command failed: ERROR: no dump file specified\r\n)","origValue":"hasInternetPermissionFromManifest failed. Error: Command failed: ERROR: no dump file specified\r\n"},"sessionId":null}
info: <-- POST /wd/hub/session 500 466.431 ms - 318
 
Такая же проблема, не могу понять, как ее исправить.
Использую этот код:
Код:
Развернуть Свернуть Копировать
DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)
cap.SetCapability("platformVersion", "4.1.1");// версия платформы (тоже любая)
cap.SetCapability("platformName", "Android");//имя платформы
cap.SetCapability("automationName", "Selendroid");
cap.SetCapability("appPackage", "com.instagram.android"); // пространство имен используемое приложением
cap.SetCapability("appActivity", ".activity.MainTabActivity"); // активное окно
AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); // инициализируем экземпляр класса драйвера с настроечками
info: --> POST /wd/hub/session {"desiredCapabilities":{"deviceName":"Insta","platformVersion":"4.1.1","platformName":"Android","automationName":"Selendroid","appPackage":"com.instagram.android","appActivity":".activity.MainTabActivity"}}
info: Client User-Agent string: undefined
info: [debug] Didn't get app but did get Android package, will attempt to launch it on the device
info: [debug] Creating new appium session 5d7e0022-4399-48cd-a70d-7bb11980c0f4
info: [debug] Starting selendroid server
info: [debug] Getting Java version
info: Java version is: 1.8.0_121
info: [debug] Checking whether adb is present
info: [debug] Using adb from C:\Users\Eduard\AppData\Local\Android\android-sdk\platform-tools\adb.exe
info: [debug] Checking whether selendroid is built yet
info: [debug] Selendroid server exists!
info: [debug] Using fast reset? false
info: [debug] Preparing device for session
info: [debug] Not checking whether app is present since we are assuming it's already on the device
info: Retrieving device
info: [debug] Trying to find a connected android device
info: [debug] Getting connected devices...
info: [debug] executing cmd: C:\Users\Eduard\AppData\Local\Android\android-sdk\platform-tools\adb.exe devices
info: [debug] 2 device(s) connected
info: Found device L7AAN7SONJGECYZP
info: [debug] Setting device id to L7AAN7SONJGECYZP
info: [debug] Waiting for device to be ready and to respond to shell commands (timeout = 5)
info: [debug] executing cmd: C:\Users\Eduard\AppData\Local\Android\android-sdk\platform-tools\adb.exe -s L7AAN7SONJGECYZP wait-for-device
info: [debug] executing cmd: C:\Users\Eduard\AppData\Local\Android\android-sdk\platform-tools\adb.exe -s L7AAN7SONJGECYZP shell "echo 'ready'"
info: [debug] Starting logcat capture
info: [debug] Checking whether aapt is present
info: [debug] Using aapt from C:\Users\Eduard\AppData\Local\Android\android-sdk\build-tools\25.0.2\aapt.exe
info: [debug] Checking if has internet permission from manifest.
info: [debug] executing cmd: C:\Users\Eduard\AppData\Local\Android\android-sdk\build-tools\25.0.2\aapt.exe dump badging
warn: ERROR: no dump file specified

info: [debug] Cleaning up appium session
error: Failed to start an Appium session, err was: Error: hasInternetPermissionFromManifest failed. Error: Command failed: ERROR: no dump file specified

info: [debug] Error: hasInternetPermissionFromManifest failed. Error: Command failed: ERROR: no dump file specified

at C:\Program Files (x86)\Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js:1664:19
at ChildProcess.exithandler (child_process.js:641:7)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at maybeClose (child_process.js:743:16)
at Process.ChildProcess._handle.onexit (child_process.js:810:5)
info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: hasInternetPermissionFromManifest failed. Error: Command failed: ERROR: no dump file specified\r\n)","origValue":"hasInternetPermissionFromManifest failed. Error: Command failed: ERROR: no dump file specified\r\n"},"sessionId":null}
info: <-- POST /wd/hub/session 500 466.431 ms - 318
Не удалось победить эту ошибку.
Используй версию android от 4.4 и выше.
 
Не удалось победить эту ошибку.
Используй версию android от 4.4 и выше.
Телефон с android версии 4.1, соответствует api 16 версии. Нужно вроде добавлять файл apk, чтобы Selendroid проверил, есть ли там разрешение на интернет, а как файл добавляю (" cap.SetCapability("app", "d:\\777.apk"); "), пишет что нужно api версии 17 (тестировал с apk Instagram). К тому же про Selendroid пишут, что управление ограничено рамками одной программы, значит еще целая куча неудобств в автоматизации. Похоже, что гораздо проще поменять телефон или пользоваться эмулятором.
 
Нужна регистрация instagram моя ICQ- 626421496
На сумму мы согласны
 

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