ブラウザテストの夕暮れ
- 別のブラウザを使用する
- #はじめに
- #ChromeDriver を手動で実行する
- テキストの取得
- 属性の取得
- フォームの使用
- 値を入力
- 添付ファイル
- キーボードを使用
- マウスを使用します
- JavaScript ダイアログ
- セレクター スコープ
- 待機要素
- Waiting
- セレクターを待機中
- ##セレクターが使用可能なときにスコープを制限する #テキストを待っています
- #リンクを待っています
- #ページ ジャンプを待っています
- ページのリロードを待機しています
- JavaScript 式を待機しています
- Vue 式を待機しています
- コールバックを待ちます
- Vue アサーションを作成
- assertTitle
- ##assertTitleContains
- assertUrlIs
- assertSchemeIs
- assertSchemeIsNot
- assertHostIs ##assertHostIsNot
- assertPortIs
- assertPortIsNot
- assertPathBeginsWith
- ##assertPathIs
- assertPathIsNot
- assertRouteIs
- #assertQueryStringHas
- assertQueryStringMissing
- #assertFragmentIs
- assertFragmentBeginsWith
- assertFragmentIsNot
- assertHasCookie
- assertCookieMissing
- #assertCookieValue #assertPlainCookieValue
- #assertSee
- assertDontSee
- assertSeeIn
- assertDontSeeIn
- assertSourceHas
- assertSourceMissing
- #assertSeeLink
- assertDontSeeLink
- assertInputValue
- assertInputValueIsNot
- assertChecked
- assertNotChecked
- assertRadioSelected
- assertRadioNotSelected
- assertSelected
- assertNotSelected
- assertSelectHasOptions
- assertSelectMissingOptions
- #assertSelectHasOption #assertValue
- assertVisible
- assertPresent
- assertMissing
- assertDialogOpened
- assertEnabled
- assertDisabled
- assertFocused
- assertNotFocused
- assertVue
- #assertVueIsNot
- assertVueContains
- assertVueDoesNotContains
- 页面
- 設定ページ
- ページに移動します
- セレクターの短縮表記
- ##ページメソッド
- コンポーネント 継続的インテグレーション
ブラウザテスト (Laravel Dusk)
- はじめに
- インストール
- #使用を開始する
- Dusk Selector
- #リンクをクリックしてください
- テキスト、値、属性
- フォームを使用してください
- ファイルの追加
- キーボードの使用
- マウスの使用 #スコープの選択
- 要素を待機中
- Vue コンポーネント アサーション
- 利用可能なアサーション
- ページ
ページの作成 - ページの設定
- に移動します。ページ
- 略語セレクター
- ページ メソッド
- コンポーネント
- コンポーネントの作成
- ##Heraku CI
- Travis CI
- #はじめに
- Laravel Dusk は表現力豊かでシンプルかつ簡単な機能を提供します-ブラウザの自動化とテスト API を使用します。デフォルトでは、Dusk はマシンに JDK または Selenium をインストールする必要はありません。代わりに、インストールには別の ChromeDriver を使用する必要があります。もちろん、他の Selenium 互換ドライバーを自由に使用することもできます。
インストール
まず laravel/dusk
依存関係を Composer に追加する必要があります:
composer require --dev laravel/dusk
{note} Dusk サービスを手動で登録する場合 それ以外の場合は、 not 実稼働環境に登録する必要があります。これにより、一部の手に負えないユーザーがアプリケーションを制御する権限を取得する可能性があります。
Dusk パッケージをインストールした後、dusk:install
コマンドを実行します。
php artisan dusk:install
Browser
ディレクトリは にあります。 testing
ディレクトリが作成され、テスト ケースが含まれます。次に、.env
ファイルに APP_URL
変数を設定します。この値は、ブラウザでアプリを開く URL と一致する必要があります。
テストを実行するには、dusk
コマンドを使用します。 dusk
コマンドは、phpunit
コマンドと同じパラメータを使用できます。
php artisan dusk
前回 dusk
コマンドを実行したときにテストが失敗した場合dusk:fails
コマンドを使用して、失敗したテストを再実行して時間を節約できます:
php artisan dusk:fails
{注} Dusk では、ChromeDriver バイナリが実行可能である必要があります。 Dusk の実行中に問題が発生した場合は、コマンド
chmod -R 0755 Vendor/laravel/dusk/bin
を使用して、バイナリが実行可能であることを確認できます。
別のブラウザを使用する
デフォルトでは、Dusk は Google Chrome ブラウザを使用し、別のブラウザをインストールします。 ChromeDriver を使用してブラウザのテストを実行します。もちろん、独自の Selenium サービスを実行し、任意のブラウザを使用してテストすることができます。
これを行う場合は、tests/DuskTestCase.php
ファイルを開きます。これは、アプリケーション テスト ケースの基本クラスです。このファイルでは、startChromeDriver
メソッドの呼び出しを削除できます。この方法では、Dusk は ChromeDriver を自動的に起動しません。
/** * 准备执行 Dusk 测试。 * * @beforeClass * @return void */ public static function prepare(){ // static::startChromeDriver(); }
その後、driver
メソッドを変更して、選択した URL とポートに接続できます。さらに、WebDriver に渡される「必要な機能」 (必要な機能) を変更できます。
テストの作成
Dusk テストを作成するには、dusk:make を使用します。指示。作成されたテストは、
tests/Browser/** * 创建 RemoteWebDriver 实例。 * * @return \Facebook\WebDriver\Remote\RemoteWebDriver */ protected function driver(){ return RemoteWebDriver::create( 'http://localhost:4444/wd/hub', DesiredCapabilities::phantomjs() ); }
前回 テストを実行する
dusk
コマンドを使用してブラウザ テストを実行します。 php artisan dusk:make LoginTest
dusk# を実行したときにテストが失敗した場合は、 ## コマンドでは、
dusk:fails コマンドを使用して失敗したテストを再実行することで時間を節約できます:
php artisan dusk
dusk このコマンドは、PHPUnit を適切に実行できるようにする任意のパラメーターを受け入れます。たとえば、指定した
group でテストを実行できるようにします。
php artisan dusk:failsChromeDriver を手動で実行するデフォルトでは、Dusk は ChromeDriver を実行しようとします。自動的に 。特定のシステムで動作しない場合は、
dusk コマンドを実行する前に ChromeDriver を手動で実行できます。 ChromeDriver を手動で実行することを選択した場合は、
tests/DuskTestCase.php ファイル内の次の行をコメント アウトする必要があります:
php artisan dusk --group=fooさらに、ChromeDriver が 以外のポートで実行されている場合は、 9515、同じクラスの
driver メソッドを変更する必要があります:
/** * 为 Dusk 测试做准备。 * * @beforeClass * @return void */ public static function prepare(){ // static::startChromeDriver(); }
Dusk が独自の環境ファイルを使用してテストを実行するには、プロジェクトのルート ディレクトリに
.env.dusk.{environment} ファイルを作成する必要があります。簡単に言えば、local
環境を使用して dusk
コマンドを実行する場合は、.env.dusk.local
ファイルを作成する必要があります。 テストを実行すると、Dusk は
ファイルをバックアップし、Dusk 環境ファイルの名前を .env
に変更します。テストが完了すると、.env
ファイルが復元されます。
最初にテスト ケースを作成します。この例では、ログインできるかどうかを確認できます。システム。テストサンプルを生成した後、それを修正してログインインターフェースにジャンプするようにし、ログイン情報を入力した後、「ログイン」ボタンをクリックします。
browse メソッドを通じてブラウザ インスタンスを作成します。
上記の例では、/**
* 创建 RemoteWebDriver 实例。
*
* @return \Facebook\WebDriver\Remote\RemoteWebDriver
*/
protected function driver(){
return RemoteWebDriver::create(
'http://localhost:9515', DesiredCapabilities::chrome()
);
}
メソッドはコールバック パラメーターを受け取ります。 Dusk はこのブラウザ インスタンスをコールバック プロセスに自動的に挿入し、このブラウザ インスタンスはアプリケーションと対話してアサートできます。
make:authコマンドによって生成されたログイン インターフェイスをテストするために使用できます。
正しくテストするために複数のブラウザが必要になる場合があります。たとえば、複数のブラウザを使用して、WebSocket 経由で通信するオンライン チャット ページをテストします。複数のブラウザを作成する場合は、
browse メソッドのコールバックで名前を使用してブラウザ インスタンスを区別し、それをコールバックに渡して複数のブラウザ インスタンスに「適用」する必要があります。ああああ
ブラウザ ウィンドウ サイズを変更する
resize
メソッドを使用してブラウザ ウィンドウ サイズを調整できます。
<?php namespace Tests\Browser; use App\User;use Tests\DuskTestCase; use Laravel\Dusk\Chrome; use Illuminate\Foundation\Testing\DatabaseMigrations; class ExampleTest extends DuskTestCase{ use DatabaseMigrations; /** * 一个基本的浏览器测试例子。 * * @return void */ public function testBasicExample() { $user = factory(User::class)->create([ 'email' => 'taylor@laravel.com', ]); $this->browse(function ($browser) use ($user) { $browser->visit('/login') ->type('email', $user->email) ->type('password', 'secret') ->press('Login') ->assertPathIs('/home'); }); } }
maximize
メソッドは最大化できます。ブラウザ ウィンドウ:
$this->browse(function ($first, $second) { $first->loginAs(User::find(1)) ->visit('/home') ->waitForText('Message'); $second->loginAs(User::find(2)) ->visit('/home') ->waitForText('Message') ->type('message', 'Hey Taylor') ->press('Send'); $first->waitForText('Hey Taylor') ->assertSee('Jeffrey Way'); });
ブラウザ マクロ
定義したい場合は、さまざまなテストで使用できます。 Browser
クラスで再利用されるカスタム ブラウザ メソッドの場合は、macro
メソッドを使用できます。通常、サービス プロバイダーの boot
メソッドから呼び出す必要があります。
$browser->resize(1920, 1080);
macro
このメソッドは最初のパラメータとして名前を受け取り、2 番目のパラメータはクロージャです。 。ブラウザ マクロが Browser
の実装のメソッドとして呼び出されると、ブラウザ マクロのクロージャが実行されます:
$browser->maximize();
loginAs メソッドを使用すると、テストごとにログイン ページに 1 回ログインする必要がなくなります。
loginAs ユーザー ID またはユーザー モデル インスタンスを使用できます:
<?php namespace App\Providers; use Laravel\Dusk\Browser; use Illuminate\Support\ServiceProvider; class DuskServiceProvider extends ServiceProvider{ /** * 注册Dusk的浏览器宏 * * @return void */ public function boot() { Browser::macro('scrollToElement', function ($element = null) { $this->script("$('html, body').animate({ scrollTop: $('$element').offset().top }, 0);"); return $this; }); } }
{note}loginAs
メソッドを使用した後、ユーザーのセッションは使用済みの間保持されます。他のテストケースによる。
上記の認証例と同様に、テスト ケースを移行する必要がある場合
RefreshDatabase 特性を使用しないでください。 RefreshDatabase
特性は、HTTP リクエストに適用できないデータベース トランザクションを使用します。代わりに、DatabaseMigrations
トレイトを使用します: $this->browse(function ($browser) use ($user) {
$browser->visit('/pay')
->scrollToElement('#credit-card-details')
->assertSee('Enter Credit Card Details');
});
要素の相互作用に適した CSS セレクターを選択することは、Dash テストを作成する際に最も難しい部分の 1 つです。時間の経過とともに、フロントエンドへの変更により、次のような CSS セレクターがテストを中断する可能性があります。
$this->browse(function ($first, $second) { $first->loginAs(User::find(1)) ->visit('/home'); });
Dusk セレクターを使用すると、CSS セレクターを覚える代わりに効果的なテストを書くことに集中できます。セレクターを定義するには、HTML 要素に
dusk 属性を追加するだけです。次に、セレクターの前に # を追加して、Dusk テストの追加要素を操作します。
<?php
namespace Tests\Browser;
use App\User;
use Tests\DuskTestCase;
use Laravel\Dusk\Chrome;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends DuskTestCase{
use DatabaseMigrations;
}
リンクをクリックするには、ブラウザ インスタンスで
clickLink メソッドを使用します。 clickLink
メソッドは、表示されたテキストを指定するリンクをクリックします。 // HTML...
<button>Login</button>
// Test...
$browser->click('.login-page .container div > button');
テキスト、値、プロパティ
値の取得と設定
Dusk には、現在表示されているテキスト、値、プロパティを操作するためのメソッドがいくつか用意されています。たとえば、指定されたセレクターに一致する要素の「値」を取得するには、value
メソッドを使用します。
// HTML... <button dusk="login-button">Login</button> // Test... $browser->click('@login-button');
Retrieve text
text
このメソッドは、指定されたセレクター内の要素の表示テキストと一致させるために使用できます。
$browser->clickLink($linkText);
属性の取得
最後に、attribute
このメソッドは、指定されたセレクター内の要素の属性を照合するために使用できます。
// 检索值... $value = $browser->value('selector'); // 设置值... $browser->value('selector', 'value');
フォームの使用法
入力値
Dusk は、フォーム要素と入力要素を操作するためのさまざまなメソッドを提供します。まず、入力ボックスにテキストを入力する例を見てみましょう。
$text = $browser->text('selector');
type
メソッドはパラメータとして CSS セレクターを渡すことができますが、これは必須ではないことに注意してください。 CSS セレクターが指定されていない場合、Dusk は同じ name
属性を持つ入力を検索します。それでも見つからない場合、Dusk は渡された name
属性と同じ値を持つ textarea
を見つけようとします。
内容をクリアせずにフィールドにテキストを追加するには、append
メソッドを使用できます。
$attribute = $browser->attribute('selector', 'value');
clear
メソッドを使用してクリアできます。入力値:
$browser->type('email', 'taylor@laravel.com');
ドロップダウン メニュー
ドロップダウン メニューで値を選択する必要があります。select
を使用できます。方法。 type
メソッドと同様に、select
メソッドでは、必ずしも CSS セレクターを渡す必要はありません。 select
メソッドを使用する場合は、表示テキストではなくオプションの実際の値を渡す必要があります:
$browser->type('tags', 'foo') ->append('tags', ', bar, baz');
2 番目の引数を省略してオプションをランダムに選択することもできます:
$browser->clear('email');
チェックボックス
「チェック」チェックボックスを使用する場合は、check
メソッドを使用できます。他の多くの入力関連メソッドと同様に、CSS セレクターを渡す必要はありません。正確なセレクターが見つからない場合、Dusk は name
属性に一致するチェックボックスを検索します。
$browser->select('size', 'Large');
Radio Button
## 「選択」のラジオボタンオプションでは、radio メソッドを使用できます。他の多くの入力関連メソッドと同様に、CSS セレクターを渡す必要はありません。正確なセレクターが見つからない場合、Dusk は
name 属性または
value 属性に一致するラジオ ボタンを検索します:
$browser->select('size');
Attachment
attach
メソッドは、file
入力要素にファイルを添付できます。他の多くの入力関連メソッドと同様に、CSS セレクターを渡す必要はありません。正確なセレクターが見つからない場合、Dusk は name
属性に一致するファイル入力ボックスを検索します:
$browser->check('terms');$browser->uncheck('terms');
#keyboard{注} アタッチ メソッドには PHP
Zip が必要です。
拡張機能を使用するには、サーバーにこの拡張機能がインストールされている必要があります。
keys メソッドを使用すると、要素を指定できます。
type メソッドよりも複雑な入力シーケンス。たとえば、値を入力中にキーを押すことができます。この例では、
taylor と入力するときに、
shift キーも押されます。
taylor が入力し終わると、キーを押さずに
otwell が入力されます:
$browser->radio('version', 'php7');アプリ内の要素を選択することもできます。「ショートカット キー」を押します。
$browser->attach('photo', __DIR__.'/photos/me.png');
{ヒント}#マウスを使用します{}
にパッケージ化されたすべてのキーボード キーは、## にある
Facebook\WebDriver\WebDriverKeysクラスで対応して定義されています。 #GitHub
。
#要素をクリックします
clickメソッドは、指定されたセレクターに一致する要素を「クリック」するために使用できます:
$browser->keys('selector', ['{shift}', 'taylor'], 'otwell');
Mouseover
メソッドは、指定されたセレクターに一致する要素のマウスオーバー アクションに使用できます:
$browser->keys('.app', ['{command}', 'j']);
ドラッグ アンド ドロップ
メソッドが使用されます指定したセレクターに一致する要素を他の要素にドラッグします:
$browser->click('.selector');
または、要素を単一方向にドラッグすることもできます: $browser->mouseover('.selector');
$browser->drag('.from-selector', '.to-selector');
[OK] ボタンをクリックして、開いている JavaScript ダイアログ ボックスを閉じます:
$browser->dragLeft('.selector', 10); $browser->dragRight('.selector', 10); $browser->dragUp('.selector', 10); $browser->dragDown('.selector', 10);
[キャンセル] ボタンをクリックして、開いている JavaScript ダイアログを閉じます (確認ダイアログでのみ有効):
// 等待对话框显示: $browser->waitForDialog($seconds = null); // 断言对话框已经显示,并且其消息与给定值匹配: $browser->assertDialogOpened('value'); // 在打开的 JavaScript 提示对话框中输入给定值: $browser->typeInDialog('Hello World');
メソッドを使用して実現できます。コールバック関数内で実行されるすべての操作は、元のセレクターに制限されます:
$browser->acceptDialog();
JavaScript を広範囲に使用するアプリケーションをテストする場合、多くの場合、テスト前に指定された要素またはデータが使用可能になるまで「待機」する必要があります。夕暮れが楽になります。一連のメソッドを使用すると、ページ要素が使用可能になるまで、または指定された JavaScript 式が 指定したミリ秒間一時停止をテストする必要がある場合は、 また、指定したセレクターがページから消えるまで待つこともできます: セレクターを待ってから操作したい場合があります。たとえば、モーダル ウィンドウが使用可能になるまで待ってから、モーダル ウィンドウの [OK] ボタンをクリックするとよいでしょう。この状況では、 また、指定されたルートがジャンプするのを待つこともできます: ページのリロード後にアサートしたい場合は、 指定された JavaScript 式が を待ちます。以下のメソッドを使用できます。指定された Vue コンポーネント プロパティに指定された値が含まれるか含まれないかを待機するために使用されます: Dusk の「待機」メソッドの多くは、基礎となる Vue コンポーネント データの状態に関するアサーションを作成することもできます。たとえば、アプリケーションに次の Vue コンポーネントが含まれているとします。 要素の待機
true
と評価されるまで待つことができます。 Wait
pause
メソッドを使用できます: $browser->dismissDialog();
Wait for Selector
waitFor
メソッドを使用すると、指定された CSS セレクターに一致するページ上の要素が表示されるまでテストの実行を一時停止できます。デフォルトでは、5 秒を超える一時停止の後に例外がスローされます。必要に応じて、2 番目のパラメータとしてカスタム タイムアウトを渡すことができます: $browser->with('.table', function ($table) {
$table->assertSee('Hello World')
->clickLink('Delete');
});
$browser->pause(1000);
セレクタータイムスコープが利用可能です。
whenAvailable
メソッドを使用できます。指定されたコールバック内で実行されるすべての要素操作は、開始セレクターに制限されます。 // 等待选择器 5 秒时间...
$browser->waitFor('.selector');
// 等待选择器 1 秒时间...
$browser->waitFor('.selector', 1);
wait for text
waitForText
このメソッドは次のことができます。ページ上の指定されたテキストが表示されるのを待つために使用されます: $browser->waitUntilMissing('.selector');
$browser->waitUntilMissing('.selector', 1);
Waiting for the link
waitForLink
このメソッドは次の目的で使用されます。指定されたリンク テキストが表示されるまで待ちます。ページが表示されます: $browser->whenAvailable('.modal', function ($modal) {
$modal->assertSee('Hello World')
->press('OK');
});
ページがジャンプするのを待ちます
$browser のようなパスを指定した後、 ->assertPathIs('/home')
アサーション時に、window.location.pathname
が非同期で更新されると、アサーションは失敗します。 waitForLocation
メソッドを使用して、ページが指定されたパスにジャンプするのを待つことができます: // 等待指定文本 5 秒时间...
$browser->waitForText('Hello World');
// 等待指定文本 1 秒时间...
$browser->waitForText('Hello World', 1);
// 等待指定链接 5 秒时间...
$browser->waitForLink('Create');
// 等待给定链接 2 秒时间...
$browser->waitForLink('Create', 1);
ページのリロードを待つ
waitForReload
メソッドを使用できます: $browser->waitForLocation('/secret');
JavaScript 式を待つ
true
と評価されるまでテストの実行を一時停止したい場合があります。これは、waitUntil
メソッドを使用して簡単に実行できます。 return
キーワードや終了セミコロンを含めずに式をこのメソッドに渡します。 $browser->waitForRoute($routeName, $parameters);
Vue 式
$browser->click('.some-action')
->waitForReload()
->assertSee('something');
コールバックの待機
waitUsing
メソッドに依存しています。このメソッドを直接使用して、特定のコールバックが true
を返すのを待つことができます。 waitUsing
このメソッドは、待機する最大秒数、クロージャの実行間隔、実行中のクロージャ、および信頼性の高い失敗メッセージを受け入れます: //等待表达式为 true 5 秒时间...
$browser->waitUntil('App.dataLoaded');
$browser->waitUntil('App.data.servers.length > 0');
// 等待表达式为 true 1 秒时间...
$browser->waitUntil('App.data.servers.length > 0', 1);
#Vue アサーションの作成Dusk では、// 等待组件属性包含给定值...
$browser->waitUntilVue('user.name', 'Taylor', '@user');
// 等待组件属性不包含给定值...
$browser->waitUntilVueIsNot('user.name', null, '@user');
$browser->waitUsing(10, 1, function () use ($something) { return $something->isReady(); },"Something wasn't ready in time.");
利用可能なアサーション
Dusk は、利用可能な一連のアサーション メソッドを提供します。すべてのアサーションは次のとおりです:
assertTitle
assertTitleContains
assertUrlIs
assertSchemeIs
assertSchemeIsNot
assertHostIs
assertHostIsNot
assertPortIs
assertPortIsNot
assertPathBeginsWith
assertPathIs
assertPathIsNot
assertRouteIs
assertQueryStringHas
assertQueryStringMissing
assertFragmentIs
assertFragmentBeginsWith
assertFragmentIsNot
assertHasCookie
assertCookieMissing
assertCookieValue
assertPlainCookieValue
assertSee
assertDontSee
assertSeeIn
assertDontSeeIn
assertSourceHas
assertSourceMissing
assertSeeLink
assertDontSeeLink
assertInputValue
assertInputValueIsNot
assertChecked
assertNotChecked
assertRadioSelected
assertRadioNotSelected
assertSelected
assertNotSelected
assertSelectHasOptions
assertSelectMissingOptions
assertSelectHasOption
assertValue
assertVisible
assertPresent
assertMissing
assertDialogOpened
assertEnabled
assertDisabled
assertFocused
assertNotFocused
assertVue
assertVueIsNot
assertVueContains
assertVueDoesNotContain
ページ タイトルが指定されたテキストと一致することをアサートします。
// HTML... <profile dusk="profile-component"></profile> // 定义组件... Vue.component('profile', { template: '<div>{{ user.name }}</div>', data: function () { return { user: { name: 'Taylor' } }; } });#ページ タイトルに指定されたテキストが含まれていることをアサートします:
/** * 一个简单的 Vue 测试例子。 * * @return void */ public function testVue(){ $this->browse(function (Browser $browser) { $browser->visit('/') ->assertVue('user.name', 'Taylor', '@profile-component'); }); }
##assertUrlIs現在の URL (クエリ文字列なし) が指定された文字列と一致することをアサートします:
$browser->assertTitle($title);##assertSchemeIs
現在の URL が指定された文字列と一致することをアサートします:
$browser->assertTitleContains($title);assertSchemeIsNot
現在の URL 一致が指定された文字列と一致しないことをアサートします:
$browser->assertUrlIs($url);
# # assertHostIs
現在の URL のホストが指定された値と一致することをアサートします: $browser->assertSchemeIs($scheme);
$browser->assertSchemeIsNot($scheme);
##assertPortIs
現在の URL をアサートしますURL ポート値は指定された値と一致します:
$browser->assertHostIs($host);assertPortIsNot現在の URL のポート値であることをアサートします。指定された値と一致します 指定された値は一致しません:
$browser->assertHostIsNot($host);assertPathBeginsWith現在の URL が次で始まることをアサートします。指定されたパス:
$browser->assertPortIs($port);
現在のパスが指定されたパスと一致することをアサートします:
$browser->assertPortIsNot($port);
現在のパスが指定されたパスと一致しないことをアサートします:
$browser->assertPathBeginsWith($path);#assertRouteIs現在の URL が指定された名前付きルートの URL と一致することをアサートします:
$browser->assertPathIs('/home');
$browser->assertPathIsNot('/home');
指定されたクエリ文字列パラメータが存在し、パラメータの値が指定された値であることをアサートします。 :
$browser->assertRouteIs($name, $parameters);
指定されたクエリ文字列パラメーターが存在しないことをアサートします:
$browser->assertQueryStringHas($name);## ################
assertFragmentIs
現在のフラグメントが指定されたフラグメントに準拠していることをアサートします:
$browser->assertQueryStringHas($name, $value);
assertFragmentBeginsWith
現在のフラグメントが指定されたフラグメントで始まることをアサートします:
$browser->assertQueryStringMissing($name);#assertFragmentIsNot現在のフラグメントのシャーディングであることをアサートします。指定されたシャーディングと一致しません:
$browser->assertFragmentIs('anchor');
指定された Cookie が存在することをアサートします:
$browser->assertFragmentBeginsWith('anchor');##assertCookieMissing指定された Cookie が存在しないことをアサートします:
$browser->assertFragmentIsNot('anchor');
assertCookieValue指定された値で Cookie が存在することをアサートします: $browser->assertHasCookie($name);
##assertPlainCookieValue指定された値を持つ暗号化されていない Cookie が存在することをアサートします: $browser->assertCookieMissing($name);
assertSeeAssert 指定されたテキストが現在のページに存在することを確認します: $browser->assertCookieValue($name, $value);
assertDontSee指定されたテキストが存在することを確認します現在のページに存在しません: $browser->assertPlainCookieValue($name, $value);
指定されたテキストがセレクター範囲内に存在することをアサートします: $browser->assertSee($text);
指定されたテキストがセレクター範囲内に存在しないことをアサートします:
$browser->assertDontSee($text);
#assertSourceHas指定されたソース コードが現在のページに存在することをアサートします:
$browser->assertSeeIn($selector, $text);#assertSourceMissing
指定されたソース コードが現在のページに存在しないことをアサートします:
$browser->assertDontSeeIn($selector, $text);assertSeeLink
現在のページが存在することをアサートします指定されたリンク:
$browser->assertSourceHas($code);assertDontSeeLink
指定されたリンクが現在のページに存在しないことをアサートします:
$browser->assertSourceMissing($code);
##assertInputValue
指定された値が入力ボックスに存在することをアサートします: $browser->assertSeeLink($linkText);
assertInputValueIsNot
指定された値が存在しないことをアサートします。入力ボックスに存在する: $browser->assertDontSeeLink($linkText);
assertChecked
指定されたチェックボックスがチェックされていることをアサートします: $browser->assertInputValue($field, $value);
assertNotChecked
指定されたチェックボックスがチェックされていないことをアサートします:
$browser->assertInputValueIsNot($field, $value);##assertRadioSelected指定されたラジオ ボタンが選択されていることをアサートします:
$browser->assertChecked($field);
指定されたラジオ ボタンが選択されていないことをアサートします:
$browser->assertNotChecked($field);assertSelected指定された値でドロップダウン ボックスが選択されていることをアサートします:
$browser->assertRadioSelected($field, $value);
assertNotSelectedドロップダウン ボックスで指定された値が選択されていないことをアサートします: $browser->assertRadioNotSelected($field, $value);
assertSelectHasOptions指定された配列の値にオプションをアサートします: $browser->assertSelected($field, $value);
# #assertSelectMissingOptions選択した値が指定された配列内の値ではないことをアサートします: $browser->assertNotSelected($field, $value);
assertSelectHasOption指定された値がオプションであることをアサートします: $browser->assertSelectHasOptions($field, $values);
assertValue指定された要素がセレクター範囲内に存在することをアサートします。 値: $browser->assertSelectMissingOptions($field, $values);
$browser->assertSelectHasOption($field, $value);
$browser->assertValue($selector, $value);
$browser->assertVisible($selector);
$browser->assertPresent($selector);指定されたフィールドが有効であることをアサートします:
$browser->assertMissing($selector);
##assertDisabled指定されたフィールド フィールドが無効であることをアサートします:
$browser->assertDialogOpened($message);
assertFocusedフォーカスが指定されたフィールドにあることをアサートします:
$browser->assertEnabled($field);##assertNotFocused
フォーカスが指定されたフィールドにないことをアサートします:
$browser->assertDisabled($field);
assertVue
Vue コンポーネント データのプロパティが指定された値と一致することをアサートします:
$browser->assertFocused($field);
assertVueIsNot
Vue コンポーネント データのプロパティが指定された値と一致しないことをアサートします:
$browser->assertNotFocused($field);# assertVueContainsVue コンポーネント データのプロパティが配列であり、その配列に指定された値が含まれていることをアサートします:
$browser->assertVue($property, $value, $componentSelector = null);
$browser->assertVueIsNot($property, $value, $componentSelector = null);
場合によっては、複雑な一連のアクションをテストする必要があるため、テスト コードが読みにくく、理解しにくくなることがあります。セマンティック アクションはページを通じて定義でき、指定されたページで 1 つのメソッドを使用できます。ページでは、アプリケーションまたは個々のページに共通のセレクターへのショートカットを定義することもできます。
Artisan コマンドはページ オブジェクトを生成できます。すべてのページ オブジェクトは、tests/Browser/Pages
ディレクトリにあります: $browser->assertVueContains($property, $value, $componentSelector = null);
このページには、デフォルトで
url、assert
、elements
という 3 つのメソッドがあります。ここでは、まず url
メソッドと assert
メソッドについて詳しく説明します。elements
メソッドについては、Selector の略語
で詳しく説明します。
メソッド
url メソッドは、ページの URL を表すパスを返す必要があります。 Dusk はブラウザでこの URL を使用して特定のページに移動します: $browser->assertVueDoesNotContain($property, $value, $componentSelector = null);
assert
メソッドは次のことができます。ブラウザが指定されたページにいることを確認するためのアサーションを実行します。この方法は必須ではありません。これらのアサーションは、自分のニーズに基づいて行うことができます。これらのアサーションは、このページに移動すると自動的に実行されます:php artisan dusk:page Login
ページに移動ページに移動すると設定後、visit
メソッドを使用してページに移動できます:/** * 获得页面 URL 路径。 * * @return string */ public function url(){ return '/login'; }
場合によっては、すでに指定されたページにいて、必要なのはセレクターを「ロード」することだけである場合があります。現在のページとメソッドを現在のテストに追加します。一般的な例としては、ボタンを押すと、指定されたページに直接移動するのではなく、指定されたページにリダイレクトされます。この場合、
on メソッドを使用してページを読み込む必要があります: /** * 断言浏览器当前处于指定页面。 * * @return void */ public function assert(Browser $browser){ $browser->assertPathIs($this->url()); }
Selector Shorthand
elements
メソッドを使用すると、ページ内の CSS セレクターのシンプルで覚えやすい省略表現を定義できます。たとえば、アプリのログイン ページの email
入力フィールドの省略形を定義してみましょう:
use Tests\Browser\Pages\Login;$browser->visit(new Login);
これで、以前にページで使用した完全な CSS セレクターの代わりに、この省略形を使用できるようになります。
use Tests\Browser\Pages\CreatePlaylist;$browser->visit('/dashboard') ->clickLink('Create Playlist') ->on(new CreatePlaylist) ->assertSee('@create');
グローバル セレクターの略称
Dusk をインストールすると、Page
基本クラスが tests/Browser/Pages## に保存されます。 # 目次。このクラスには、グローバル セレクターの略語を定義するために使用できる
siteElements メソッドが含まれており、アプリケーションの各ページで次のグローバル セレクターの略語を使用できるようになります。
/**
* 获取页面的元素简写。
*
* @return array
*/
public function elements(){
return [
'@email' => 'input[name=email]',
];
}
メソッドを定義した後、ページを使用する任意のテストでこのメソッドを使用できます。ブラウザ インスタンスは自動的にページ メソッドを渡します: $browser->type('@email', 'taylor@laravel.com');
##コンポーネントコンポーネントは Dusk の「ページ オブジェクト」に似ています。 」とありますが、これは、ナビゲーション バーや情報通知ポップアップ ウィンドウなど、アプリケーション全体で頻繁に再利用される UI および機能フラグメントのほうです。したがって、コンポーネントは明示的な URL にバインドされません。
#コンポーネントの生成コンポーネントを生成するには、Artisan コマンド dusk:component## を使用します。 # コンポーネントを生成することができます。新しく生成されたコンポーネントは、
test/Browser/Components/** * 获取站点全局的选择器简写。 * * @return array */ public static function siteElements(){ return [ '@element' => '#selector', ]; }
上に示すように、これは「日付ピッカー」コンポーネントを生成する例です。このコンポーネントは次のようになります。アプリケーションの多くのページ全体で使用されます。テスト スイート全体の多数のテスト ページにわたる日付選択のためのブラウザー自動化ロジックを手動で記述するのは面倒です。より便利な代替方法は、日付ピッカーを表す Dusk コンポーネントを定義し、そのコンポーネントに自動化ロジックをカプセル化することです。 #コンポーネントの使用
コンポーネントの定義が完了すると、テスト ページの日付ピッカーで日付を簡単に選択できます。また、選択した日付のロジックを変更する必要がある場合は、このコンポーネントを変更するだけです: <?php
namespace Tests\Browser\Pages;
use Laravel\Dusk\Browser;
class Dashboard extends Page{
// 其他页面方法...
/**
* 创建一个新的播放列表。
*
* @param \Laravel\Dusk\Browser $browser
* @param string $name
* @return void
*/
public function createPlaylist(Browser $browser, $name)
{
$browser->type('name', $name)
->check('share')
->press('Create Playlist');
}
}
CircleCI
CircleCI を使用して Dusk テストを実行している場合は、開始点としてこの構成ファイルを参照できます。 TravisCI と同様に、php Artisanserve
コマンドを使用して、PHP の組み込み Web サーバーを起動します。
use Tests\Browser\Pages\Dashboard;$browser->visit(new Dashboard) ->createPlaylist('My Playlist') ->assertSee('My Playlist');
#Codeship
Codeship で Dusk テストを実行するには、次のコマンドを Codeship プロジェクトに追加する必要があります。もちろん、これらのコマンドは単なる例であり、必要に応じて自由に追加のコマンドを追加してください:
php artisan dusk:component DatePicker##Heraku CI
#Heraku CI
で Dusk テストを実行する場合は、次の Google Chrome ビルドパックとスクリプトを Heroku app.json ファイルに追加します: <?php
namespace Tests\Browser\Components;
use Laravel\Dusk\Browser;
use Laravel\Dusk\Component as BaseComponent;
class DatePicker extends BaseComponent{
/**
* 获取组件的 root selector
*
* @return string
*/
public function selector()
{
return '.date-picker';
}
/**
* 浏览器包含组件的断言
*
* @param Browser $browser
* @return void
*/
public function assert(Browser $browser)
{
$browser->assertVisible($this->selector());
}
/**
* 读取组件的元素快捷方式
*
* @return array
*/
public function elements()
{
return [
'@date-field' => 'input.datepicker-input',
'@month-list' => 'div > div.datepicker-months',
'@day-list' => 'div > div.datepicker-days',
];
}
/**
* 选择给定日期
*
* @param \Laravel\Dusk\Browser $browser
* @param int $month
* @param int $day
* @return void
*/
public function selectDate($browser, $month, $day)
{
$browser->click('@date-field')
->within('@month-list', function ($browser) use ($month) {
$browser->click($month);
})
->within('@day-list', function ($browser) use ($day) {
$browser->click($day);
});
}
}
#Travis CI
で Dusk テストを実行する場合、.travis.yml 構成を参照できます。 Travis CI はグラフィカル環境ではないため、Chrome ブラウザを起動するにはいくつかの追加手順を実行する必要があります。さらに、php 職人サーブ を使用して、PHP の組み込み Web サーバーを起動します。
<?php namespace Tests\Browser; use Tests\DuskTestCase; use Laravel\Dusk\Browser; use Tests\Browser\Components\DatePicker; use Illuminate\Foundation\Testing\DatabaseMigrations; class ExampleTest extends DuskTestCase{ /** * 基本的组件测试示例 * * @return void */ public function testBasicExample() { $this->browse(function (Browser $browser) { $browser->visit('/') ->within(new DatePicker, function ($browser) { $browser->selectDate(1, 2018); }) ->assertSee('January'); }); } }
.env.testing ファイルで、APP_URL## を調整します。 # 値:
この記事は、version: 2jobs:
build:
steps:
- run: sudo apt-get install -y libsqlite3-dev
- run: cp .env.testing .env
- run: composer install -n --ignore-platform-reqs
- run: npm install
- run: npm run production
- run: vendor/bin/phpunit
- run:
name: Start Chrome Driver
command: ./vendor/laravel/dusk/bin/chromedriver-linux
background: true
- run:
name: Run Laravel Server
command: php artisan serve
background: true
- run:
name: Run Laravel Dusk Tests
command: php artisan dusk
LearnKu.com
Web サイトで初めて公開されました。