Тесты инструментов Android не пройдены на Google Test Lab Galaxy S9 + из-за всплывающего окна с клавиатурой - PullRequest
0 голосов
/ 03 октября 2018

Иногда тесты инструментальных средств (Espresso) не выполняются в Google Firebase Test Lab из-за всплывающего окна с клавиатурой (снимок экрана), которое блокирует экран и предотвращает события касания / ввода.

Это происходит только приSamsung Galaxy S9 +

enter image description here

Вот исключение:

android.support.test.espresso.PerformException: ошибкавыполнение 'type text (666666)' on view '(является потомком a: (with id: XXX) и экземпляра android.widget.EditText)'.

Причина: android.support.test.espresso.InjectEventSecurityException: java.lang.SecurityException: для внедрения в другое приложение требуется разрешение INJECT_EVENTS на android.support.test.espresso.base.InputManagerEventInjectionStrategy.injectKeyEvent (InputManagerEventInjectionStrategy.java: 101 * 1016 1017) 1013).

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Я тоже сталкивался с этой проблемой.Это на стороне Firebase Test Lab, и вы не должны пытаться найти обходной путь.Иногда возникают проблемы с устройствами, за которые вы не несете ответственности.Вместо этого вы должны сообщить об этом команде Firebase напрямую, если вы хотите, чтобы это было исправлено как можно скорее.

Самый быстрый способ сделать это - перейти на # test-lab channel Firebase Slackсообщество и сообщать им о такой проблеме.Они попросят вас указать ваш матричный идентификатор, если вы столкнулись с ошибкой.

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

0 голосов
/ 08 октября 2018

Может быть, вы можете попробовать поиграть с командой "ime" из ADB, чтобы включить другую клавиатуру (например, вы можете записать возврат ime list для получения идентификаторов) перед запуском ваших тестов (например, @Before):

getInstrumentation().getUiAutomation().executeShellCommand("ime enable ID");
Thread.sleep(1000);
getInstrumentation().getUiAutomation().executeShellCommand("ime set ID");

В противном случае вы можете обойти это с помощью uiautomator и выполнить проверку перед использованием клавиатуры с таким фрагментом кода:

...
onView(withId(R.id.inputField)).perform(click());
if (Build.VERSION.SDK_INT >= 23) {
    UiDevice device = UiDevice.getInstance(getInstrumentation());
    UiObject skipButton = device.findObject(new UiSelector().text("SKIP"));
    if (skipButton.exists()) {
        try {
            skipButton.click();
            Timber.e(e, "Dismissed popup on Keyboard");
        } catch (UiObjectNotFoundException e) {
            Timber.e(e, "There is no popup displayed on Keyboard");
        }
    }
}
onView(withId(R.id.inputField)).perform(typeText("some"), pressImeActionButton());
...

Надеюсь, эта помощь!

...