Мне нужно увидеть в выводе, была ли отмечена данная радиокнопка. Какое определение мне следует использовать? Я много гуглил об этом и не нашел решения (которое, вероятно, прямо передо мной, как кто-то, вероятно, уверит меня).
Проверить состояние переключателя в сценарии Behat Mink?
Ответы (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. Здесь мы ищем проверенный переключатель с заданным идентификатором.
Это определение работает для меня:
And the "radio-buton-name" field should contain "radio-button-value"
Вы можете написать собственное определение шага. Например, это то, что я сделал:
/**
* @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/
Метод, предоставляемый самим расширением 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 чуть выше определения метода).
Я подумал, что это стоит упомянуть, я добавил один для флажка, который использует метку, чтобы найти его.
/**
* @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');
}
}