Заполнение скрытых входных данных с помощью Behat

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

<input type="hidden" id="input_id" ..... />

Мне нужно изменить значение этого поля ввода, но я продолжаю получать

Form field with id|name|label|value "input_id" not found

Я использовал шаг

$steps->And('I fill in "1" for "input_id"', $world);

Есть ли что-то особенное, что нужно сделать, чтобы изменить скрытые поля ввода?


person Sean    schedule 26.09.2011    source источник


Ответы (3)


Несмотря на то, что пользователь не может заполнять скрытые поля, бывают ситуации, когда желательно иметь возможность заполнять скрытые поля для проверки (так как обычно правила имеют исключения). Вы можете использовать следующий шаг в своем классе контекста объекта, чтобы заполнить скрытое поле по имени:

/**
 * @Given /^I fill hidden field "([^"]*)" with "([^"]*)"$/
 */
public function iFillHiddenFieldWith($field, $value)
{
    $this->getSession()->getPage()->find('css',
        'input[name="'.$field.'"]')->setValue($value);
}
person WayFarer    schedule 02.01.2013
comment
Например, я использовал его для тестирования виджета ReCaptcha с пользовательским валидатором (который просто проверяет соответствие предварительно определенному набору значений в тестовой среде), не запуская его в реальном браузере. - person WayFarer; 03.01.2013
comment
Это отличная стратегия для тестирования взломов проверки на стороне сервера. - person branchgabriel; 08.01.2013

Рев прав. Если реальный пользователь может изменить поля ввода через javascript, нажав кнопку или ссылку. попробуй так сделать. Поля, которые не видны пользователю, также не видны Mink.

Или, что вы можете сделать, это вызвать $session->executeScript($javascript) из вашего контекста с помощью $javascript, например

$javascript = "document.getElementById('input_id').value='abc'";
$this->getSession()->executeScript($javascript);

и проверьте, работает ли это

person simply-put    schedule 01.10.2012
comment
откуда берется $session? - person axel freudiger; 05.06.2013

Это предусмотрено дизайном. Mink — это эмулятор пользователя + браузера. Он эмулирует все, что реальный пользователь может делать в реальном браузере. И уж точно пользователь не сможет заполнить скрытые поля на странице - он их просто не увидит.

Mink — это не краулер, это эмулятор браузера. Вся идея Mink заключается в том, чтобы описывать реальные взаимодействия с пользователем через простой и понятный API. Если есть что-то, что этот пользователь не может сделать через настоящий браузер - вы не можете сделать это с Mink.

(источник: http://groups.google.com/group/behat/browse_thread/thread/f06d423c27754c4d)

person ocornu    schedule 19.03.2012