EC2インスタンスを使用しています。したがって、GUIはありません。
$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からのコメントに注意してください。
PyVirtualDisplay (XvfbのPythonラッパー)を使用して、ヘッドレス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オーソリティ全体をあなたのために踊り、試してみます!
これは私が使用するセットアップです:
テストを実行する前に、次を実行します。
export DISPLAY =:99 /etc/init.d/xvfb start
そして、テスト後:
/etc/init.d/xvfb stop
私が使用するinit.d
ファイルは次のようになります。
#!/ bin/bash XVFB =/usr/bin/Xvfb XVFBARGS = "$ DISPLAY -ac -screen 0 1024x768x16" PIDFILE = $ { HOME}/xvfb _ $ {DISPLAY:1} .pid case "$ 1" in start) echo -n "仮想Xフレームバッファーの開始:Xvfb" /sbin/start-stop-daemon --start --quiet --pidfile $ PIDFILE --make-pidfile --background --exec $ XVFB-$ XVFBARGS echo "。" ;; stop) echo -n "仮想Xフレームバッファーの停止:Xvfb" /sbin/start-stop-daemon --stop --quiet --pidfile $ PIDFILE echo "。" ;; restart) $ 0 stop $ 0 start ;; *) echo "使用法:/etc/init.d/xvfb {start | stop | restart}" exit 1 esac exit 0
Mavenを使用する場合、 xvfb-maven-plugin を使用して、テストの前にxvfbを起動し、関連するDISPLAY
環境変数を使用して実行し、結局xvfbを停止できます。