直接的なアサーションがなかったから作った. TestCaseでuseして使うtraitにしてみた.
たぶんMacroを用意するのが正当なアプローチだと思うんだけど, 調べるの面倒で雑に書いてしまった.
<?php namespace Tests; use Facebook\WebDriver\WebDriverBy; trait MyDuskAssertions { /** * $selector要素が$count個あるかをassertionする * * Usage: * $this->myAssertElementsCountIs($browser, 'tbody>tr', 1); */ public function myAssertElementsCountIs($browser, $selector, $count) { $elements = $browser->driver->findElements(WebDriverBy::cssSelector($selector)); $this->assertCount($count, $elements); } /** * $textsが$selector内で順番に現れるかassertionする * * Usage: * $this->myAssertSeeInOrder($browser, 'tbody td', ['No.1', 'No.2', 'No.3']); */ public function myAssertSeeInOrder($browser, $selector, $texts) { $targets = $texts; $elements = $browser->driver->findElements(WebDriverBy::cssSelector($selector)); $msg_texts = implode(',', $texts); foreach ($elements as $e) { $expect = reset($targets); if ($e->getText() == $expect || $e->getAttribute('value') == $expect) { array_shift($targets); } } $this->assertEmpty($targets, "'$msg_texts' were not see in order in '$selector'."); } }