Selelum Headless в Ubuntu Server, незначительная ошибка Браузер, похоже, закрылся, прежде чем мы смогли подключиться

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

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

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

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

Любые предложения о том, как это сделать? заранее спасибо


person hackthisjay    schedule 09.12.2011    source источник
comment
Почему бы вам не включить его в скрипт и не добавить его в ~/.bash_profile?   -  person pyfunc    schedule 09.12.2011
comment
Хорошо, я попробую добавить его в ~/.bash_profile. Сообщите, если это сработает. Спасибо   -  person hackthisjay    schedule 09.12.2011


Ответы (1)


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

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 для переадресации X.

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

person sarnold    schedule 09.12.2011