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

Master4eg

Client
Регистрация
06.04.2016
Сообщения
421
Благодарностей
122
Баллы
43
Перед строчками с i, поставь:
Код:
int i = int.Parse(project.Variables["count"].Value); // count - переменная зенки
Если i выше используется, то используй другое имя.
потом вместо [1] написать ?, если да, то я так делал и у меня ошибка

Выполнение действия CSharp OwnCode An element could not be located on the page using the given search parameters.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
Соррян, так должно быть правильней:
C#:
...
string i = project.Variables["count"].Value;
driver.FindElementByXPath("//android.widget.FrameLayout[contains(@resource-id, 'com.knuddels.android:layout/userlist_card_port_large')][" + i + "]").Click(); //жмем
...
 
Последнее редактирование:
  • Спасибо
Реакции: Master4eg

Master4eg

Client
Регистрация
06.04.2016
Сообщения
421
Благодарностей
122
Баллы
43
Соррян, так должно быть правильней:
C#:
...
string i = project.Variables["count"].Value;
driver.FindElementByXPath("//android.widget.FrameLayout[contains(@resource-id, 'com.knuddels.android:layout/userlist_card_port_large')][" + i + "]").Click(); //жмем
...
Спасибо
 

Master4eg

Client
Регистрация
06.04.2016
Сообщения
421
Благодарностей
122
Баллы
43
Можно ли как-то закрыть определенную программу, если она открыта?
 

Endorian

Client
Регистрация
14.05.2017
Сообщения
59
Благодарностей
3
Баллы
8
Приветствую!

Друзья, помогите пожалуйста реализовать данную схему в современных реалиях(я про то что статья давняя и многое изменилось).

Я полностью прошелся по инструкции автора и выполнил все пункты + нашел статью где об всем детально описано - http://www.software-testing-tutorials-automation.com/2015/09/connect-android-device-with-pc-in-usb.html и прибег к выполнению всех рекомендаций. Собственно пришел я к тому, что ни как не удается получить идентификатор(вывод командной строки на скрине)

https://drive.google.com/file/d/1qaFUNqULXi4MSHhb31xl60joc-Tc0Wsf/view?usp=sharing

Я использовал PdaNet для подключения телефона(в статье по ссылке автор указывает на рекомендацию, если устройство не определяется), но все тщетно.

И да, режим дебага и откладки включен на телефоне(Meizu M3s, Android 5.1)

Помогите, пожалуйста! Это помощь за оплату, которую оговорим при открытии диалога.
 

Koqpe

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

Endorian

Client
Регистрация
14.05.2017
Сообщения
59
Благодарностей
3
Баллы
8
Интриговали, что именно изменилось, просветите пожалуйста.
Это предположение. Я думаю за 4 года модель либо не эффективна или видоизменилась ввиду того что по инструкции у меня ничего не получилось. Если у Вас рабочая модель, поделитесь пожалуйста, а с меня оплата ваших знаний и помощи
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
Это предположение. Я думаю за 4 года модель либо не эффективна или видоизменилась ввиду того что по инструкции у меня ничего не получилось. Если у Вас рабочая модель, поделитесь пожалуйста, а с меня оплата ваших знаний и помощи
Вероятно Вы даже не удосужились прочитать всю тему, например на 14 странице это все обсуждалось, начиная с 414 сообщения :bt:
 

mogutov666

Client
Регистрация
29.09.2013
Сообщения
241
Благодарностей
27
Баллы
28
подскажите, пытаюсь выполнить тоже самое

DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)
cap.SetCapability("platformVersion", "4.0.3");// версия платформы (тоже любая)
cap.SetCapability("platformName", "Android");//имя платформы
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); // инициализируем экземпляр класса драйвера с настроечками
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); //экземпляр класса для ожидания
wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//android.widget.FrameLayout[contains(@resource-id, 'action_bar_inbox_icon_with_badge')]"))); //ожидаем
driver.FindElementByXPath("//android.widget.FrameLayout[contains(@resource-id, 'action_bar_inbox_icon_with_badge')]").Click(); //жмем

http://joxi.ru/4AkLKJJtyOglGr
и получаю такую ошибку, с чем это связано? с юсингами с либами ?
 

Vivi

Client
Регистрация
05.09.2018
Сообщения
45
Благодарностей
1
Баллы
8
подскажите, пытаюсь выполнить тоже самое

DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)
cap.SetCapability("platformVersion", "4.0.3");// версия платформы (тоже любая)
cap.SetCapability("platformName", "Android");//имя платформы
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); // инициализируем экземпляр класса драйвера с настроечками
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); //экземпляр класса для ожидания
wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//android.widget.FrameLayout[contains(@resource-id, 'action_bar_inbox_icon_with_badge')]"))); //ожидаем
driver.FindElementByXPath("//android.widget.FrameLayout[contains(@resource-id, 'action_bar_inbox_icon_with_badge')]").Click(); //жмем

http://joxi.ru/4AkLKJJtyOglGr
и получаю такую ошибку, с чем это связано? с юсингами с либами ?
я думаю да, так и написано что пространство имен отсутствует
 

mogutov666

Client
Регистрация
29.09.2013
Сообщения
241
Благодарностей
27
Баллы
28

Vivi

Client
Регистрация
05.09.2018
Сообщения
45
Благодарностей
1
Баллы
8

Vivi

Client
Регистрация
05.09.2018
Сообщения
45
Благодарностей
1
Баллы
8
Гайс, и все таки проблему я так решить и не могу, имеется "android.widget.EditText" их 2, через индекс я выбираю 2й, делаю SendKeys и по итогу сначала очищается поле с индексом 1 и туда пытается отправить нужный мне текст, не могу побороть эту проблему уже которые сутки, было у кого такое?Может решение есть?
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
через индекс я выбираю 2й
Попробуй выбрать индекс 1 пусть очищается поле с индексом 2 и туда пытается отправить нужный текст :-)
Можно тап по координатам и потом SendKeys, экспериментируйте :bt:
 
  • Спасибо
Реакции: Vivi

SteveJobs

Client
Регистрация
03.11.2016
Сообщения
283
Благодарностей
30
Баллы
28
Гайс, и все таки проблему я так решить и не могу, имеется "android.widget.EditText" их 2, через индекс я выбираю 2й, делаю SendKeys и по итогу сначала очищается поле с индексом 1 и туда пытается отправить нужный мне текст, не могу побороть эту проблему уже которые сутки, было у кого такое?Может решение есть?
Можешь попробовать так, выделять поле сначала, в которое нужно будет вписать, а потом этот код
Код:
    ProcessStartInfo startInfo = new ProcessStartInfo();
    string serial = project.Variables["serial_telephone"].Value;
    startInfo.FileName = @"adb.exe";
    startInfo.Arguments = @"-s "+serial+" shell input text 'your_text_here' ";//параметры выполнения adb команды
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;//скрываем окно выполнения
    Process.Start(startInfo).WaitForExit();//запускаем процесс и дожидаемся выполнения
 
Последнее редактирование:
  • Спасибо
Реакции: Vivi

Vivi

Client
Регистрация
05.09.2018
Сообщения
45
Благодарностей
1
Баллы
8
Попробуй выбрать индекс 1 пусть очищается поле с индексом 2 и туда пытается отправить нужный текст :-)
Можно тап по координатам и потом SendKeys, экспериментируйте :bt:
если выбираю поле с индексом 1 то оно все равно сначала очищается (поле с индексом 1) потом записывается занова, т.е. без разницы выберу я хоть 1й хоть 2й,запись все равно будет идти сначала в 1й индекс
а как сделать тап по координатам?буду признателен если дадите пример:bt:

Можешь попробовать так, выделять поле сначала, в которое нужно будет вписать, а потом этот код
Код:
    string serial = project.Variables["serial_telephone"].Value;
    startInfo.FileName = @"adb.exe";
    startInfo.Arguments = @"-s "+serial+" shell input text 'your_text_here' ";//параметры выполнения adb команды
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;//скрываем окно выполнения
    Process.Start(startInfo).WaitForExit();//запускаем процесс и дожидаемся выполнения
попробую,спасибо,попозже отпишусь
 

Koqpe

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

mogutov666

Client
Регистрация
29.09.2013
Сообщения
241
Благодарностей
27
Баллы
28
короче лучше не париться со скрещиванием зеннопостера и аппиума, на всех этапах разбора темы возникают различного рода необъяснимые ошибки, которые порой невозможно решить по ряду причин

так и не заработал свайп вправо
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
короче лучше не париться со скрещиванием зеннопостера и аппиума, на всех этапах разбора темы возникают различного рода необъяснимые ошибки, которые порой невозможно решить по ряду причин

так и не заработал свайп вправо
:D:D:D
 
Последнее редактирование:

Vivi

Client
Регистрация
05.09.2018
Сообщения
45
Благодарностей
1
Баллы
8
Можешь попробовать так, выделять поле сначала, в которое нужно будет вписать, а потом этот код
Код:
    string serial = project.Variables["serial_telephone"].Value;
    startInfo.FileName = @"adb.exe";
    startInfo.Arguments = @"-s "+serial+" shell input text 'your_text_here' ";//параметры выполнения adb команды
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;//скрываем окно выполнения
    Process.Start(startInfo).WaitForExit();//запускаем процесс и дожидаемся выполнения
а какие библиотеки необходимо еще добавить чтоб этот код заработал?а то я так понимаю что чего то не хватает
upload_2019-1-18_13-30-24.png
 

SteveJobs

Client
Регистрация
03.11.2016
Сообщения
283
Благодарностей
30
Баллы
28
  • Спасибо
Реакции: Vivi

Vivi

Client
Регистрация
05.09.2018
Сообщения
45
Благодарностей
1
Баллы
8

SteveJobs

Client
Регистрация
03.11.2016
Сообщения
283
Благодарностей
30
Баллы
28

Вложения

  • 1 МБ Просмотры: 263
  • Спасибо
Реакции: udder и Vivi

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 777
Благодарностей
1 447
Баллы
113
да пишите на гетах, пожрубите нужный сертификат, и вуаля
если никто не догадается как это хотя многие уже думаю в тихушку на гет епашут а выкладывают типо на кликах
то запилю наверно хоть раз в конкурсной
как тема типо
как использовать гет с эмулятора
Серьезно? Внатуре? Без трепа? Или как всегда хвастаешься? Мужик сказал - мужик сделал! Ты мужик? бери теперь и делай!
 

mogutov666

Client
Регистрация
29.09.2013
Сообщения
241
Благодарностей
27
Баллы
28
Добрый день!


Установлен апиум 3.0
Селениум 3.11.0 (новые версии также почему-то не работают)

System.TypeLoadException: "Отсутствует реализация метода "Dispose" в типе "OpenQA.Selenium.Appium.Service.AppiumCommandExecutor" из сборки "appium-dotnet-driver, Version=3.0.0.2, Culture=neutral, PublicKeyToken=null"."
удалось побороть?
 

sw_sw

Client
Регистрация
24.02.2017
Сообщения
769
Благодарностей
307
Баллы
63

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
Проблема была в том, что в новом апиуме нужно по другому все прописывать.
Вообще все по другому работает (
Приведёте пример? Выше, у многих проблема с этим была.
 

Master4eg

Client
Регистрация
06.04.2016
Сообщения
421
Благодарностей
122
Баллы
43
Вариант 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");
Можешь подсказать, как 1 способом открыть ссылку на определенном девайсе? т.е. какую строку нужно добавить
 
  • Спасибо
Реакции: udder

lybimiy86

Client
Регистрация
29.10.2016
Сообщения
97
Благодарностей
187
Баллы
33
Можешь подсказать, как 1 способом открыть ссылку на определенном девайсе? т.е. какую строку нужно добавить
Вводишь в командной строке:
PHP:
adb devices
Получаешь устройства и серийные номера устройств.
Далее к любой команде adb добавляешь синтаксис -s номер устройства, чтоб отправлять команды на нужное устройство. Например к твоему вопросу будет так (серийный номер в примере 0123456789ABCDEF):
PHP:
adb -s 0123456789ABCDEF shell am start -a android.intent.action.VIEW -d http://zennolab.com
Или по 2-му варианту:
PHP:
var sn = project.Variables["sn"].Value;

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"adb";
startInfo.Arguments = "-s "+sn+" shell am start -a android.intent.action.VIEW -d http://zennolab.com";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo).WaitForExit();
 
Последнее редактирование:
  • Спасибо
Реакции: sw_sw, Nike59 и Master4eg

Master4eg

Client
Регистрация
06.04.2016
Сообщения
421
Благодарностей
122
Баллы
43
Вводишь в командной строке:
PHP:
adb devices
Получаешь устройства и серийные номера устройств.
Далее к любой команде adb добавляешь синтаксис -s номер устройства, чтоб отправлять команды на нужное устройство. Например к твоему вопросу будет так (серийный номер в примере 0123456789ABCDEF):
PHP:
adb -s 0123456789ABCDEF shell am start -a android.intent.action.VIEW -d http://zennolab.com
Благодарю
 

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