НейроАгент

Полное руководство: отключение всплывающего окна доступа к экрану в macOS

Узнайте, как отключить всплывающее окно 'bash запрашивает доступ к экрану' при запуске UI-тестов в macOS. Узнайте о ручной настройке, автоматизированных решениях CI и специфичной для IntelliJ настройке для предотвращения мешающих диалогов безопасности.

Вопрос

Как отключить всплывающее окно “bash запрашивает доступ к экрану” при запуске UI-тестов на macOS?

При запуске UI-тестов на macOS появляется системное всплывающее окно с сообщением: “bash” запрашивает обход системного выбора приватных окон и прямой доступ к вашему экрану и аудио.

Как можно отключить это всплывающее окно? Могут ли всплывающие окна входа и доступа к экрану быть обойдены при запуске автоматизированных UI-тестов? Какова официально рекомендуемая настройка или конфигурация для запуска IntelliJ UI-тестов в CI-средах (Mac, Linux, Windows) для предотвращения появления этих диалоговых окон?

НейроАгент

Чтобы отключить всплывающее окно “bash запрашивает доступ к экрану” при запуске UI-тестов на macOS, необходимо предоставить соответствующие разрешения на запись экрана для вашего тестового приложения через системные настройки или использовать инструменты автоматического управления разрешениями. Для CI-сред можно реализовать программные решения, такие как команды tccutil или корпоративные профили, для автоматического обхода этих всплывающих окон. UI-тесты IntelliJ IDEA требуют правильной настройки конфигурации JVM и идентификатора пакета (bundle identifier) для предотвращения появления этих диалоговых окон во время автоматизированного тестирования.


Содержание


Понимание всплывающего окна доступа к экрану

Всплывающее окно “bash запрашивает доступ к экрану” является функцией безопасности macOS, которая появляется, когда приложение пытается записывать содержимое экрана или отслеживать системную активность без соответствующей авторизации. В этом всплывающем окне конкретно указано “обойти системный выборщик приватных окон и получить прямой доступ к вашему экрану и аудиоустройствам”, что означает, что приложение запрашивает разрешения как на запись экрана, так и на ввод аудио.

Эта мера безопасности предотвращает несанкционированный захват приложениями конфиденциальной информации, отображаемой на вашем экране. В контексте UI-тестов это всплывающее окно обычно появляется, когда:

  • Автоматизированные тесты делают скриншоты или записи экрана для проверки
  • Тестовые фреймворки используют API доступности для проверки UI-элементов
  • Тесты взаимодействуют с визуальными компонентами, требующими визуальной проверки

Всплывающее окно появляется, потому что фреймворк macOS Transparency, Consent, and Control (TCC) блокирует несанкционированный доступ к защищенным ресурсам таким, как запись экрана.


Ручная настройка разрешений

Для сред разработки можно вручную предоставить разрешения, чтобы устранить всплывающее окно:

Через системные настройки

  1. Откройте Системные настройки > Безопасность и конфиденциальность > Конфиденциальность
  2. Выберите Запись экрана в боковой панели слева
  3. Нажмите на иконку замка и введите пароль администратора
  4. Добавьте ваше тестовое приложение (или Terminal.app, если используется bash) в список разрешенных
  5. Поставьте галочку рядом с приложением для предоставления доступа к записи экрана

Для Terminal/Bash конкретно

Поскольку всплывающее окно упоминает “bash”, вам нужно:

  • Запускать ваш тестовый раннер из Terminal.app после предоставления разрешений
  • Использовать полный путь к вашему тестовому приложению
  • Рассмотреть возможность создания специального тестового раннера с правильным идентификатором пакета

Примечание: Этот подход требует ручного вмешательства и не будет работать в полностью автоматизированных CI-средах.


Автоматизированные решения для CI-сред

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

Использование утилиты командной строки tccutil

Утилита tccutil может программно управлять настройками конфиденциальности:

bash
# Сброс разрешений на запись экрана (при необходимости)
tccutil reset ScreenRecording

# Предоставление разрешений на запись экрана для вашего тестового приложения
tccutil -i grant ScreenRecording /path/to/your/test/application

# Предоставление разрешений для конкретного идентификатора пакета
tccutil -i grant ScreenRecording com.yourcompany.testrunner

Автоматизация с помощью AppleScript

Создайте 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):

xml
<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-конвейере:

bash
#!/bin/bash
# Предоставление разрешений на запись экрана перед запуском тестов
tccutil -i grant ScreenRecording "$(pwd)/build/Products/Debug/YourTestRunner.app"

Специфическая настройка UI-тестов IntelliJ

Для UI-тестов IntelliJ IDEA требуется специальная настройка для обработки разрешений macOS:

Конфигурация JVM

Используйте эти аргументы JVM для правильного UI-тестирования на macOS:

bash
-Djava.awt.headless=false \
-XstartOnFirstThread \
-Dapple.awt.UIElement=true \
-Didea.test.mode=true

Конфигурация Gradle

Обновите ваш файл build.gradle:

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

  1. Создайте пользовательскую конфигурацию запуска для UI-тестов
  2. Установите параметры VM с указанными выше аргументами для macOS
  3. Настройте рабочий каталог в корневую директорию вашего проекта
  4. Настройте правильные задачи перед запуском для настройки разрешений

Конфигурация идентификатора пакета

Убедитесь, что ваш тестовый раннер имеет правильный идентификатор пакета, добавив в Info.plist:

xml
<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-автоматизации
bash
# Пример настройки для 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 или поддержки виртуального дисплея

Лучшие практики и соображения по безопасности

Управление средой

  1. Предварительная настройка разрешений: Установите все необходимые разрешения перед запуском тестов
  2. Отдельные тестовые аккаунты: Используйте аккаунты с минимальными привилегиями для тестирования
  3. Изоляция среды: Держите тестовые среды отдельно от производственных
  4. Очистка разрешений: Реализуйте правильную очистку артефактов тестов и разрешений

Лучшие практики конфигурации тестов

  1. Безголовые режимы: Используйте безголовое тестирование там, где это возможно, чтобы избежать проблем с разрешениями
  2. Обработка ошибок: Реализуйте надежную обработку ошибок, связанных с разрешениями
  3. Механизмы отката: Создайте альтернативные подходы к тестированию, когда разрешения недоступны
  4. Управление конфигурацией: Используйте конфигурационные файлы, специфичные для среды

Безопасность и соответствие требованиям

  1. Документация: Четко документируйте требования к разрешениям и шаблоны доступа
  2. Регулярные аудиты: Периодически проверяйте и аудитируйте предоставленные разрешения
  3. Принцип минимальных привилегий: Предоставляйте только необходимые разрешения для тестирования
  4. Соответствие: Убедитесь, что практики тестирования соответствуют политикам безопасности организации

Интеграция CI/CD

  1. Конфигурация конвейера: Включите управление разрешениями как часть конвейера сборки
  2. Переменные среды: Используйте переменные среды для управления настройками разрешений
  3. Логирование: Реализуйте комплексное логирование для проблем, связанных с разрешениями
  4. Тестирование: Тестируйте обработку разрешений как часть вашего CI/CD конвейера

Источники

  1. Документация для разработчиков Apple - Конфиденциальность и безопасность
  2. Руководство разработчика Apple TCC - Управление политиками конфиденциальности
  3. Документация по UI-тестированию IntelliJ IDEA
  4. Руководство по разрешениям записи экрана macOS
  5. Лучшие практики тестирования в Xcode
  6. Справочная команда tccutil

Заключение

Отключение всплывающего окна “bash запрашивает доступ к экрану” на macOS требует адаптированного подхода в зависимости от вашей тестовой среды и требований. Для сред разработки ручное предоставление разрешений через Системные настройки обеспечивает быстрое решение, в то время как CI-среды требуют программных подходов с использованием tccutil или корпоративных конфигурационных профилей. UI-тесты IntelliJ IDEA особенно выигрывают от правильной настройки конфигурации JVM, идентификатора пакета и свойств тестового режима. Кроссплатформенные CI-решения требуют разных стратегий для каждой операционной системы, при этом macOS является наиболее строгим в отношении разрешений на доступ к экрану. Ключевым является понимание ваших конкретных требований к тестированию и реализация соответствующей стратегии управления разрешениями для обеспечения плавного автоматизированного UI-тестирования без мешающих диалоговых окон безопасности. Всегда отдавайте предпочтение лучшим практикам безопасности, поддерживая эффективность тестирования в ваших CI/CD конвейерах.