タグ別アーカイブ: Selenium WebDriver

Selenium Dockerを使用したSelenium実行環境(Docker Compose環境)

Selenium Dockerについて

Selenium Dockerを使用すると次のような課題を解決できます。

  • Seleniumのスクリプト開発時、スクリプトを変更するPCで動作確認すると作業が止まる
  • 仮想マシンを実行するにはメモリがきつい
  • 他のPCで実行するにはスクリプトのファイル共有が面倒

設定次第では画面共有でブラウザの表示を見ることもできるため、とても便利です。

前提

Mac上でDockerを動作させています。
WindowsではDockerの動作に仮想マシンが必要なので、あまり恩恵がありません。
Dockerは公式サイトからインストールして起動してください。

Docker for Macなら下記で使用するdocker-composeも同時にインストールされます。

Selenium環境起動用スクリプト

下記の設定ファイルをdocker-compose.ymlとして保存。

設定ファイルを保存したフォルダで、下記コマンドを実行すると起動します。

docker-compose build
docker-compose up

Seleniumの接続先にhttp://dockerを実行中のマシンのIP:4444/wd/hub、CapabilitiesでChromeを指定で接続できます。

下記の設定ファイル使用すると、vncでlocalhost:5900に接続、テスト中のブラウザを表示できます。
MacならFinderからサーバへ接続を選択し、接続先:vnc://localhost:5900/、パスワード:secretを入力すると接続できます。

注意点

Mac上のDockerでホストのファイルシステムに書き込みすると、
少しずつcom.docker.osxfsプロセスのメモリ使用量が増えていきます。
下記のチケットを見る限り、完全な回避策はなさそうです。
https://github.com/docker/for-mac/issues/1287
dockerをrestartするとメモリを消費しているcom.docker.osxfsプロセスも再起動でき、メモリの消費量は起動直後の状態に戻ります。

スクリプトについて

上記のスクリプトを起動した場合、下記の環境を構築します。

Selenium Hub
└ Node(Linux + Chrome)

同時実行数を増やす

Seleniumを同時に実行する環境を増やしたい場合、下記のコマンドでNode(Linux + Chrome)の数を変更することができます。別ターミナルからの入力でも大丈夫です。

docker-compose scale chrome=2

コマンド実行後の構成は次のようになります。

Selenium Hub
├ Node(Linux + Chrome)
└ Node(Linux + Chrome)

Firefoxの実行環境を追加する

Firefoxを動作させたい場合、docker-compose.ymlへ下記の設定を加えることで、Node(Linux + Firefox)を追加できます。

  firefox:
    image: selenium/node-firefox
    environment:
      - HUB_PORT_4444_TCP_ADDR=hub
      - HUB_PORT_4444_TCP_PORT=4444
    depends_on:
      - hub

EdgeをSeleniumHubに追加する

Windows上のSeleniumの実行環境が必要です。
Selenium公式サイトからSelenium Standalone Serverをダウンロードしてください。
Edgeでの動作を確認する場合はMircosoftが提供しているEdge向けのWebDriverが必要です。Windows10のビルドバージョンに合わせてWebDriverを選んでください。IE11の場合はIE用のDriverに加えてインターネットオプションの変更も必要です。
上記ページのVirtual Machineではテスト用のWindows仮想マシンも提供されています。

Selenium Serverおよび設定ファイルを用意したうえで、コマンドプロンプトから次のコマンドを実行すると、Selenium HubへEdgeのNodeを追加できます。「3.8.1」の箇所はバージョンに応じて書き換えてください。

java -jar selenium-server-standalone-3.8.1.jar -role node -nodeConfig node.json

設定ファイルは下記の内容をnode.jsonとして保存してください。「HUBのIPアドレス」は環境に応じて書き換えが必要です。

仮想マシンを使用していると、NAT接続ではHubからNodeへの接続を上手くさばいてくれません。PCの外の環境に依存してしまいますが、Bridge接続で回避すると楽です。

まとめ

以上のとおり、Selenium Dockerを使用して便利なテスト環境を構築することができます。
Jenkinsもdocker環境で動作させ、Docker Composeでまとめて管理すればCI環境をportableにできて便利です(Jenkinsの設定をbackup/restoreする仕組みは必要です)。