Seleniumで自動操作環境を作成する

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

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の画面が表示されてすぐに閉じると思います。
これで成功です。

今回は以上です!