WebDriver не обнаруживает нижний элемент для щелчка после закрытия диалогового окна разрешения

Я использую WdAndroid для запуска тестов автоматизации на appium для Android. Часть, в которой я застреваю, заключается в том, что когда приложение устанавливается в первый раз, появляется диалоговое окно разрешения (разрешение на местоположение). Я использую приведенный ниже код, чтобы принять разрешение.

driver.elementById('com.android.packageinstaller:id/permission_allow_button').click()

Когда диалоговое окно исчезнет, ​​я хочу нажать кнопку действия, чтобы выполнить желаемое действие, используя для этого приведенный ниже фрагмент кода.

const intervalObj = setInterval(() => {

  driver.elementById('com.testpackage.testapp:id/testClickButton').click();

  clearInterval(intervalObj);
}, 3000);

Но вышеуказанное действие не работает, и я получаю следующую ошибку в журнале appium

[отладка] [AndroidBootstrap] [ЖУРНАЛ BOOTSTRAP] [отладка] Поиск 'com.testpackage.testapp:id/testClickButton' с использованием 'ID' с contextId: ''multiple: false [отладка] [AndroidBootstrap] [ЖУРНАЛ BOOTSTRAP] [отладка ] Используя: UiSelector[INSTANCE=0, RESOURCE_ID=com.testpackage.testapp:id/testClickButton] [debug] [AndroidBootstrap] Получен результат команды от начальной загрузки [HTTP] ‹-- POST /wd/hub/session/88f58979-f7ff- 4d52-b840-e930d4a04804/элемент 500 116 мс - 164 [отладка] [AndroidBootstrap] [ЖУРНАЛ BOOTSTRAP] [отладка] Возвращаемый результат: {"статус":7,"значение":"Элемент не найден"}

Поток автоматизации должен принять разрешение и подождать 3 секунды, чтобы выполнить нажатие на кнопку. Но этого не происходит.

Однако, если я удалю диалоговое окно с предупреждением о разрешении, а затем использую приведенный выше фрагмент, чтобы нажать кнопку, он работает нормально. Проблема возникает только тогда, когда диалог закрыт, а автоматизация не находит кнопку.

Я пишу исходный код автоматизации в Node.JS.


person kaibuki    schedule 17.12.2017    source источник


Ответы (1)


Можете ли вы попробовать отправить приложение в фоновый режим сразу после принятия диалогового окна? С этим вы вернете фокус для своего приложения.

driver.elementById('com.android.packageinstaller:id/permission_allow_button').click()
driver.runAppInBackground(0)

После этого вы можете снова искать элемент.

У вашего драйвера также есть возможность автоматически принимать ваши разрешения.

capabilities.setCapability("autoGrantPermissions", "true");

Еще одна возможность, которую я хочу предложить, — «noReset», чтобы эти разрешения не запрашивались каждый раз при запуске приложения, а только в первый раз:

capabilities.setCapability("noReset", "true");
person barbudito    schedule 18.12.2017
comment
Возможности.setCapability(autoGrantPermissions, true) сделал свое дело :) - person kaibuki; 19.12.2017