Laravel duskで別ホストのブラウザを使う方法


開発環境をhomestead等で構築した場合、duskテストをheadlessでしか実行できない。
そこで、ホストOS(それ以外のホストでも同じ)のブラウザを使うことでブラウザ動作を目視できるようにする。

記事は下記構成を想定
・開発環境: homestead(VirtualBox)
・Laravelバージョン: Laravel5.5 + dusk2.0
・ホストOS: Windows10

ホストOS側

Laravelプロジェクト内のchromedriver実行ファイルをホストOSの任意の場所にコピー

win,mac,linux用があるので環境にあわせてチョイスしてください。
vendor/laravel/dusk/bin/chromedriver-win.exe

chromedriverを実行

接続元IPアドレスのホワイトリストを設定する必要があるが、面倒なので全許可にしておく。
./chromedriver-win.exe --whitelisted-ips 0.0.0.0

ファイアウォール等の設定

外部からの接続を阻害する要因は全てパスしておくこと。

その他

Chromeブラウザがインストールされていること。

Laravelプロジェクト側

DuskTestCase.phpを編集
optionsのheadless設定はコメントアウトします。
10.0.2.2:9515がホストOSのIP:ポートです。

tests/DuskTestCase.php
protected function driver()
{
    $options = (new ChromeOptions)->addArguments([
        // '--disable-gpu',
        // '--headless'
    ]);

    return RemoteWebDriver::create(
        'http://10.0.2.2:9515', DesiredCapabilities::chrome()->setCapability(
            ChromeOptions::CAPABILITY, $options
        )
    );
}

duskテスト実行

いつもどおりduskコマンドでテストを実行します。
ホストOS側のブラウザが起動して自動操作が始まります。
php artisan dusk test/Browser/HogeTest.php