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

Такая же проблема как и у многих - adb devices возвращает пустой список.

UPD: Проблему удалось решить установкой вручную 5 версии Андроид - был КитКат, поставил Лоллипоп и телефон стал виден.
 
Последнее редактирование:
А как переключить элемент switch, если у него свойство clickable = false?
Сижу не могу понять что с этим делать. Никаких подходящих методов нет.
На click он не реагирует.
appium.jpg
 
Ну да. По таймеру не годится.
 
Ну да. По таймеру не годится.
ВЫКЛ
Код:
Развернуть Свернуть Копировать
adb shell am start -n io.appium.settings/.Settings -e data off
ВКЛ
Код:
Развернуть Свернуть Копировать
adb shell am start -n io.appium.settings/.Settings -e data on
 
  • Спасибо
Реакции: avtostopshik
Это к сожалению не работает
Код:
Развернуть Свернуть Копировать
Starting: Intent { cmp=io.appium.settings/.Settings (has extras) }
Error type 3
Error: Activity class {io.appium.settings/io.appium.settings.Settings} does not
exist.
Пробую другие варианты но пока тоже никак.
На Андроиде от 5 и выше эти методы не работают т.к. Гугл внес изменения. Так можно включать wifi например, но Mobile Data - нет.
 
Последнее редактирование:
Это к сожалению не работает
Код:
Развернуть Свернуть Копировать
Starting: Intent { cmp=io.appium.settings/.Settings (has extras) }
Error type 3
Error: Activity class {io.appium.settings/io.appium.settings.Settings} does not
exist.
Пробую другие варианты но пока тоже никак.
На Андроиде от 5 и выше эти методы не работают т.к. Гугл внес изменения. Так можно включать wifi например, но Mobile Data - нет.
Отключение
Код:
Развернуть Свернуть Копировать
adb shell svc data disable
Включение
Код:
Развернуть Свернуть Копировать
adb shell svc data enable
 
  • Спасибо
Реакции: avtostopshik
Не работает. Это на Андроиде версии 5 и выше не должно работать.
 
Подскажите пожалуйста что с этим делать:
Код:
Развернуть Свернуть Копировать
Выполнение действия CSharp OwnCode A new session could not be created. Details: Problem getting session data for driver type AndroidDriver; does it implement 'get driverData'? (33)
Просто замахало это уже. Я неправильно компоную? Надо как-то закрывать сессию?
 
Последнее редактирование:
Как через nox настроить и как будет ли работать многопоток?
Запишите пожалуйста видео кто умеет так делать)
 
Там все элементы для клика недоступны. Пришлось ставить стороннюю прогу.
 

штука, вроде хорошая, но на genymotion отказывается работать
вроде устанавливает прокси, но при коннекте выдает ошибку создания туннеля.

Уже не знаю куда смотреть.

Подскажите по прокси, плз.
 
Возможно ли не прибигая к фреймворкам в том числе аппиума, чисто консольный вариант производить тапы/клики или фокус не по координатам а по полученному xml, также через консоль с помощью adb shell uiautomator dump?

либо же максимально упрощенным консольной tool'зой? не прибигая к излишней тонны функционала фреймворков?

грубо говоря кликер, все отлично заполняеться, делаю проверку состояния grep ом дампа xml, и далее для выбора элементов меню нужен фокус тапом к примеру для того чтобы перемещять курсор keyevent 21/22 и тд.
или существует для этого хитрый keyevent?)
 
А как переключить элемент switch, если у него свойство clickable = false?
Сижу не могу понять что с этим делать. Никаких подходящих методов нет.
На click он не реагирует.
Посмотреть вложение 23919
свайп по координатм пробовал?
можно взять bounds, разобрать на составляющие, выявить таким образом область на экране, и сделать внутри нее свайп.
 
Ребята, посдкажите пожалуйста, я вот пытаюсь ввести длинный текст в input, процесс занимает может быть пару минут (текст довольно большой, несколько сотен слов). но всегда, через 60 секунд валится исключение по таймауту, что мол клиент не дожался ответа от сервера.
этот таймаут имеется в driver.CommandExecutor, но поменять его значение я не могу, так как свойство не является публичным.
upload_2017-10-27_12-4-27.png


как быть в такой ситуации?
пилить текст на куски и вводить его не вариант, так как sendkeys очищает input перед вводом





UPD. Я затупок ) при создании драйвера можно указать таймаут команды
driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap, TimeSpan.FromSeconds(180));
 
Последнее редактирование:
Ребята, посдкажите пожалуйста, я вот пытаюсь ввести длинный текст в input, процесс занимает может быть пару минут (текст довольно большой, несколько сотен слов). но всегда, через 60 секунд валится исключение по таймауту, что мол клиент не дожался ответа от сервера.
этот таймаут имеется в driver.CommandExecutor, но поменять его значение я не могу, так как свойство не является публичным.
Посмотреть вложение 24224

как быть в такой ситуации?
пилить текст на куски и вводить его не вариант, так как sendkeys очищает input перед вводом





UPD. Я затупок ) при создании драйвера можно указать таймаут команды
driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap, TimeSpan.FromSeconds(180));
в батнике запуска аппиума укажи параметр --command-timeout 2400
где 2400 - это как раз секунды таймаута, выставляй нужное значение.
 
У меня слишком быстро SendKeys Отправляется.
Можно его как-то замедлить? Телефон символы ест =с
 
в батнике запуска аппиума укажи параметр --command-timeout 2400
где 2400 - это как раз секунды таймаута, выставляй нужное значение.
вот почему-то не спасло это. а при создании драйвера вроде нормально, но при этом получилось так, что если элемена нет на экране, то исключение не выбрасывается пока не истечет этот таймаут
 
вот почему-то не спасло это. а при создании драйвера вроде нормально, но при этом получилось так, что если элемена нет на экране, то исключение не выбрасывается пока не истечет этот таймаут

могу на junit накидать, разберешься, переколдуешь под себя?

а так попробую на верную мысль навести, точнее мысли:

Если аппиум позволяет, в нутри вызова таймаута, заполнять текст, то есть функция
Sleep(360);

// SystemClock.Sleep(3600); // junit

Второй пусть wait until, можно указать в качестве UiObject findBy элемент находящийся после заполнения текста и вюжлбавить (... (Until.ByText(.....)) TIMEOUT);


Третий вариант сдедать обработку события OnClickable (как в примере ниже, код скопипастил, главное все же суть). Или текстого поля, или кнопки submit/etc. В момент отправки формы, элементы изменят свойства объектов, по которому будет выход из until.

Код:
Развернуть Свернуть Копировать
WebElement element = (new WebDriverWait(driver, 30)).until(ExpectedConditions.elementToBeClickable(By.xpath(".//*[@class='IM_overlay']")));    //it will wait 30 second for get this element
element .click();


Путь четвертый, Не эмулировать нажатия, а тупо либо вставить либо заполнить тем же adb
device cmd ( shell text input ".")


Пятый, если важнее не заполненное поле а продолжение теста - exception, try, cath

в junit существуют assert'ы, тем самым можно вывести эррор в лог и продолжить тест
 
  • Спасибо
Реакции: schnaps
Node с актуальной версией appium v1.6.4
https://yadi.sk/d/AS-QajJT3JQxi3
Можно закинуть в проект и работать уже c директории проекта, запуск так:
Код:
Развернуть Свернуть Копировать
"{-Project.Directory-}\nodejs\node.exe" "{-Project.Directory-}\nodejs\node_modules\npm\node_modules\appium\build\lib\main.js" -a 127.0.0.1 -p 4723 -bp 4724 --no-reset --command-timeout 500 --local-timezone

Y1GPnMYUddJ746hozCJ5ZHIMWNcv94A0suiBDRf624xVbxI2asrBDZoSP6VjEBo4RO6Nb0vsjqNZ1LraAGO_Tw%3D%3D

У меня походу appium вообще не запускается, так как при выполнении C# сниппета ошибка:
Выполнение действия CSharp OwnCode Unexpected error. System.Net.WebException: Невозможно соединиться с удаленным сервером ---> System.Net.Sockets.SocketException: Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение 127.0.0.1:4723
в System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
в System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
--- Конец трассировки внутреннего стека исключений ---
в OpenQA.Selenium.Appium.Service.AppiumCommandExecutor.Execute(Command commandToExecute)
в OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)

В чем может быть ошибка? Сижу ломаю голову не понимаю
 
Код:
Развернуть Свернуть Копировать
driver.pressKeyCode(AndroidKeyCode.BACK);

Подскажите пожалуйста using для этого или что там нужно

upload_2017-11-22_12-54-8.png
 
Как установить апиум правильно?
 
Спасибо за статью! Очень жаль что всё разобрано на примере с реальным телефоном... Конечно же в 1000 раз эта тема более актуальна для эмулятора андроид на пк... Понятно, что всё там делается так же, но вот у меня не получается настроить, например, с тем же genymotion...
Ребят, кто знает как это всё работает? Можете помочь, подсказать в скайпе? Разумеется готов заплатить за помощь! Вот скайп: invest_193
 
Спасибо за статью! Очень жаль что всё разобрано на примере с реальным телефоном... Конечно же в 1000 раз эта тема более актуальна для эмулятора андроид на пк... Понятно, что всё там делается так же, но вот у меня не получается настроить, например, с тем же genymotion...
Ребят, кто знает как это всё работает? Можете помочь, подсказать в скайпе? Разумеется готов заплатить за помощь! Вот скайп: invest_193
напиши в телегу мне @Tsuk15 если хочешь, я сам только со всем разобрался вроде....
 
Большое человеческое спасибо хочу сказать @lybimiy86 Всем советую внимательно прочитать все его сообщения в данной теме + он мне лично несколько раз помог в те моменты когда я уже хотел орать от каких-то непонятных ошибок :D:D
p/s Отдельное спасибо автору темы за то, что она вообще есть тут :-)
 
Последнее редактирование:
  • Спасибо
Реакции: bas2006 и lybimiy86
Помогите, что может быть? Запускаю команду, а она в консоли выглядит иероглифами и ничего не находит

5-u78dkiTr6xsykossOWhQ.png


Команды adb devices и adb shell работают корректно.
 
Последнее редактирование:
  • Спасибо
Реакции: Koqpe и littleKongo
Для просмотра Activity можно использовать приложения с Google Play
Activity Launcher или QuickShortcutMaker

Спасибо, это работает!


Еще вопрос поспел: у элемента нет уникальных индификаторов, только className. С таким классом много элементов. Подскажите как написать чтобы кликнуло по 3-ому элементу

мой код, при этом кликает по первому
Код:
Развернуть Свернуть Копировать
driver.findElementByClassName("android.widget.ImageView").First().Click();
 

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