Seleniumで自動操作環境を作成する
2025.03.07 09:00
2025.03.07 11:34

Seleniumで自動操作を行う際の環境構築をやってみました。Seleinumを動かすために環境構築を「docker-compose」で、実際の実行をPHPのライブラリ「php-webdriver/webdriver」を使用します。テストの環境はMacです。
1. docker環境の作成
まずはdocker-composeで実行環境を作ります。
コードは以下のとおりです。
services:
web:
container_name: ci_test
image: nginx
platform: 'linux/arm64'
volumes:
- ./html:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
ports:
- 11061:80
working_dir: /var/www/html
depends_on:
- php
environment:
- SERVER_NAME=localhost
networks:
- local
php:
container_name: php
build: ./php
volumes:
- ./html:/var/www/html
networks:
- local
selenium:
container_name: selenium
image: seleniarm/standalone-chromium
platform: 'linux/arm64'
shm_size: '2gb'
ports:
- 11064:4444
- 11065:5900
depends_on:
- web
links:
- web
networks:
- local
privileged: true
networks:
local:
コンテナは、E2Eソフトの「selenium」とE2Eを実行するための「php」、phpを動かすための「web(nginx)」の3つです。
なお、MacはM1以降を想定していますので、intelMacやPC機、CI環境などでは若干変わります。その際のコードは以下です。
services:
web:
container_name: ci_test
image: nginx
volumes:
- ./html:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
ports:
- 11061:80
working_dir: /var/www/html
depends_on:
- php
environment:
- SERVER_NAME=localhost
networks:
- local
php:
container_name: php
build: ./php
volumes:
- ./html:/var/www/html
networks:
- local
selenium:
container_name: selenium
image: selenium/standalone-chrome:latest
shm_size: '2gb'
ports:
- 11064:4444
- 11065:5900
depends_on:
- web
links:
- web
networks:
- local
privileged: true
networks:
local:
platform指定がないのと、seleniumのimageが別なものになっています。
実行します。
docker compose up -d
※ちなみに最近コマンドが「docker-compose」から「docker compose」に変わりました。
2. PHP環境を作成する
次に実行するPHP環境を作成します。
必要なライブラリをcomposerでインストールします。
$ composer require php-webdriver/webdriver
次に実行ファイルを作成します。
<?php
require_once './vendor/autoload.php';
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use PHPUnit\Framework\TestCase;
use Facebook\WebDriver\WebDriverExpectedCondition;
use Facebook\WebDriver\WebDriverBy;
// selenium
$host = 'http://selenium:4444/wd/hub';
// chrome ドライバーの起動
$driver = RemoteWebDriver::create($host,DesiredCapabilities::chrome());
// 指定URLへ遷移 (Google)
$driver->get('https://yahoo.co.jp/');
// ブラウザを閉じる
$driver->close();
// プロセスを終了する
$driver->quit();
3. 実行する
実際にブラウザから実行してみましょう。
本当にアクセスできているか確認するために、Macの画面共有でコンテナ内の画面を確認します。
Finderで「Command + K」を押すとサーバー接続が出てくるので、「vnc://localhost:11065」と入力し、「接続」をクリック。その後のパスワードは「secret」と入れて下さい。
共有画面が出てきたら、その横に通常のブラウザを開いて以下のURLを入力。
http://localhost:11061
共有画面の方にYahooの画面が表示されてすぐに閉じると思います。
これで成功です。
今回は以上です!