質問するログイン新規登録

Q&A

0回答

1930閲覧

laravelでduskを実行しても空のDOMしか取得できない

zak

総合スコア35

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2020/08/19 05:55

編集2020/08/19 09:30

0

0

前提・実現したいこと

タイトルの通り、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に戻しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問