[Laravel7.x]BadMethodCallException: Call to undefined method [scrollIntoView].

Laravel

はじめに

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

コメント

タイトルとURLをコピーしました