. * */ use Behat\Behat\Context\Context; class SearchContext implements Context, ActorAwareInterface { use ActorAware; /** * @return Locator */ public static function searchBoxInput() { return Locator::forThe()->css("#header .searchbox input")-> describedAs("Search box input in the header"); } /** * @return Locator */ public static function searchResults() { return Locator::forThe()->css("#searchresults")-> describedAs("Search results"); } /** * @return Locator */ public static function searchResult($number) { return Locator::forThe()->xpath("//*[contains(concat(' ', normalize-space(@class), ' '), ' result ')][$number]")-> descendantOf(self::searchResults())-> describedAs("Search result $number"); } /** * @return Locator */ public static function searchResultName($number) { return Locator::forThe()->css(".name")-> descendantOf(self::searchResult($number))-> describedAs("Name for search result $number"); } /** * @return Locator */ public static function searchResultPath($number) { // Currently search results for comments misuse the ".path" class to // dim the user name, so "div.path" needs to be used to find the proper // path element. return Locator::forThe()->css("div.path")-> descendantOf(self::searchResult($number))-> describedAs("Path for search result $number"); } /** * @return Locator */ public static function searchResultLink($number) { return Locator::forThe()->css(".link")-> descendantOf(self::searchResult($number))-> describedAs("Link for search result $number"); } /** * @When I search for :query */ public function iSearchFor($query) { $this->actor->find(self::searchBoxInput(), 10)->setValue($query . "\r"); } /** * @When I open the search result :number */ public function iOpenTheSearchResult($number) { $this->actor->find(self::searchResultLink($number), 10)->click(); } /** * @Then I see that the search result :number is :name */ public function iSeeThatTheSearchResultIs($number, $name) { PHPUnit_Framework_Assert::assertEquals( $name, $this->actor->find(self::searchResultName($number), 10)->getText()); } /** * @Then I see that the search result :number was found in :path */ public function iSeeThatTheSearchResultWasFoundIn($number, $path) { PHPUnit_Framework_Assert::assertEquals( $path, $this->actor->find(self::searchResultPath($number), 10)->getText()); } }