前提・実現したいこと
タイトルの通り、laravelでduskを実行しても空のDOMしか取得できません。
発生している問題・ソースコード
DuskTestCase.php
php
1<?php 2 3namespace Tests; 4 5use Laravel\Dusk\TestCase as BaseTestCase; 6use Facebook\WebDriver\Chrome\ChromeOptions; 7use Facebook\WebDriver\Remote\RemoteWebDriver; 8use Facebook\WebDriver\Remote\DesiredCapabilities; 9 10abstract class DuskTestCase extends BaseTestCase 11{ 12 use CreatesApplication; 13 14 /** 15 * Prepare for Dusk test execution. 16 * 17 * @beforeClass 18 * @return void 19 */ 20 public static function prepare() 21 { 22 // static::startChromeDriver(); 23 } 24 25 /** 26 * Create the RemoteWebDriver instance. 27 * 28 * @return \Facebook\WebDriver\Remote\RemoteWebDriver 29 */ 30 protected function driver() 31 { 32 $options = (new ChromeOptions)->addArguments([ 33 '--disable-gpu', 34 '--headless' 35 ]); 36 37 return RemoteWebDriver::create( 38 'http://selenium:4444/wd/hub', 39 DesiredCapabilities::chrome()->setCapability( 40 ChromeOptions::CAPABILITY, $options 41 ) 42 ); 43 } 44} 45
ExampleTest.php
→dumpでDOMを取得しています。
php
1public function testBasicExample() 2{ 3 $this->browse(function (Browser $browser) { 4 $browser->visit('/') 5 ->dump($browser); 6 }); 7}
↓実行結果
workspace
1# php artisan dusk 2PHPUnit 6.5.14 by Sebastian Bergmann and contributors. 3 4"<html><head></head><body></body></html>"
試したこと
調べたところホスト名が[192.168.99.100]のままだと動かないという情報を見つけ、
ホスト名を付けましたが、変化はありませんでした。
・Win10
hosts
1192.168.99.100 testapp
・workspace
→なぜかコンテナの再起動を行うと下記で追加した部分は削除されてしまうので、再起動する毎に書き足しています。
hosts
1127.0.0.1 testapp
env
1APP_NAME=testapp 2APP_URL=http://testapp
default.conf
conf
1server_name testapp;
次にworkspaceで[curl http://testapp]を実行したところ
curl: (7) Failed to connect to testapp port 80: Connection refused
と返ってきたため、ポート番号の問題かと思い、80→8888に変更しましたが、こちらも変化はありませんでした。
修正後はコンテナの再起動等も行いました。
・laradock配下
env
1NGINX_HOST_HTTP_PORT=8888
補足情報(FW/ツールのバージョンなど)
Win10 Home 64bit
Docker Toolbox
docker version 19.03.12
Laradock
php -v 7.3.20
Laravel Framework 5.5.49
ブラウザテストの実行はChromeドライバではなく、seleniumコンテナを使用しています。
他に必要なソースがありましたら、修正指示をいただければ追記いたします。
よろしくお願いいたします。
追記1
認識が間違っていました。
https://teratail.com/questions/156592
こちらの記事にある通り、
dockerコンテナでexposeしているポート番号とコンテナ内で立ち上がるサーバーのポート番号を同じにする必要がある。
ということなので、ポート番号を8888にする場合、サーバー側も8888にする必要がありました。
docker-compose.yml
yaml
1### NGINX Server ######################################### 2nginx: 3 build: 4 context: ./nginx 5 args: 6 ... 7 volumes: 8 ... 9 ports: 10 - "${NGINX_HOST_HTTP_PORT}:8888" # ←ここを80から8888に変更
ちなみにこの時点でdocker container lsの結果は下記になります。(長いのでポートと名前だけ)
nginxになぜ80/tcpがあるのかはよくわかってません。
terminal
1$ docker container ls 2PORTS NAMES 30.0.0.0:4444->4444/tcp laradock_selenium_1 40.0.0.0:81->81/tcp, 0.0.0.0:443->443/tcp, 80/tcp, 0.0.0.0:8888->8888/tcp laradock_nginx_1 59000/tcp laradock_php-fpm_1 60.0.0.0:8081->80/tcp laradock_phpmyadmin_1 70.0.0.0:3000-3001->3000-3001/tcp, 0.0.0.0:4200->4200/tcp, 0.0.0.0:8080->8080/tcp, 0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp laradock_workspace_1 80.0.0.0:6379->6379/tcp laradock_redis_1 90.0.0.0:3306->3306/tcp, 33060/tcp laradock_mysql_1 100.0.0.0:1025->1025/tcp, 0.0.0.0:8025->8025/tcp laradock_mailhog_1 112375-2376/tcp laradock_docker-in-docker_1
このあとcurlしましたが結果かわりませんでした。
また、なぜかブラウザで表示もできなくなりましたので、
ゲストとサーバーのポートを80に戻しました。
あなたの回答
tips
プレビュー