Проверить состояние переключателя в сценарии Behat Mink?

Мне нужно увидеть в выводе, была ли отмечена данная радиокнопка. Какое определение мне следует использовать? Я много гуглил об этом и не нашел решения (которое, вероятно, прямо передо мной, как кто-то, вероятно, уверит меня).


person Bartosz Rychlicki    schedule 22.11.2012    source источник
comment
Шпаргалка Behat & Mink Cheat Sheet содержит полезная информация для вас.   -  person BentCoder    schedule 17.07.2015


Ответы (5)


Mink предоставляет шаг для тестирования флажков:

the "form_checkbox" checkbox should be checked

Но для переключателей вам нужно будет написать свой собственный шаг. Что-то типа :

/**
 * @Then /^Radio button with id "([^"]*)" should be checked$/
 */
public function RadioButtonWithIdShouldBeChecked($sId)
{
    $elementByCss = $this->getSession()->getPage()->find('css', 'input[type="radio"]:checked#'.$sId);
    if (!$elementByCss) {
        throw new Exception('Radio button with id ' . $sId.' is not checked');
    }
}

Вы можете использовать метод find() для нацеливания на элемент с помощью селекторов CSS. Здесь мы ищем проверенный переключатель с заданным идентификатором.

person Nassim    schedule 23.11.2012

Это определение работает для меня:

And the "radio-buton-name" field should contain "radio-button-value"
person rinat.io    schedule 02.08.2013
comment
Это должен быть принятый ответ, поскольку он использует определение шага, поставляемое с Mink. - person Alex Skrypnyk; 20.02.2017

Вы можете написать собственное определение шага. Например, это то, что я сделал:

/**
 * @When /^I check the "([^"]*)" radio button$/
 */
 public function iCheckTheRadioButton($labelText)
     {
     foreach ($this->getMainContext()->getSession()->getPage()->findAll('css', 'label') as $label) {
         if ($labelText === $label->getText() && $label->has('css', 'input[type="radio"]')) {
             $this->getMainContext()->fillField($label->find('css', 'input[type="radio"]')->getAttribute('name'), $label->find('css', 'input[type="radio"]')->getAttribute('value'));
             return;
         }
     }
     throw new \Exception('Radio button not found');
 }

Я знаю, что это старый вопрос, но я не нашел на него хорошего ответа при поиске в Stack Overflow и Google, поэтому я публикую свое решение здесь. Это может помочь кому-то.

http://blog.richardknop.com/2013/04/select-a-radio-button-with-mink-behat/

person Richard Knop    schedule 30.04.2013

Метод, предоставляемый самим расширением Behat/Mink, работает очень хорошо:

@версия Behat v3.0.14

@см. \Behat\MinkExtension\Context\MinkContext

/**
 * Checks checkbox with specified id|name|label|value.
 *
 * @When /^(?:|I )check "(?P<option>(?:[^"]|\\")*)"$/
 */
public function checkOption($option)
{
    $option = $this->fixStepArgument($option);
    $this->getSession()->getPage()->checkField($option);
}

Только что протестировано, и он отлично работает также с метками (как указано в phpdoc чуть выше определения метода).

person Francesco Casula    schedule 16.10.2014
comment
Пожалуйста, внимательно прочитайте вопрос: речь идет не о том, как установить состояние, а о том, как утвердить состояние. - person Alex Skrypnyk; 20.02.2017

Я подумал, что это стоит упомянуть, я добавил один для флажка, который использует метку, чтобы найти его.

/**
 * @Then the checkbox for :checkboxLabel should be selected
 */
public function theCheckboxForShouldBeSelected($checkboxLabel)
{
    $elementByCss = $this->getSession()->getPage()->find('css', 'label:contains("'.$checkboxLabel.'") input:checked');
    if (!$elementByCss) {
        throw new Exception('Checkbox with label ' . $checkboxLabel.' is not checked');
    }
}
person Doug Steinberg    schedule 15.07.2015