はじめに
Laravel/Duskを使い始めて標準で用意されていないケースが2つほどありました。
その対策を紹介したいと思います。
1.CSSの情報を取得
ElementResolverとWebDriverのメソッドを活用します。
testExample1.php
public function testExample1()
{
$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
public function testExample2()
{
$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のソース
まとめ
標準に無いとしても諦めなければなんとかなりますね!