Как стать автором
Поиск
Написать публикацию
Обновить

[Appium:iOS] Как работать с запросами разрешений в Appium: распознаём, что от нас хочет iOS

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров903
Всего голосов 14: ↑14 и ↓0+17
Комментарии11

Комментарии 11

ну наворотили конечно......

А чем простое переключение не устаивает через сетинги?

// Java
driver.setSetting("defaultActiveApplication", "com.apple.ContactsUI.LimitedAccessPromptView");

И все - никто не дергается..... и все видно

Более того, после того как диалог закрылся обратно не надо переключатся. Аппиум сам вернется и продолжит работать с исходным прилождением.

Звучит интересно. :)
Через setSetting я не пробовал, ибо даже в ченджлисте советовали

require switching the active application to com.apple.springboard in order to interact with system dialogs

Можете поделиться ссылочками на документацию?

Смутило в Вашем примере com.apple.ContactsUI.LimitedAccessPromptView, - ощущение, что с такой конкретикой потребуется предавать для каждого разрешения свое значение. Если правильно понимаю, можно передать com.apple.springboard , что позволит работать со всеми системными диалогами?

С какой "конкретикой"? Речь идет о новых системных разрешениях которые появились с iOS18.

Оригинальные тикет в Аппиум трекере "Find a better method to handle com.apple.ContactsUI.LimitedAccessPromptView bundle id automatically since iOS 18 contacts permission" -

https://github.com/appium/appium/issues/20591

Я это делаю так:

    @Step("Tap 'Allow Full Access' contact permission button")
    public void acceptContactPermission() {
        // iOS 18 only
        // https://github.com/appium/appium-xcuitest-driver/pull/2474
        // docs: address com.apple.ContactsUI.LimitedAccessPromptView in troubleshooting
        if (isIOS) {
            getDriver().setSetting("defaultActiveApplication", "com.apple.ContactsUI.LimitedAccessPromptView");
            try {
                tap(driver.findElement(AppiumBy.iOSNsPredicateString("label == 'Allow Full Access' OR label BEGINSWITH 'Share All'")));
            } catch (Exception ignored) {
            }
        }
    }

Со старыми/другими разрешениями - ничего не изменилось. Они прекрасно видны и нажимаются по старому.

Делаю так:

    @Step("Tap 'Accept permissions' button")
    public boolean tapAcceptPermissionsButton() {
        Logger.log();
        final String iosLocator = "**/XCUIElementTypeButton[`name == \"Allow While Using App\" OR name == \"Allow\"`]";
        boolean bool = false;

        // https://appium.github.io/appium-xcuitest-driver/7.3/reference/settings/
        try {
            driver.setSetting("acceptAlertButtonSelector", iosLocator);
        } catch (Exception ignored) {
        }
        try {
            driver.switchTo().alert().accept();
            bool = true;
        } catch (Exception ignored) {
        }
        return bool;
    }

Ссылочка на док (а как вы работаете без чтения доков :-) .....

https://appium.github.io/appium-xcuitest-driver/latest/reference/settings/

С какой "конкретикой"? Речь идет о новых системных разрешениях которые появились с iOS18.

Со старыми/другими разрешениями - ничего не изменилось. Они прекрасно видны и нажимаются по старому.

Так все системные разрешения поменялись в iOS18 или только вот это конкретное, про контакты работает иначе? :)

Я спрашивал про то, будет ли аргумент другой для других разрешений. Почему это для меня важно? Во время тестов могут появиться не только запросы которые мы ожидаем по кейсу (запрос на уведомления/диск/галерею и т.д.), но и другие. Например, сообщения о главном экране, общем буфере обмена с другим устройством, подключение других устройств и т.д., - если Вы тестируете на реальных устройствах, думаю, Вы с этим сталкиваетесь. Как Вы обрабатываете такие запросы?

Со старыми/другими разрешениями - ничего не изменилось. Они прекрасно видны и нажимаются по старому.

Странно, - именно после обновления на указанную версию драйвера у меня текст уведомлений получалось доставать только после переключения на com.apple.springboard. Т.е. да, работа с командами mobile: alert происходит отлично и без переключения, но текст запроса получить не выходит.

Ссылочка на док

Благодарю. :)

а как вы работаете без чтения доков :-)

Без чтения - плохо. Я больше погружался в использование методов (Execute Methods раздел в доке драйвера) и оптимальное формирование капабилитис. Менять свойства типа defaultActiveApplication - не менял, посмотрю в эту сторону, спасибо.

А вы не пробовали для обычных ?

String txt = driver.switchTo().alert().getText();

С контактами мне кажется только сменив defaultActiveApplication можно вытащить.

ЗЫ Нам в тестах надо просто принять или отклонить запрос. Сам текст не нужен. Тот код что я прислал выше ну и еще есть немного другого все покрывает. Все на реальных тел. Своя ферма 25 тел.

А вы не пробовали для обычных ?

Не-а, почему-то прошло мимо. Выглядит шикарно, пошел пробовать.

Все на реальных тел. Своя ферма 25 тел.

Звучит интересно! А вы что используете для работы с фермой (в разрезе выбора устройств и взаимодействия с ними) - что-то самописное, Appium Grid или плагин Appium Device Farm, если не секрет?

А вы что используете для работы с фермой

Не поверите - ничего. Просто подключены к макминикам через хабы. К одному iOS, к другому Android. Макминики подключены агентами к Jenkins.

По ночам бегают 700-800 тестов под каждую платформу. При релизе около 900. За 5 лет стоимость такого по подсчетам около 200-250 евро в месяц. Все таки надо менять иногда. Андроид все Nokia. iOS - самые дешевые были iPhone8, сейчас iPhone11.

А выбор устройств реализован на дженкинсе через блокируемый ресурс, я правильно понял? Интересная реализация!

Подписался на Вас, если напишите по ферме что-то, было бы круто почитать. :)

А че ждать то - вот сейчас и попробуем на обычных вытаскивается у нас

String txt = driver.switchTo().alert().getText();
->
Allow “xx” to use your location?
“xx” Would Like to Send You Notifications

ЗЫ да и на офиц форум Аппиума вы заходите? я там -

https://discuss.appium.io/u?order=likes_received&period=all

на обычных вытаскивается у нас

Да, тоже все получилось, спасибо!

да и на офиц форум Аппиума вы заходите? я там

Несколько раз пытался зарегистрироваться, не особо успешно (вроде, и подтверждение было). По итогу, мое взаимодействие с ребятами происходит в комментах гита типа такого. 😅

так глубоко я не копаю. я больше практик. да по тест коду гуляю.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий