Настройте Selenium для управления Safari в приватном режиме

Как настроить Selenium для управления Safari в приватном режиме? (Я использую интерфейс Ruby).

Для контекста, вот почему важно запускать тесты в приватном режиме Safari: попытка записи в локальное хранилище вызовет ошибку в приватном режиме Safari. Поэтому мне нужны автоматизированные тесты, которые проверяют, что мой код избегает записи в локальное хранилище в приватном режиме. (И, что, возможно, более важно, привлечет внимание разработчиков к будущим ошибкам.


person Zack    schedule 20.05.2015    source источник
comment
Разве вы не можете просто запустить свои тесты в обычном режиме, а затем проверить, есть ли что-нибудь в локальном хранилище, используя обычный файловый ввод-вывод в ruby ​​- забудьте о Selenium?   -  person SiKing    schedule 28.05.2015
comment
Обычная работа страницы заключается в сохранении некоторых данных в локальном хранилище. Следовательно, JavaScript аварийно завершает работу, если пользователь посещает страницу с помощью Safari в приватном режиме. Мне нужен автоматический тест (думаю, CI), который проверит, что страница работает в приватном режиме Safari. Автоматизированная часть важна, так как если через год другой разработчик забудет, что вы не можете писать в локальное хранилище в режиме приватного просмотра, автоматический тест уловит упущение.   -  person Zack    schedule 29.05.2015
comment
Кроме того, для пояснения, под локальным хранилищем я подразумеваю локальное хранилище HTML5 (w3schools.com/html/ html5_webstorage.asp), а не в локальной файловой системе.   -  person Zack    schedule 29.05.2015


Ответы (1)


Давайте посмотрим на определение частного просмотра здесь: https://support.apple.com/kb/PH19216?locale=en_US

Когда вы используете окна приватного просмотра, Safari не сохраняет историю посещенных страниц и просит веб-сайты, которые вы посещаете, не отслеживать вас.

и здесь: http://en.wikipedia.org/wiki/Privacy_mode

Режим конфиденциальности, или «приватный просмотр», или «режим инкогнито»[1] — это функция конфиденциальности в некоторых веб-браузерах, позволяющая отключить историю посещенных страниц и веб-кеш. Это позволяет человеку просматривать веб-страницы без сохранения локальных данных, которые можно было бы получить позднее. Режим конфиденциальности также отключит сохранение данных в файлах cookie и Flash cookie. Эта защита конфиденциальности действует только на локальном вычислительном устройстве, поскольку по-прежнему можно идентифицировать часто посещаемые веб-сайты, связывая IP-адрес с веб-сервером.

Таким образом, это означает, что Selenium эквивалентен включению приватного просмотра. Каждый раз, когда вы запускаете любой драйвер через Selenium, он создает совершенно новый анонимный профиль, вы фактически просматриваете его в частном порядке. (если вы не используете уже созданный профиль сафари)

НО! Если вы все еще думаете, что вам нужно запустить сафари в режиме инкогнито, вы можете использовать следующий хак:

вы можете автоматизировать процесс включения опции «Частный просмотр» с помощью AppleScript. Вот так.

  1. Сначала запустите системную настройку универсального доступа и включите параметр «Включить доступ для вспомогательных устройств».

  2. Запустите редактор сценариев (в папке AppleScript внутри папки «Приложения») и введите следующий сценарий:

tell application "Safari"
  activate
end tell

tell application "System Events"
  tell process "Safari"
      tell menu bar 1
          tell menu bar item "Safari"
              tell menu "Safari"
                  click menu item "Private Browsing"
              end tell
          end tell
      end tell
  end tell
end tell

Информация отсюда: http://www.macworld.com/article/1139714/enableprivatebrowsing.html

person Andrew    schedule 31.05.2015
comment
Скрипт очень помог, спасибо. Теперь, как мне применить его к конкретному экземпляру Safari, который управляется селеном? - person Zack; 02.06.2015
comment
Selenium не эквивалентен включению приватного просмотра. Если я включу приватный просмотр в Safari, эта строка JavaScript выдаст ошибку QuotaExceededError: 'localStorage.setItem(key, value)'. Этого не происходит просто с помощью Selenium. - person Zack; 03.06.2015
comment
QuotaExceededError отображается из-за того, что браузер не может сохранить информацию локально. В случае селена -- элементы не будут сохранены не потому, что они заблокированы браузером, а потому, что они будут удалены селеном до начала следующей сессии. Так что в некотором смысле они эквивалентны, так как эти данные не будут использоваться в следующем сеансе. Если вам все еще нужно работать именно в режиме инкогнито, я думаю, что существует возможность изменить скрипт выше для запуска инкогнито для определенного профиля. В этом случае вам нужно будет создать этот профиль и использовать его при запуске Selenium. - person Andrew; 03.06.2015
comment
Добавьте к этому тот факт, что при использовании SafariDriver при простом переходе на любую страницу, на которой вы уже вошли, все равно будет выполнен вход в систему. Приватный просмотр запустит вас абсолютно без информации о сеансе. Это то, что привело меня к вопросу. - person Levi Roberts; 10.01.2016