Попълване на скрити входове с 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 widget с персонализиран валидатор (който само валидира спрямо предварително дефинирана стойност, зададена при тестова среда), без да го стартирам в реален браузър. - person WayFarer; 03.01.2013
comment
Това е страхотна стратегия и за тестване на хакове за валидиране от страна на сървъра. - person branchgabriel; 08.01.2013

Rev е прав. Ако реалният потребител може да промени полетата за въвеждане чрез 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