はじめに
Laravelのduskを使ってブラウザの自動操作で試験を実施します。
で、画面外にある要素をクリックしようとしてもLaravel5の頃は、エラーとなっていました。(たしか…多分…そうだったはず…^^;)
エラーの発生!
Laravel5の名残で、クリックする前に移動させなきゃ!と思って、こんなテストコードを書いたわけです。
$browser->value('input[name=text1]', 'テキスト1')
->value('input[name=text2]', 'テキスト2')
->scrollIntoView('button[name=action]')
->click('button[name=action]');
実行するとタイトルの通りエラーが出る。
Time: 24.08 seconds, Memory: 20.00 MB
There was 1 error:
1) Tests\Browser\UserTest::testExample
BadMethodCallException: Call to undefined method [scrollIntoView].
/Users/nyan/workspace/nyan/vendor/laravel/dusk/src/Browser.php:597
/Users/nyan/workspace/nyan/tests/Browser/UserTest.php:269
/Users/nyan/workspace/nyan/tests/Browser/UserTest.php:53
/Users/nyan/workspace/nyan/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:68
/Users/nyan/workspace/nyan/tests/Browser/UserTest.php:93
エラーを調査!
エラー内容で検索してみるものの、う〜ん解決方法の記事がない…
scrollIntoViewメソッドについては、
ブラウザの表示可能領域の外にあるため、ある要素をクリックできなことも起き得ます。scrollIntoViewメソッドは指定したセレクタの要素がビューの中に入るまで、ブラウザウィンドウをスクロールします。
https://readouble.com/laravel/7.x/ja/dusk.html
と使えるらしいのだが…
解決方法その1
jQueryでスクロールさせてみたら良いんじゃね?ということでやってみる。
$browser->value('input[name=text1]', 'テキスト1')
->value('input[name=text2]', 'テキスト2')
//->scrollIntoView('button[name=action]') // ここをコメントアウト
->script("$('html, body').animate({ scrollTop: $(button[name=action]).offset().top }, 0);"); // ここを追加
->click('button[name=action]');
はい。無事に動きました!(≧∇≦)/
解決方法その2
Laravel7.xになったら、click時にスクロールしなくて良いのかもしれない(゜゜)
$browser->value('input[name=text1]', 'テキスト1')
->value('input[name=text2]', 'テキスト2')
//->scrollIntoView('button[name=action]') // ここをコメントアウト
->click('button[name=action]');
うごくやないかーーーい!www
まとめ
scrollIntoViewメソッドが使えないのはどうかと思うが、まぁ解決!!!www
コメント