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

frion-seo

Client
Регистрация
27.02.2011
Сообщения
506
Благодарностей
451
Баллы
63
нашел вот такой код
Код:
 //launch settings App
        driver.startActivity(settingsAppPackageName, settingsAppActivityName);
но он не пашет...
Код:
Компиляция кода  Ошибка в действии "CS1061" ""OpenQA.Selenium.Appium.Android.AndroidDriver<OpenQA.Selenium.IWebElement>" не содержит определение для "startActivity". Не удалось найти метод  расширения "startActivity", принимающий первый аргумент типа "OpenQA.Selenium.Appium.Android.AndroidDriver<OpenQA.Selenium.IWebElement>"  (пропущена директива using или ссылка на сборку?)". [Строка: 25; Cтолбец: 8]
 

frion-seo

Client
Регистрация
27.02.2011
Сообщения
506
Благодарностей
451
Баллы
63
Решение найдено! Проблема была в том, что я вызывал приложение системное напрямую, и оно тупо закрывалось, когда должно было открыться следующее окно. А нужно было пройти весь пусть для запуска прилаги, т.е. в моем случай открыть меню настроек, проскролить страницу до нужного элемента и уже оттуда кликом запустить нужную прилагу=)
 

den1104

Client
Регистрация
04.06.2014
Сообщения
22
Благодарностей
9
Баллы
3
Добрый день! Помогите пожалуйста. Делаю все по инструкции. Сейчас не могу законектить смартфон.
все сделал по этой инструкции:"
Скачиваем и устанавливаем все это добро. Рекомендую ставить Android SDK по стандартному пути который предложит установочник, если вы по привычке его изменили как это сделал я, то эта инструкция для вас"
 

Вложения

  • 34,4 КБ Просмотры: 466

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43
Подскажите плз, в чем может быть дело?

Logcat capture failed: spawn "путь к adb" ENOENT

скрин



Иду по шагам и возникла проблемка. Не выполнялась команда adb devices. Выдавало, что команда не известна. Добавил adb в переменные среды, path. Все заработало, и я увидел данные о запущенном прилажении на телефоне. Но при попытке выполнения самого проекта error: Logcat capture failed: spawn ENOENT
Разобрался, все ок. Не установил android sdk build tools.
android sdk build tools установлены


UPD. заработало
перекинул SDK
из c:\Program Files (x86)\Android\android-sdk\ (дефолтная вроде же папка)
в c:\android-sdk\

перепрописал ANDRIOD_HOME и PATH, перезапустил комп
может пробелы в пути не нравились..
 

Вложения

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

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113

frion-seo

Client
Регистрация
27.02.2011
Сообщения
506
Благодарностей
451
Баллы
63
Привет, такая же хрень была у меня на сервере домашнем. Помогла установка 32х разрядной джавы на сколько помню ну или наоборот x64. Сейчас уже точно не вспомню =)
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
стаяла 64я, не помогло, но 32й просто нет :-)


32я есть только 8й версии... у тебя какая стояла?
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
закипел!

че не так делаю?
все уже прописал все что можно)))
и через cmd прописывал и так.. чето не помогает ничего

 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
хелпаните плиз.
чет в вебе составлять xPath пути проще, их можно сразу проверить ))

как кликнуть на раздел "учетные записи"
учитывая что русский не понимает, и приходится выкручиваться.
можно ли как-то кликать по разделу bounds?

 

Rooter85

Client
Регистрация
04.07.2015
Сообщения
244
Благодарностей
63
Баллы
28
У этого элемента есть resource-id. Это самое надежное. Никакие bounds не нужны.
driver.FindElement(By.Id("id вашего элемента")).Click()
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
какой-то ад :-)
в настройки переходит и там выдает ошибку

Код:
DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)
cap.SetCapability("platformVersion", "5.0.1");// версия платформы (тоже любая)
cap.SetCapability("platformName", "Android");//имя платформы
//cap.setCapability("automationName", "Selendroid");
cap.SetCapability("appPackage", "com.android.settings"); // пространство имен используемое приложением
//cap.SetCapability("appActivity", "com.google.android.gsf.login.NameActivity"); // активное окно com.google.android.gsf.login.AccountIntroUIActivity
cap.SetCapability("appActivity", "com.android.settings.Settings");

AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap);
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));


System.Threading.Thread.Sleep(5 * 1000);// Установленная пауза 3 sec

driver.FindElementsByXPath("//android.widget.TextView[contains(@resource-id, 'com.android.settings:id/tab_custom_view_text')]").First().Click();
ошибка
Выполнение действия 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:4723/wd/hub/session/a1ac4dba-1aab-45d7-ae96-6f093e582952/elements. The status of the exception was KeepAliveFailure, and the message was: Базовое соединение закрыто: Соединение, которое должно было работать, было разорвано сервером.
правильно ли составил путь ?

Код:
driver.FindElementsByXPath("//android.widget.TextView[contains(@resource-id, 'com.android.settings:id/tab_custom_view_text')]").First().Click();
версия андрюхи - 5.0.1
 
Последнее редактирование:

gameboy123

Client
Регистрация
09.12.2017
Сообщения
58
Благодарностей
9
Баллы
8
закипел!

че не так делаю?
все уже прописал все что можно)))
и через cmd прописывал и так.. чето не помогает ничего

как ты это решил? У меня такая же фигня. Везде прописал все равно не работает
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
  • Спасибо
Реакции: gameboy123

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43
хелпаните плиз.
чет в вебе составлять xPath пути проще, их можно сразу проверить ))

как кликнуть на раздел "учетные записи"
учитывая что русский не понимает, и приходится выкручиваться.
у меня с русским работает..
 

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43
Если не работает, то в первую очередь в Android-SDK-Manager нужно поставить все из раздела с той версией android, которая стоит на девайсе.
 

gameboy123

Client
Регистрация
09.12.2017
Сообщения
58
Благодарностей
9
Баллы
8
Не видит элементы внутри браузера андроида, как правильно настроить чтобы xpath работал для тоже браузера??
 
Последнее редактирование:

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43

gameboy123

Client
Регистрация
09.12.2017
Сообщения
58
Благодарностей
9
Баллы
8
.
 
Последнее редактирование:

irving zisman

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

Код:
driver.FindElementByXPath("//android.widget.ImageButton[contains(@resource-id, 'prev')]").Click(); //Клик по кнопке назад
driver.FindElementByXPath("//android.widget.ImageButton[contains(@resource-id, 'prev')]").Click(); //Клик по кнопке назад
driver.FindElementByXPath("//android.widget.ImageButton[contains(@resource-id, 'prev')]").Click(); //Клик по кнопке назад
driver.FindElementByXPath("//android.widget.ImageButton[contains(@resource-id, 'prev')]").Click(); //Клик по кнопке назад
driver.FindElementByXPath("//android.widget.ImageButton[contains(@resource-id, 'prev')]").Click(); //Клик по кнопке назад
project.Variables["year"].Value = driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'date_picker_header_year')]").Text; //парсим год в переменную
 

irving zisman

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

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43

lybimiy86

Client
Регистрация
29.10.2016
Сообщения
97
Благодарностей
187
Баллы
33
Ребят, помогите родить, в общем нужно создать цикл, после этого кода должно идти if и если переменная year совпадает с другой моей переменной к примеру year2 то идем дальше, если нет, то все по кругу

Код:
driver.FindElementByXPath("//android.widget.ImageButton[contains(@resource-id, 'prev')]").Click(); //Клик по кнопке назад
driver.FindElementByXPath("//android.widget.ImageButton[contains(@resource-id, 'prev')]").Click(); //Клик по кнопке назад
driver.FindElementByXPath("//android.widget.ImageButton[contains(@resource-id, 'prev')]").Click(); //Клик по кнопке назад
driver.FindElementByXPath("//android.widget.ImageButton[contains(@resource-id, 'prev')]").Click(); //Клик по кнопке назад
driver.FindElementByXPath("//android.widget.ImageButton[contains(@resource-id, 'prev')]").Click(); //Клик по кнопке назад
project.Variables["year"].Value = driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'date_picker_header_year')]").Text; //парсим год в переменную
PHP:
driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'birth')]").Click();
wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//android.widget.TextView[contains(@resource-id, 'date_picker_header_year')]")));

string year = driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'date_picker_header_year')]").Text; // получаем значение года
while (year != (project.Variables["year2"].Value)){
    driver.FindElementByXPath("//android.widget.ImageButton[@content-desc='Previous month']").Click();
    System.Threading.Thread.Sleep(100);
    driver.FindElementByXPath("//android.view.View[contains(@content-desc, '01')]").Click();
    System.Threading.Thread.Sleep(100);
    year = driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'date_picker_header_year')]").Text; // получаем значение года
}
Свайп средствами драйвера:
PHP:
driver.Swipe(450, 900, 450, 400, 3000);
Тап по координатам: (количество пальцев, координаты x, координаты y, задержка)
PHP:
driver.Tap(1, 100, 100, 2000);
Тап по элементу:
PHP:
driver.Tap(1, driver.FindElementByXPath("//android.widget.ImageView[contains(@resource-id, 'like_heart')]"), 2000);
 
Последнее редактирование:

smotrimail

Client
Регистрация
06.02.2017
Сообщения
36
Благодарностей
6
Баллы
8
Я тоже за помощью. Подскажите:
1) Как сделать долгое нажатие (Long press).
2) Как сделать ожидание нескольких элементов, т.е. как в стандартном xpath. Вопрос снимается, все работает.

И еще. Как заставать работать: driver.getPageSource() (или аналог); т.к. uiautomatorviewer не всегда отдает дерево.
 
Последнее редактирование:

irving zisman

Client
Регистрация
18.05.2017
Сообщения
225
Благодарностей
28
Баллы
28
PHP:
driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'birth')]").Click();
wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//android.widget.TextView[contains(@resource-id, 'date_picker_header_year')]")));

string year = driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'date_picker_header_year')]").Text; // получаем значение года
while (year != (project.Variables["year2"].Value)){
    driver.FindElementByXPath("//android.widget.ImageButton[@content-desc='Previous month']").Click();
    System.Threading.Thread.Sleep(100);
    driver.FindElementByXPath("//android.view.View[contains(@content-desc, '01')]").Click();
    System.Threading.Thread.Sleep(100);
    year = driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'date_picker_header_year')]").Text; // получаем значение года
}
Свайп средствами драйвера:
PHP:
driver.Swipe(450, 900, 450, 400, 3000);
Тап по координатам: (количество пальцев, координаты x, координаты y, задержка)
PHP:
driver.Tap(1, 100, 100, 2000);
Спасибо огромное!!!!!
 
Последнее редактирование:

Rooter85

Client
Регистрация
04.07.2015
Сообщения
244
Благодарностей
63
Баллы
28

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
1) Как сделать долгое нажатие (Long press).
На экране или по кнопке?
Если на экрене:
Тап по координатам: (количество пальцев, координаты x, координаты y, задержка)
Код:
driver.Tap(1, 100, 100, 2000);
Увеличьте задержку.
 
  • Спасибо
Реакции: zennoX и smotrimail

smotrimail

Client
Регистрация
06.02.2017
Сообщения
36
Благодарностей
6
Баллы
8
На экране или по кнопке?
Если на экрене:

Код:
driver.Tap(1, 100, 100, 2000);
Увеличьте задержку.
Спасибо, работает. Но есть ли возможность привязаться к xpath или к id, а не по координатам?

Решение: https://zennolab.com/discussion/threads/upravlenie-ljubymi-android-prilozhenijami-na-smartfone-iz-zp.33511/page-13#post-391429
Спасибо!
 
Последнее редактирование:

irving zisman

Client
Регистрация
18.05.2017
Сообщения
225
Благодарностей
28
Баллы
28
А как сделать несколько свайпов друг за другом, в промежутке от 3 до 7 раз? Т.е мне нужно свайпнуть строго 3,4,5,6 или 7 раз вниз. Вот к примеру код на свайп из 5 раз, но как из этого сделать рандом на 3-7 свайпов?

Код:
            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);
            System.Threading.Thread.Sleep(100);
            driver.Swipe(start.X, start.Y, end.X, end.Y, 500);
            System.Threading.Thread.Sleep(100);
            driver.Swipe(start.X, start.Y, end.X, end.Y, 500);
            System.Threading.Thread.Sleep(100);
            driver.Swipe(start.X, start.Y, end.X, end.Y, 500);
            System.Threading.Thread.Sleep(100);
            driver.Swipe(start.X, start.Y, end.X, end.Y, 500);
 
  • Спасибо
Реакции: uRusure

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