Я использую экземпляр EC2. Так что графического интерфейса нет.
$pip install selenium
$sudo apt-get install firefox xvfb
Потом делаю так:
$Xvfb :1 -screen 0 1024x768x24 2>&1 >/dev/null &
$DISPLAY=:1 java -jar selenium-server-standalone-2.0b3.jar
05:08:31.227 INFO - Java: Sun Microsystems Inc. 19.0-b09
05:08:31.229 INFO - OS: Linux 2.6.32-305-ec2 i386
05:08:31.233 INFO - v2.0 [b3], with Core v2.0 [b3]
05:08:32.121 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
05:08:32.122 INFO - Version Jetty/5.1.x
05:08:32.123 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
05:08:32.124 INFO - Started HttpContext[/selenium-server,/selenium-server]
05:08:32.124 INFO - Started HttpContext[/,/]
05:08:32.291 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@1186fab
05:08:32.292 INFO - Started HttpContext[/wd,/wd]
05:08:32.295 INFO - Started SocketListener on 0.0.0.0:4444
05:08:32.295 INFO - Started org.openqa.jetty.jetty.Server@1ffb8dc
Отлично, теперь все должно работать, да?
Когда я запускаю свой код:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
browser = webdriver.Firefox()
browser.get("http://www.yahoo.com")
Я получаю это:
Error: cannot open display: :0
Ответы:
откройте терминал и запустите эту команду
xhost +
. Эти команды необходимо запускать каждый раз при перезагрузке компьютера. Если все работает нормально, возможно, вы можете добавить это в команды запускаТакже убедитесь, что в вашем файле / etc / environment есть строка
export DISPLAY=:0.0
А затем запустите тесты, чтобы увидеть, решена ли ваша проблема.
Пожалуйста, обратите внимание на комментарий от sardathrion ниже, прежде чем использовать это.
источник
xhost +
небезопасно. Пожалуйста, не используйте это. Если вам нужно использовать xhost, добавьте конкретную машину, которую вы хотите, а не + (также как и все).Вы можете использовать PyVirtualDisplay (оболочку Python для Xvfb) для запуска автономных тестов WebDriver.
#!/usr/bin/env python from pyvirtualdisplay import Display from selenium import webdriver display = Display(visible=0, size=(800, 600)) display.start() # now Firefox will run in a virtual display. # you will not see the browser. browser = webdriver.Firefox() browser.get('http://www.google.com') print browser.title browser.quit() display.stop()
больше информации
Вы также можете использовать xvfbwrapper , который является аналогичным модулем (но не имеет внешних зависимостей):
from xvfbwrapper import Xvfb vdisplay = Xvfb() vdisplay.start() # launch stuff inside virtual display here vdisplay.stop()
или еще лучше, используйте его как менеджер контекста:
from xvfbwrapper import Xvfb with Xvfb() as xvfb: # launch stuff inside virtual display here. # It starts/stops in this code block.
источник
Самый простой способ - использовать xvfb-run:
DISPLAY=:1 xvfb-run java -jar selenium-server-standalone-2.0b3.jar
xvfb-run танцует за вас весь авторитет X, попробуйте!
источник
DISPLAY=:1
не нужно; xvfb-run устанавливает переменную среды DISPLAY на что-то еще (обычно:99
) перед запуском указанной команды (в вашем случаеjava -jar selenium-server...
)Я использую такую установку:
Перед запуском тестов выполните:
И после тестов:
В
init.d
использовании файла я выглядит следующим образом :источник
Если вы используете Maven, вы можете использовать xvfb-maven-plugin, чтобы запустить xvfb перед тестами, запустить их с использованием связанной
DISPLAY
переменной среды и в конце концов остановить xvfb.источник