web-dev-qa-db-ja.com

ディスプレイなしのLinuxサーバーでChrome WebDriverを実行

LinuxサーバーでSelenium2のchrome webdriverを使用して自動テストを実行したいと思います。

Xvfb( http://www.semicomplete.com/blog/geekery/xvfb-firefox.html を参照)を使用して、サーバー上で実行するように既にFirefoxをセットアップしました。クロムと同様。これは可能ですか?

28
Snukker

FirefoxBinaryでできるように、ChromeDriverでプログラムでこれを行う方法を見つけることができませんでした。

これを可能にするパッチを添付した改善リクエストを提出しました。ここで見ることができます: http://code.google.com/p/Selenium/issues/detail?id=267

編集:これを使用する方法について、Stephenからの以下の応答を見ることができます。変更がマージされました。 https://stackoverflow.com/a/16619608/998442

6
Jaie Wilson

私は、Selenium + chromedriverでLinuxボックスを設定するという同じ課題に直面していました。

前提条件:

  1. JREをインストールしてSelenium jarを実行します

  2. Seleniumサーバーをインストールする

    https://code.google.com/p/Selenium/downloads/list )からjarファイルを取得します

  3. Xvfbをインストールします(すでにこの部分を達成しているようです)

  4. Linuxディストリビューションにgoogle-chromeをインストールします

  5. chromeドライバーをダウンロードしてくださいここから入手できます: https://sites.google.com/a/chromium.org/chromedriver/downloads

  6. 必要になる可能性がある他のSelenium依存関係をインストールします(ただし、上記はchromedriverを機能させるための最小要件です)

走る:

  1. Xvfbを実行する

Xvfb :1 -screen 5 1024x768x8 &

export DISPLAY=:1.5

  1. ChromeDriverオプションを使用してSeleniumサーバーjarを実行します。次のようになります。

Java -jar Selenium-server-standalone-2.30.0.jar -Dwebdriver.chrome.bin=/path/to/google-chrome -Dwebdriver.chrome.driver=/path/to/chromedriver

  1. Seleniumサーバーのログには、次のような出力が表示されるはずです。

2013年3月19日10:07:27 org.openqa.grid.Selenium.GridLauncher main情報:スタンドアロンサーバーの起動

システムプロパティwebdriver.chrome.binを{location of google-chrome}に設定

システムプロパティwebdriver.chrome.driverを{location of chromedriver}に設定

10:07:34.258情報-RemoteWebDriverインスタンスは次に接続する必要があります:http://127.0.0.1:4444/wd/hub

10:07:34.259情報-バージョンJetty/5.1.x 10:07:34.259情報-HttpContext [/ Selenium-server/driver、/ Selenium-server/driver]を開始しました...

参照: http://www.yann.com/en/use-xvfb-Selenium-and-chrome-to-drive-a-web-browser-in-php-23/08/2012.html

乾杯!

23
Hafiz Ismail

SetEnvironmentPropertyからChromeDriverへのプログラムによる によると、次のことができます。

service = new ChromeDriverService.Builder()
    .usingChromeDriverExecutable(new File("/path/to/chromedriver"))
    .usingAnyFreePort()
    .withEnvironment(ImmutableMap.of("DISPLAY",":20"))
    .build();

withEnvironmentのドキュメント

9