FacebookのWebDriverクライアントライブラリを使った、Chromeのリモート操作について。
準備
Chromeをリモート操作するため、ChromeDriverをダウンロードします。 ここではCentOSを使用するので、最新バージョンのLinux用 chromedriver_linux64.zip をダウンロードして解凍します。
Chromeがインストールされていない場合、以下のページを参考にインストールします。
facebook/php-webdriverがインストールされていない場合、以下のページを参考にインストールします。
-
ヘッドレスChromeの操作テスト
PHPプログラムでChromeDriverを使って、ヘッドレスのChromeをリモート操作してテストします。 OSはCentOS7.2で、Selenium Serverは使用しません。
例
<?php
require_once(__DIR__ . '/../vendor/autoload.php');
use Facebook\WebDriver;
use Facebook\WebDriver\WebDriverExpectedCondition;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Chrome\ChromeDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
class Test {
public function run()
{
$screenPath = '/vagrant/screenshot.png';
// ダウンロードしたchromedriverのパスを指定
$driverPath = realpath(__DIR__ . "/chromedriver");
putenv("webdriver.chrome.driver=" . $driverPath);
// Chromeを起動するときのオプション指定用
$options = new ChromeOptions();
// ヘッドレスで起動するように指定
$options->addArguments(['--headless']);
$caps = DesiredCapabilities::chrome();
$caps->setCapability(ChromeOptions::CAPABILITY, $options);
$driver = ChromeDriver::start($caps);
$driver->get('http://www.yahoo.co.jp/');
// スクリーンショットを保存
$driver->takeScreenshot($screenPath);
// ブラウザを閉じる
$driver->close();
}
}
$t = new Test();
$t->run();
これをtest_client.phpと保存した場合、以下のように実行します。
$ php test_client.php PHP Notice: Constant CURLOPT_CONNECTTIMEOUT_MS already defined in /home/vagrant/work/selenium/vendor/facebook/webdriver/lib/Net/URLChecker.php on line 70 PHP Notice: Constant CURLOPT_CONNECTTIMEOUT_MS already defined in /home/vagrant/work/selenium/vendor/facebook/webdriver/lib/Net/URLChecker.php on line 70 $Noticeのメッセージが表示されますが、無視します。 正常ならスクリーンショットのファイルが作成されていますので、その画像ファイルを確認します。 Yahooトップページの画像になっていればOKです。