Selelum Headless в Ubuntu Server, небольшая ошибка «Похоже, что браузер завершил работу, прежде чем мы смогли подключиться» - PullRequest
1 голос
/ 09 декабря 2011

Итак, я запускаю Selenium на виртуальной машине Ubuntu Server, и у меня есть небольшая проблема. Когда я запускаю виртуальную машину и запускаю тестовый скрипт Selenium, я получаю эту ошибку: selenium.common.exceptions.WebDriverException: Сообщение: «Похоже, что браузер завершил работу, прежде чем мы смогли подключиться» . Теперь, если я выполню этот export DISPLAY =: 99 в терминале перед тем, как запустить любой из моих тестовых сценариев Selenium, все будет работать нормально. Все тесты проходят отлично без головы!

Мои вопросы: знает ли кто-нибудь из вас, как выполнить эту команду при запуске. Так что мне не нужно запускать это в терминале перед тем, как запускать свои тестовые сценарии Selenium. Я попытался добавить его в файл / etc / rc.local . Но это не похоже на работу.

Я также пытался выполнить его в начале моих тестовых сценариев Selenium. Просто добавив это (я использую Python)

os.system("export DISPLAY=:99")

Есть предложения, как этого добиться? Заранее спасибо

1 Ответ

1 голос
/ 09 декабря 2011

Это не сработает:

os.system("export DISPLAY=:99")

Поскольку system() запускает новую оболочку, и оболочка закрывается по окончании, это влияет на среду только одного процесса с очень коротким сроком службы. (Дочерние процессы не могут влиять на среду своих родителей. Родители могут влиять на среду своих детей, только если они вносят изменения до выполнения дочернего процесса.)

Вы можете выбрать несколько различных механизмов для установки DISPLAY:

  • Установите его в скриптах, запускающих механизм тестирования

    Это особенно хорошо, если система может выполнять другие задачи, так как это повлияет как можно меньше. В Python это будет выглядеть так:

    os.environ["DISPLAY"]=":99"
    

    В bash(1) это будет выглядеть так:

    export DISPLAY=:99
    
  • Установите его в сценариях входа в систему учетной записи пользователя, который запускает тесты.

    Это хорошо, если учетной записи пользователя, которая запускает тесты, никогда не понадобится переменная DISPLAY. (Хотя, если пользователь входит в систему через ssh -X testinguser@machine ..., это приведет к сбою обычной ssh(1) X переадресации сеанса.)

    Добавьте это к вашему пользователю ~/.bashrc или ~/.profile или ~/.bash_profile. (См. bash(1) для различий между файлами.)

    export DISPLAY=:99
    
  • Установите его при входе в систему для всех пользователей. Это хорошо, если несколько учетных записей в системе будут запускать сценарии тестирования, и вы просто хотите, чтобы они работали для всех из них. Вы не заботитесь о том, чтобы пользователи когда-либо имели DISPLAY for X forwarding.

    Редактировать /etc/environment, чтобы добавить новую переменную. Модуль pam_env(8) PAM устанавливает переменные среды для всех учетных записей пользователей, которые проходят проверку подлинности в рамках тех служб, для которых настроено использование pam_env(8) в каталоге конфигурации /etc/pam.d/. (Это звучит сложнее, чем на самом деле - некоторые службы хотят, чтобы у прошедших проверку пользователей были установлены переменные среды, а некоторые - нет.)

...