LoginSignup
0
0

More than 1 year has passed since last update.

Selenium Gridの環境を構築する(docker-compose利用)

Posted at

クライアントも WebDriver もブラウザ本体もローカルで稼働する場合

macOS を利用している場合は、ChromeDriver などのドライバーを格納したディレクトリで以下のコマンドを実行して、実行可能にしてから使用する。

sudo xattr -d -r com.apple.quarantine chromedriver

Safari は WebDriver は不要で、Safari の設定で「開発」から「リモートオートメーションを許可」とするだけでよい。

Chrome や Firefox(geckodriver) を利用する場合は、WebDriver へのパスを指定する必要がある。

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
ChromeOptions options = new ChromeOptions();
WebDriver driver = new ChromeDriver(options);

クライアントはローカルで稼働し、 Hub と Node は Grid を構成するコンテナ内で稼働する場合

複数のコンテナが必要なので、docker-compose を利用するのが楽。
以下の yml がそのまま使える。
https://github.com/SeleniumHQ/docker-selenium/blob/trunk/docker-compose-v3.yml

docker-compose -f docker-compose-v3.yml up

Java でクライアントを利用する例。options は必要なものを設定する。最後の URL は Hub にアクセスできる URL を指定する。docker-machine を利用する場合、docker-machine ip defaultの IP アドレス を hosts に記載しておくと楽。RemoteWebDriver を利用する場合は、webdriver.chrome.driverのような webdriver のパスの指定は node 側に存在するため、クライアント側は hub の URL のみを指定すれば良い。クライアントのコード上は環境固有の情報がなくなってスッキリするが、ローカルで稼働させた場合よりもパフォーマンスが劣化する。

DesiredCapabilities dc = DesiredCapabilities.chrome();
dc.setBrowserName("chrome");
dc.setPlatform(Platform.LINUX);
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless", "--disable-gpu", "--window-size=1024,768");
dc.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new RemoteWebDriver(new URL("http://docker-machine:4444"), dc);

ブラウザで4444番ポートを開くと、Hubの下にぶら下がっているNodeを確認できる。
スクリーンショット 2021-10-24 17.49.03.png

クライアントはローカルで稼働し、 Hub と Node は standalone コンテナ内で稼働する場合

Hub と Node は standalone コンテナに入っているのでコンテナ一つを稼働すれば良い。

# docker-composeを用いない場合
docker run --rm -d -p 4444:4444 -p 7900:7900 --shm-size=2gb selenium/standalone-chrome:4.0.0-20211013

Java コードは Grid の例と同じ。

(補足)Hub と Node を個別に起動する方法

# hubを起動する
java -jar selenium-server-4.0.0.jar hub
# nodeを起動する
# macOS の場合、Safari は webdriver のパスを指定する必要はない。portとmax-sessionsは適宜設定
java -Dwebdriver.chrome.driver=/path/to/chromedriver -Dwebdriver.gecko.driver=/path/to/geckodriver -jar selenium-server-4.0.0.jar node --hub http://localhost:4444/ --port 5555 --max-sessions 1

(補足)コンテナを用いている場合に操作中の画面を参照する方法

7900 番ポートをブラウザで開くと参照できる(headless にしているとダメ)。macOS で docker-machine を使っている場合は以下のコマンドでコマンドでブラウザを開ける。

open http://$(docker-machine ip default):7900/
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0