はじめに
Laravel/Duskを使い始めて標準で用意されていないケースが2つほどありました。
その対策を紹介したいと思います。
1.CSSの情報を取得
ElementResolverとWebDriverのメソッドを活用します。
testExample1.php
publicfunctiontestExample1(){$this->browse(function(Browser$browser){$browser->(略);$opacity=$browser->resolver->findOrFail('div.hoge button')->getCSSValue('background');# buttonタグで指定されているStyleのbackground値を取得している$this->assertEquals($background,'rgb( 128, 128, 128 )');// 色情報はrgb関数で表記する。#は使えない});}
参考: Browser(Dusk)のソース、RemoteWebDriverElementのソース
2.target="_blank"を指定したリンク先へ移動
RemoteWebDriverの機能を使います。
testExample2.php
publicfunctiontestExample2(){$this->browse(function(Browser$browser){$browser->click('... a');// target="_blank"なリンクをクリック$current_window=$browser->driver->getWindowHandle();// 現在開いているウインドウに戻りたい時は予めハンドルを取得$target_window=collect($browser->driver->getWindowHandles())->last();// 開いたタブはウインドウリストの最後と見て取得$browser->driver->switchTo()->window($target_window);// 対象のウインドウを移動// アサーションは略$browser->driver->switchTo()->window($current_window);// 対象のウインドウを最初のものに戻す});}
参考: Duskのissue, RemoteWebDriverのソース
まとめ
標準に無いとしても諦めなければなんとかなりますね!