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

Discussion in 'Шестой конкурс статей' started by Serkser, Dec 11, 2016.

  1. Jeronimo

    Jeronimo Client

    Joined:
    Jan 7, 2014
    Messages:
    122
    Likes Received:
    33
    Всем привет. Делаю всё по инструкции из стартового топика, но в cmd через запрос устройств не вижу свой телефон (List of devices attached).
    - отладка через usb включена на телефоне.
    - VID устройства добавил в файл adb_usb.ini в папке .android вот так:

    Code (text):
    1. # ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
    2. # USE 'android update adb' TO GENERATE.
    3. # 1 USB VENDOR ID PER LINE.
    4. 0x0E8D

    В чём может быть проблема?
     
  2. irving zisman

    irving zisman Client

    Joined:
    May 18, 2017
    Messages:
    139
    Likes Received:
    8
    Подскажите, как продолжить код в другом кубике c#? Приложение запущено, пытался открыть по новому названию активити, все равно приложение запускается заново
     
  3. SteveJobs

    SteveJobs Client

    Joined:
    Nov 3, 2016
    Messages:
    248
    Likes Received:
    19
  4. irving zisman

    irving zisman Client

    Joined:
    May 18, 2017
    Messages:
    139
    Likes Received:
    8
  5. irving zisman

    irving zisman Client

    Joined:
    May 18, 2017
    Messages:
    139
    Likes Received:
    8
    Разобрался, нужно было в конце первого кубика вставить project.Context["drv"]= driver; , в том посте об этом не сказано ничего.

    Получается так, что бы продолжить выполнение в другом кубике, в первом должны присутствовать эти строки
    Code (text):
    1. AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:"+project.Variables["port_appium"].Value+"/wd/hub"), cap); // инициализируем экземпляр класса драйвера с настроечками
    2. WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(100));
    и еще эта строка в конце первого
    Code (text):
    1. project.Context["drv"]= driver;
    Далее в начале второго это
    Code (text):
    1. var driver = project.Context["drv"];
    2. WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(100));
    и свой код далее
     
    Last edited: Feb 10, 2019
  6. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    Кто знает, что за ерунда? апиум 1.10. Запускаю сервак. Запускаю эмулятор. Выполняю
    Code (text):
    1. DesiredCapabilities cap = new DesiredCapabilities();
    2. cap.SetCapability("deviceName", "Insta");
    3. cap.SetCapability("platformVersion", "7.1.2");
    4. cap.SetCapability("platform", "Android");
    5. cap.SetCapability("platformName", "Android");
    6. cap.SetCapability("appPackage", "com.ishook.inc.ychat");
    7. cap.SetCapability("appActivity", ".activitys.LoginActivity");
    8.  
    9. AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://192.168.100.100:4723/wd/hub"), cap);
    10.  
    11.  
    12. System.Threading.Thread.Sleep(10000);
    13. driver.FindElementsByXPath("//android.widget.Button[contains(@resource-id, 'btnlogin')]").First().Click();
    https://www.screencast.com/t/K5i75FHsaaY3
    [​IMG]

    Конектится, запускает прилагу и всё. Клики не производит, как не пробывал. Поиск по элементом не может произвести.
    https://www.screencast.com/t/Hp61wnZQE4D
    [​IMG]
     
  7. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    И еще вопрос, почему запуск производит и каждый раз требует разрешения, которые прилага запрашивает. Хотя при запуске руками, просто грузится прилага как обычно.
     
  8. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    Снимаю вопрос первый. Это именно с определенным приложением такой косяк, с остальными работает. Оч странно

    Кто сталкивался с таким, что в опред прилаге не проходят такие манипуляции
     
    Last edited: Feb 11, 2019
  9. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    Вообщем, насколько я понимаю, проблема в том, что у прилаги несколько активити. Начальный можно узнать:
    Code (text):
    1. Перейти в каталог c:\Android\sdk\build-tools\25.0.2 где лежит aapt.exe
    2. adb shell pm list packages -f
    3. adb pull путь из списка до APK, до =
    4. aapt dump badging base.apk
    А как работать с прилагой, если у нее стартовая активити одна, а уже после загрузки ативна другая?
     
  10. irving zisman

    irving zisman Client

    Joined:
    May 18, 2017
    Messages:
    139
    Likes Received:
    8
    driver.FindElementsByXPath("//android.widget.Button[contains(@resource-id, 'btnlogin')]").Click();
     
  11. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    не, в примере просто не поправил, это от безысходности тыкал всё что мог. В других прилагах отрабатывает, но в энужной нет(
     
  12. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    Немного уточню вопрос. Приложение запрашивает права на камеру, контакты и т.д. Из-за этого, каждый раз, если стартовать из зенки - каждый раз выскакивает запрос на эти разрешения. При старте руками, этого не происходит (только при первом запуске после установки). Возможно из-за неверного старта, дальше уже доступа к элементам не выходит получить. На той же машине, с другим приложением, всё хорошо работает. Может кто подскажет, как стартовать по другому такое приложение?

    Code (text):
    1. DesiredCapabilities cap = new DesiredCapabilities();
    2. cap.SetCapability("deviceName", "Insta");
    3. cap.SetCapability("platformVersion", "7.1.2");
    4. cap.SetCapability("platformName", "Android");
    5. cap.SetCapability("appPackage", "com.ishook.inc.ychat");
    6. cap.SetCapability("appActivity", "com.ishook.inc.ychat.activitys.SplashScreen");
    7. AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://192.168.100.100:4723/wd/hub"), cap);
     
  13. Kare

    Kare Client

    Joined:
    Dec 23, 2014
    Messages:
    559
    Likes Received:
    279
    Меняй активити.
     
  14. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    Это уже пробовал.
    cap.SetCapability("appActivity", "com.ishook.inc.ychat.activitys.SplashScreen"); - Эта заставка, что стартует
    cap.SetCapability("appActivity", "com.ishook.inc.ychat.activitys.LoginActivity"); - это то, что после заставки открывается логин

    Можно ли как-то подключится к уже открытому окну?
     
  15. sw_sw

    sw_sw Client

    Joined:
    Feb 24, 2017
    Messages:
    28
    Likes Received:
    8
    Все знают, но это заговор против тебя.
    Я подскажу, хотя меня и накажут =)

    appiumOptions.AddAdditionalCapability("noReset", "True");

    Ну а в твоем случае ..

    cap.SetCapability("noReset", "True");

    ;-)
     
    irving zisman, Ashbe and afk like this.
  16. afk

    afk Client

    Joined:
    Nov 28, 2016
    Messages:
    34
    Likes Received:
    4
    Спасибо, полезная информация, я этот момент по другому обходил:

    1. Запускал настройки
    2. Нажимал "меню"
    3. Запускал приложение с меню кликом )
     
  17. irving zisman

    irving zisman Client

    Joined:
    May 18, 2017
    Messages:
    139
    Likes Received:
    8
    Code (text):
    1. driver.PressKeyCode(3);
     
  18. irving zisman

    irving zisman Client

    Joined:
    May 18, 2017
    Messages:
    139
    Likes Received:
    8
    Кстати кто в курсе, что нужно подключить что бы был параметр
    Code (text):
    1. driver.ToggleAirplaneMode();
    ??
    Есть только
    Code (text):
    1. driver.ToggleLocationServices();
     
  19. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    Спасибо большое!

    Кто подскажет как поставить прокси на MEmu? proxifier на процессы "memu.exe; memuconsole.exe; memupush.exe; memurepair.exe; memuservice.exe; memuupdate.exe; screenrecord.exe; memuservice.exe; memuc.exe; memuc.exe" результата не дает. В настройках WiFi в эмуляторе, я так понимаю мало толку, это работает только в браузере.
    Кручу верчу не могу понять.
     
  20. nole

    nole Client

    Joined:
    Nov 19, 2010
    Messages:
    318
    Likes Received:
    133
    папка MEmuHyperv, файл MEmuHeadless.exe надо проксировать, вроде бы его достаточно
     
    Ashbe likes this.
  21. irving zisman

    irving zisman Client

    Joined:
    May 18, 2017
    Messages:
    139
    Likes Received:
    8
    Кто знает, почему сервер поднимается только на порту 4723 ? Как запустить другом?
     
  22. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    Спасибо! вроде работает

    Может кто подсказать почему "MEmuManage startvm MEmu" выдает ошибку "VERR_FILE_NOT_FOUND"?
    В общем, как запустить мему и отследить её загрузку. "MEmuConsole MEmu" работает, но она совсем не разговаривает в логе, а просто отрабатывает и все. Или загрузку уже только как-то через adb чекать, пока не не появится активный девайс?
     
  23. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    Вы установили Appium Desktop ? Или через nodejs?
     
  24. irving zisman

    irving zisman Client

    Joined:
    May 18, 2017
    Messages:
    139
    Likes Received:
    8
    Поставил отдельно аппиум, отдельно скачал node и все завелось, поднимается теперь на любом порту. Запускаю через батник таким образом:
    Code (text):
    1. "C:/Users/server/Desktop/Mobile/data/node 11.10.0/node.exe" "C:/Program Files (x86)/Appium/resources/app/node_modules/appium/build/lib/main.js" --address 127.0.0.1 --chromedriver-port 6006 --bootstrap-port 2296 --selendroid-port 8082 --no-reset --local-timezone -U 420023039aab3400  -p 4723 // -p 4723 порт на котором нужно запустить аппиум
     
  25. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    https://appium.io/docs/en/writing-running-appium/server-args/
    параметры командной строки. параметр -U вроде уже не действует
     
  26. irving zisman

    irving zisman Client

    Joined:
    May 18, 2017
    Messages:
    139
    Likes Received:
    8
    Действует, подключено 2 устройства, обращение идет именно к тому чей udid прописан.
     
  27. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    Два устройства на одни и те же порты?
     
  28. irving zisman

    irving zisman Client

    Joined:
    May 18, 2017
    Messages:
    139
    Likes Received:
    8
    Ты про какой именно порт? Я пока не пойму какой для чего (не считая порта для апиума), поэтому поставил везде разные

    Code (text):
    1. "C:/Users/server/Desktop/Mobile/data/node 11.10.0/node.exe" "C:/Program Files (x86)/Appium/resources/app/node_modules/appium/build/lib/main.js" --address 127.0.0.1 --chromedriver-port 9516 --bootstrap-port 4725 --selendroid-port 8082 --no-reset --local-timezone -U HA0QGWZT -p 4724
    2. "C:/Users/server/Desktop/Mobile/data/node 11.10.0/node.exe" "C:/Program Files (x86)/Appium/resources/app/node_modules/appium/build/lib/main.js" --address 127.0.0.1 --chromedriver-port 6006 --bootstrap-port 2296 --selendroid-port 8082 --no-reset --local-timezone -U 420023039aab3400  -p 4723
     
  29. Ashbe

    Ashbe Client

    Joined:
    Apr 14, 2016
    Messages:
    41
    Likes Received:
    5
    Интимный вопрос. Как изменить имя машины?) "MEmuManage modifyvm MEmu --name New_name" меняет то, но дальше уже её запустить не выходит
     
  30. Zymlex

    Zymlex Client

    Joined:
    Oct 24, 2016
    Messages:
    1,214
    Likes Received:
    588

Пользователи просматривающие тему (Пользователей: 0, Гостей: 0)