Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to verify the selected option from the dropdown using Behat/Mink

There are couple of filters on the page and I would like to verify the default filter values. I'm not able to get the selectors working. Can someone help.

Here is the code snippet:

<div class="filter-widget">
<form name="" method="post" action="">
<div class="pure-g-r">
    <div class="pure-u-1-4">
    <div><label for="day" class="required">Day</label><select id="day" name="day">    <option value="all">all</option><option value="Sunday">Sunday</option><option value="Monday">Monday</option><option value="Tuesday">Tuesday</option><option value="Wednesday">Wednesday</option><option value="Thursday" selected="selected">Thursday</option><option value="Friday">Friday</option><option value="Saturday">Saturday</option></select></div>
</div>
<div class="pure-u-1-4">
    <div><label for="month" class="required">Month</label><select id="month" name="month"><option value="January">January</option><option value="February">February</option><option value="March">March</option><option value="April" selected="selected">April</option><option value="May">May</option><option value="June">June</option><option value="July">July</option><option value="August">August</option><option value="September">September</option><option value="October">October</option><option value="November">November</option><option value="December">December</option></select></div>
</div>
</div>

As you can see above, the filters default to the current day/month and I need to be able to verify those values. But the css selector used below is failing. Is it supported in Behat?

$page = $this->getSession()->getPage();
$defaultFilterDay = $page->find('css', '#day select option:selected')->getText();
$defaultFilterMonth = $page->find('css', '#month select option:selected')->getText();
$currentDay = new \DateTime('now')->format('l'); //This returns current Day
$currentMonth = new \DateTime('now')->format('F'); //This returns current Month

assertEquals(currentDay, $defaultFilterDay);
assertEquals(currentMonth, $defaultFilterMonth);
like image 432
vijay pujar Avatar asked Apr 03 '14 13:04

vijay pujar


1 Answers

I had the same problem, I wanted to determine the value of the selected option using the option value and the select css selector. This is what I ended up doing:

/**
 * @Then /^the option "([^"]*)" from select "([^"]*)" is selected$/
 */
public function theOptionFromSelectIsSelected($optionValue, $select)
{
    $selectField = $this->getSession()->getPage()->find('css', $select);
    if (NULL === $selectField) {
        throw new \Exception(sprintf('The select "%s" was not found in the page %s', $select, $this->getSession()->getCurrentUrl()));
    }

    $optionField = $selectField->find('xpath', "//option[@selected='selected']");
    if (NULL === $optionField) {
        throw new \Exception(sprintf('No option is selected in the %s select in the page %s', $select, $this->getSession()->getCurrentUrl()));
    }

    if ($optionField->getValue() !== $optionValue) {
        throw new \Exception(sprintf('The option "%s" was not selected in the page %s, %s was selected', $optionValue, $this->getSession()->getCurrentUrl(), $optionField->getValue()));
    }
}
like image 189
Dallas Avatar answered Oct 16 '22 15:10

Dallas