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

1

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

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

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

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

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

  • 1
    Почему бы вам не включить его в сценарий и не добавить его в исходный код или добавить в ~ / .bash_profile
  • 0
    Хорошо, я попробую добавить его в ~ / .bash_profile. Дайте вам знать, если это работает. Спасибо
Теги:
selenium
headless

1 ответ

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 for X.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню