Estou na instância EC2. Portanto, não há GUI.
$pip install selenium
$sudo apt-get install firefox xvfb
Então eu faço isso:
$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
Ótimo, tudo deve funcionar agora, certo?
Quando executo meu código:
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")
Eu entendi isso:
Error: cannot open display: :0
Respostas:
abra um terminal e execute este comando
xhost +
. Este comando precisa ser executado toda vez que você reiniciar sua máquina. Se tudo funcionar bem, você pode adicionar isto aos comandos de inicializaçãoCertifique-se também de que em seu arquivo / etc / environment há uma linha
Em seguida, execute seus testes para ver se o problema foi resolvido.
Todos, por favor, observem o comentário de sardatria abaixo antes de usar isso.
fonte
xhost +
é inseguro. Por favor não use. Se você tiver que usar o xhost, adicione a máquina específica que deseja e não + (ou seja, tudo o que for).Você pode usar PyVirtualDisplay (um wrapper Python para Xvfb) para executar testes WebDriver sem interface.
mais informações
Você também pode usar o xvfbwrapper , que é um módulo semelhante (mas não tem dependências externas):
ou melhor ainda, use-o como um gerenciador de contexto:
fonte
A maneira mais fácil provavelmente é usar xvfb-run:
xvfb-run faz toda a dança da autoridade do X para você, experimente!
fonte
DISPLAY=:1
é desnecessário; xvfb-run define a variável de ambiente DISPLAY para outra coisa (geralmente:99
) antes de iniciar o comando especificado (no seu casojava -jar selenium-server...
)Esta é a configuração que uso:
Antes de executar os testes, execute:
E depois dos testes:
O
init.d
arquivo que uso é parecido com este:fonte
Se você usa o Maven, pode usar o xvfb-maven-plugin para iniciar o xvfb antes dos testes, executá-los usando
DISPLAY
a variável de ambiente relacionada e parar o xvfb depois de tudo.fonte