Как отключить всплывающее окно “bash запрашивает доступ к экрану” при запуске UI-тестов на macOS?
При запуске UI-тестов на macOS появляется системное всплывающее окно с сообщением: “bash” запрашивает обход системного выбора приватных окон и прямой доступ к вашему экрану и аудио.
Как можно отключить это всплывающее окно? Могут ли всплывающие окна входа и доступа к экрану быть обойдены при запуске автоматизированных UI-тестов? Какова официально рекомендуемая настройка или конфигурация для запуска IntelliJ UI-тестов в CI-средах (Mac, Linux, Windows) для предотвращения появления этих диалоговых окон?
Чтобы отключить всплывающее окно “bash запрашивает доступ к экрану” при запуске UI-тестов на macOS, необходимо предоставить соответствующие разрешения на запись экрана для вашего тестового приложения через системные настройки или использовать инструменты автоматического управления разрешениями. Для CI-сред можно реализовать программные решения, такие как команды tccutil или корпоративные профили, для автоматического обхода этих всплывающих окон. UI-тесты IntelliJ IDEA требуют правильной настройки конфигурации JVM и идентификатора пакета (bundle identifier) для предотвращения появления этих диалоговых окон во время автоматизированного тестирования.
Содержание
- Понимание всплывающего окна доступа к экрану
- Ручная настройка разрешений
- Автоматизированные решения для CI-сред
- Специфическая настройка UI-тестов IntelliJ
- Кроссплатформенные CI-решения
- Лучшие практики и соображения по безопасности
Понимание всплывающего окна доступа к экрану
Всплывающее окно “bash запрашивает доступ к экрану” является функцией безопасности macOS, которая появляется, когда приложение пытается записывать содержимое экрана или отслеживать системную активность без соответствующей авторизации. В этом всплывающем окне конкретно указано “обойти системный выборщик приватных окон и получить прямой доступ к вашему экрану и аудиоустройствам”, что означает, что приложение запрашивает разрешения как на запись экрана, так и на ввод аудио.
Эта мера безопасности предотвращает несанкционированный захват приложениями конфиденциальной информации, отображаемой на вашем экране. В контексте UI-тестов это всплывающее окно обычно появляется, когда:
- Автоматизированные тесты делают скриншоты или записи экрана для проверки
- Тестовые фреймворки используют API доступности для проверки UI-элементов
- Тесты взаимодействуют с визуальными компонентами, требующими визуальной проверки
Всплывающее окно появляется, потому что фреймворк macOS Transparency, Consent, and Control (TCC) блокирует несанкционированный доступ к защищенным ресурсам таким, как запись экрана.
Ручная настройка разрешений
Для сред разработки можно вручную предоставить разрешения, чтобы устранить всплывающее окно:
Через системные настройки
- Откройте Системные настройки > Безопасность и конфиденциальность > Конфиденциальность
- Выберите Запись экрана в боковой панели слева
- Нажмите на иконку замка и введите пароль администратора
- Добавьте ваше тестовое приложение (или Terminal.app, если используется bash) в список разрешенных
- Поставьте галочку рядом с приложением для предоставления доступа к записи экрана
Для Terminal/Bash конкретно
Поскольку всплывающее окно упоминает “bash”, вам нужно:
- Запускать ваш тестовый раннер из Terminal.app после предоставления разрешений
- Использовать полный путь к вашему тестовому приложению
- Рассмотреть возможность создания специального тестового раннера с правильным идентификатором пакета
Примечание: Этот подход требует ручного вмешательства и не будет работать в полностью автоматизированных CI-средах.
Автоматизированные решения для CI-сред
Для сред непрерывной интеграции вам нужны программные решения для автоматической обработки разрешений:
Использование утилиты командной строки tccutil
Утилита tccutil может программно управлять настройками конфиденциальности:
# Сброс разрешений на запись экрана (при необходимости)
tccutil reset ScreenRecording
# Предоставление разрешений на запись экрана для вашего тестового приложения
tccutil -i grant ScreenRecording /path/to/your/test/application
# Предоставление разрешений для конкретного идентификатора пакета
tccutil -i grant ScreenRecording com.yourcompany.testrunner
Автоматизация с помощью AppleScript
Создайте AppleScript для автоматического предоставления разрешений:
tell application "System Events"
tell process "SystemUIServer"
click menu bar item "Security" of menu bar 1
click menu item "Screen Recording" of menu "Security"
delay 1
click button "OK"
end tell
end tell
Корпоративная конфигурация с PPPC
Для корпоративных сред настройте профили управления политиками конфиденциальности (Privacy Preferences Policy Control):
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>com.apple.TCC.configuration-profile-policy</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadIdentifier</key>
<string>com.example.tcc.screenrecording</string>
<key>PayloadUUID</key>
<string>12345678-1234-1234-1234-123456789012</string>
<key>PayloadEnabled</key>
<true/>
<key>PayloadDisplayName</key>
<string>Screen Recording Permissions</string>
<key>Services</key>
<dict>
<key>SystemPolicyScreenRecording</key>
<array>
<string>com.yourcompany.testrunner</string>
</array>
</dict>
</dict>
</array>
Предварительные скрипты в CI
Добавьте настройку разрешений как предварительный шаг в вашем CI-конвейере:
#!/bin/bash
# Предоставление разрешений на запись экрана перед запуском тестов
tccutil -i grant ScreenRecording "$(pwd)/build/Products/Debug/YourTestRunner.app"
Специфическая настройка UI-тестов IntelliJ
Для UI-тестов IntelliJ IDEA требуется специальная настройка для обработки разрешений macOS:
Конфигурация JVM
Используйте эти аргументы JVM для правильного UI-тестирования на macOS:
-Djava.awt.headless=false \
-XstartOnFirstThread \
-Dapple.awt.UIElement=true \
-Didea.test.mode=true
Конфигурация Gradle
Обновите ваш файл build.gradle:
test {
systemProperty 'java.awt.headless', 'false'
systemProperty 'apple.awt.UIElement', 'true'
jvmArgs '-XstartOnFirstThread'
// Специфические свойства IntelliJ
systemProperty 'idea.test.mode', 'true'
systemProperty 'idea.platform.prefix', 'Idea'
}
task uiTest(type: Test) {
systemProperty 'java.awt.headless', 'false'
jvmArgs '-XstartOnFirstThread', '-Didea.test.mode=true'
}
Конфигурация запуска IntelliJ IDEA
- Создайте пользовательскую конфигурацию запуска для UI-тестов
- Установите параметры VM с указанными выше аргументами для macOS
- Настройте рабочий каталог в корневую директорию вашего проекта
- Настройте правильные задачи перед запуском для настройки разрешений
Конфигурация идентификатора пакета
Убедитесь, что ваш тестовый раннер имеет правильный идентификатор пакета, добавив в Info.plist:
<key>CFBundleIdentifier</key>
<string>com.yourcompany.intellij.tests</string>
<key>LSUIElement</key>
<true/>
Кроссплатформенные CI-решения
Для кроссплатформенных CI-сред требуются разные подходы для каждой операционной системы:
Настройка для macOS
- Фазы сборки Xcode: Добавьте скрипты настройки разрешений как фазы сборки
- Настройка тестовой среды: Настройте CI для запуска скриптов разрешений перед тестами
- Тестовый фреймворк: Используйте XCTest с правильными правами (entitlements)
- Виртуализация: Рассмотрите использование виртуальных машин macOS с преднастроенными разрешениями
Решения для Linux
Linux не имеет той же системы разрешений, но требует:
- Сервер отображения: Настройте X11 или Wayland для GUI-тестирования
- Виртуальный дисплей: Используйте
xvfb(X Virtual Framebuffer) для безголового тестирования - Захват экрана: Инструменты вроде
ffmpegдля автоматических скриншотов - Доступность: Настройте AT-SPI для UI-автоматизации
# Пример настройки для Linux
xvfb-run -a your-test-command
Решения для Windows
Windows требует других подходов:
- API записи экрана: Используйте Windows Graphics Capture API
- Доступность: UI Automation или Windows Accessibility APIs
- Виртуальный дисплей: Инструменты вроде DisplayLink или виртуальные дисплеи
- Разрешения: Настройте правильные манифесты приложений и параметры безопасности
Решения на основе контейнеров
Рассмотрите контейнеризированные среды для единообразия:
- Контейнеры macOS: Экспериментальная поддержка через виртуальные машины macOS
- Контейнеры Linux: Используйте X11 forwarding или VNC для GUI-тестирования
- Контейнеры Windows: Настройте с помощью RDP или поддержки виртуального дисплея
Лучшие практики и соображения по безопасности
Управление средой
- Предварительная настройка разрешений: Установите все необходимые разрешения перед запуском тестов
- Отдельные тестовые аккаунты: Используйте аккаунты с минимальными привилегиями для тестирования
- Изоляция среды: Держите тестовые среды отдельно от производственных
- Очистка разрешений: Реализуйте правильную очистку артефактов тестов и разрешений
Лучшие практики конфигурации тестов
- Безголовые режимы: Используйте безголовое тестирование там, где это возможно, чтобы избежать проблем с разрешениями
- Обработка ошибок: Реализуйте надежную обработку ошибок, связанных с разрешениями
- Механизмы отката: Создайте альтернативные подходы к тестированию, когда разрешения недоступны
- Управление конфигурацией: Используйте конфигурационные файлы, специфичные для среды
Безопасность и соответствие требованиям
- Документация: Четко документируйте требования к разрешениям и шаблоны доступа
- Регулярные аудиты: Периодически проверяйте и аудитируйте предоставленные разрешения
- Принцип минимальных привилегий: Предоставляйте только необходимые разрешения для тестирования
- Соответствие: Убедитесь, что практики тестирования соответствуют политикам безопасности организации
Интеграция CI/CD
- Конфигурация конвейера: Включите управление разрешениями как часть конвейера сборки
- Переменные среды: Используйте переменные среды для управления настройками разрешений
- Логирование: Реализуйте комплексное логирование для проблем, связанных с разрешениями
- Тестирование: Тестируйте обработку разрешений как часть вашего CI/CD конвейера
Источники
- Документация для разработчиков Apple - Конфиденциальность и безопасность
- Руководство разработчика Apple TCC - Управление политиками конфиденциальности
- Документация по UI-тестированию IntelliJ IDEA
- Руководство по разрешениям записи экрана macOS
- Лучшие практики тестирования в Xcode
- Справочная команда tccutil
Заключение
Отключение всплывающего окна “bash запрашивает доступ к экрану” на macOS требует адаптированного подхода в зависимости от вашей тестовой среды и требований. Для сред разработки ручное предоставление разрешений через Системные настройки обеспечивает быстрое решение, в то время как CI-среды требуют программных подходов с использованием tccutil или корпоративных конфигурационных профилей. UI-тесты IntelliJ IDEA особенно выигрывают от правильной настройки конфигурации JVM, идентификатора пакета и свойств тестового режима. Кроссплатформенные CI-решения требуют разных стратегий для каждой операционной системы, при этом macOS является наиболее строгим в отношении разрешений на доступ к экрану. Ключевым является понимание ваших конкретных требований к тестированию и реализация соответствующей стратегии управления разрешениями для обеспечения плавного автоматизированного UI-тестирования без мешающих диалоговых окон безопасности. Всегда отдавайте предпочтение лучшим практикам безопасности, поддерживая эффективность тестирования в ваших CI/CD конвейерах.