Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

UI automator. Работа с PopUp окном


(Natalja Librante Lace) #1

Доброе время суток!
Тестирую с помощью UI automator на “родном” эмуляторе Google, для получения структуры страницы пользуюсь UI Automator Viewer.
продолжаю разбираться с UI automator и столкнулась с проблемой: невозможно кликнуть по кнопке в выпадающем PopUp окне.
Тест кейс:
Вхожу на сайт
Делаю необходимые ассерты
Нажимаю на кнопку “Пользователь”, после чего выпадает PopUp окно с функцией Log Out
Мне необходимо нажать на Log Out, но сделать я этого не могу, так как UI Automator Viewer вообще “не видит” выпадающего окна (как минимум в структуре страницы оно не появляется).

Взяла у девелоперов название класса и ID нужной кнопки, но все равно получила на выходе ошибку: INSTRUMENTATION_STATUS: stack=com.android.uiautomator.core.UiObjectNotFoundExcep
tion: UiSelector[CLASS=android.widget.LinearLayout, RESOURCE_ID=testing.android:id/action_sign_out]

Погуглила проблему, но без особого успеха.


(Andrey Kharkov) #2

Привет, дело в том, что UI automator не очень хорошо ладит с webview и поэтому он действительно много может не видеть. Вы просто должны понимать, что это инструмент для тестирования андроидных апликух, а не для тестирования сайтов.


(Natalja Librante Lace) #3

Это именно апликация написанная специально под андроид, но с PopUp окном. .


(Andrey Kharkov) #4

Тогда дайте мне пожалуйста апк файл и я поробую выяснить в чем дело.


(Natalja Librante Lace) #5

К сожалению, дать apk файл абсолютно нереально :frowning: значит будем сами разбираться…


(Dmitry Cheremushkin) #6

Привет,

А курсорными (DPAD) кнопками можно на него фокус поставить? Чтобы потом select или enter нажать?
P.S. Про UI ещё подумаю.


(Dmitry Cheremushkin) #7

Будьте добры, напишите, кусок кода, с помощью которого описываете элемент и кликаете.


(Natalja Librante Lace) #8

В том то и главная проблема - элемента нет в иерархии UI automator Viewer. Я открываю в эмуляторе попап-окно, загружаю картинку во Viewer, окно отображается на экране вьювера, но его словно не существует, вьювер видит элементы под ним, но не само окно.

по поводу DPAD-кнопок не могу ответить, так как пока запускаю тесты только на “родном” андроидовском эмуляторе без кнопок. И попутно ищу другой, более толковый эмулятор для запуска тестов…


(Dmitry Cheremushkin) #9
  1. В Андроид-эмуляторе справа от изображения экрана, как правило есть кнопки Home, Power и т.д. — и там же есть курсорные клавиши.

  2. Более толковый эмулятор — это GenyMotion (www.genymotion.com).

  3. Код я прошу тот самый, который выдал эту ошибку:

INSTRUMENTATION_STATUS: stack=com.android.uiautomator.core.UiObjectNotFoundExcep
tion: UiSelector[CLASS=android.widget.LinearLayout, RESOURCE_ID=testing.android:id/action_sign_out]

Просто здесь CLASS=android.widget.LinearLayout, это контейнер. А кнопка скорей всего будет либо Button, либо ImageView.

Т.е. элемента типа LinearLayout с id ‘action_sign_out’ на экране нет, а элемент другого типа может и быть. Лучше вовсе без привязки к типу в данном случае искать — id достаточно уникальный.


(Natalja Librante Lace) #10

Код, который выдает ошибку

   private void exitToMainWindow() throws UiObjectNotFoundException {
    //элемент, по нажатию на который выпадает попап           
      UiObject badgeButton = new UiObject(new UiSelector()                 .className("android.widget.ImageView").resourceId("testing.android:id/badge_button"));
      badgeButton.click();
      UiObject logOutButton = new UiObject(new UiSelector()   .className("android.widget.LinearLayout").resourceId("testing.android:id/action_sign_out"));
     logOutButton.clickAndWaitForNewWindow();
    }

И логаут девелоперы почему-то сделали не в виде кнопки, а в виде линка. Они предлагают его временно “заблокировать” для теста, т.е. по нажатию на нее апликация не будет выходить из приложения, может так можно будет посмотреть что “у нее в животике”?

В Андроид-эмуляторе справа от изображения экрана, как правило есть кнопки Home, Power и т.д. — и там же есть курсорные клавиши.

У меня в эмуляторе к этим кнопкам стоит надпись DPAD not enabled in AVD


(Dmitry Cheremushkin) #11

— попробуйте ради интереса заменить код выше на

UiObject logOutButton = new UiObject(new UiSelector().resourceId("testing.android:id/action_sign_out"));

и запустить тест


(Dmitry Cheremushkin) #12

— Включить их можно так: http://sys-admin.kz/programming/android/411-dpad-not-enabled-in-avd.html

— Либо можно их нажать через ADB:

adb shell input keyevent KEYCODE_DPAD_UP
adb shell input keyevent KEYCODE_DPAD_DOWN
adb shell input keyevent KEYCODE_DPAD_LEFT
adb shell input keyevent KEYCODE_DPAD_RIGHT
adb shell input keyevent KEYCODE_DPAD_CENTER

(Natalja Librante Lace) #13

Заменила, запустила, все равно:
INSTRUMENTATION_STATUS: stack=com.android.uiautomator.core.UiObjectNotFoundException: UiSelector[RESOURCE_ID=testing.android:id/action_sign_out]


(Dmitry Cheremushkin) #14

Эх… (( Пока не вижу другого способа, кроме как использовать курсорные клавиши.

P.S. А в Play Store этого приложения нет? Пусть прошлой версии.


(Natalja Librante Lace) #15

нет, к сожалению

С курсорными клавишами поэкспериментирую.

Еще один вариант решения проблемы: девелоперы обещали для тестирования сделать сборку, где логаут будет просто еще одной кнопкой на панели