久しぶりにLaravelに戻ってテストを書く日々を送ってます。
そんな中で今度はheadタグ内の要素を確認するテストが必要になって調べてみました。
前提は以前書いたこの記事です。
一番初めにやったこと
$browser->dump()
ソース丸ごと取得して正規表現でチェック。
タイトルの場合
$this->assertEquals($browser->driver->getTitle(), "タイトル") ;
他の要素(例:description)
この場合はメソッドは用意されてなかったのでfindElementで探します。
$this->assertEquals($browser->driver->findElement(WebDriverBy::xpath("//meta[@name='description']"))->getAttribute('content'), "descript") ;
javascriptの読込確認
$elemntFind = false;
$elemnts = $browser->driver->findElements(WebDriverBy::xpath("//script"));
foreach ($elemnts as $elemnt) {
/** @var $elemnt RemoteWebElement */
if (strpos($elemnt->getAttribute('src'), 'jsのパスとか') !== false) {
$elemntFind = true;
break;
}
}
$this->assertTrue($elemntFind);
ソース内で直接書かれてるjavascriptの内容確認
<script type="text/javascript">
この中身を知りたい
</script>
広告とか計測とかってjsが動いてページ内にjsを埋め込むことがあるのでそれをチェックするのに使った。
$elemnts = $browser->driver->findElements(WebDriverBy::xpath("//script"));
foreach ($elemnts as $elemnt) {
/** @var $elemnt RemoteWebElement */
$this->assertNotNull($elemnt->getAttribute('innerHTML'));
}
基本は2つ目に書いたjsのチェックと同じ。
だけど中に書かれてる内容を取り出すメソッドが無くていろいろやってたらこれで出来た。
innerHTMLってメソッドだよなぁと思いつつ出来たのでいいか。