2011-09-26 59 views
4

我写贝哈特测试,我需要改变一个隐藏的输入字段灌装隐藏式输入,贝哈特

<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); 

是否有一些特别的东西,其需要做修改隐藏输入端F ields?

回答

2

它的设计意图。貂是用户+浏览器模拟器。它模拟一切,真正的用户可以在真正的浏览器中完成。用户当然不能填充页面上的隐藏字段 - 他只是看不到它们。

貂皮不是爬虫,它是一个浏览器模拟器。 Mink的整个想法是通过简单而干净的API来描述真正的用户交互。如果有什么,该用户不能通过真正的浏览器 - 你不能用貂皮做。

(来源:http://groups.google.com/group/behat/browse_thread/thread/f06d423c27754c4d

8

Rev是正确的。如果真正的用户可以通过单击按钮或链接通过JavaScript更改输入字段。尝试这样做。对用户不可见的字段也对Mink不可见。

要不然你可以做的是从你的情况下调用$session->executeScript($javascript)与$的JavaScript像

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

,并检查其是否正常工作

+0

$ session从哪里来? –

10

尽管用户可以不填隐藏字段,也有有些情况下,如果希望能够填充隐藏字段进行测试(通常规则有例外情况)。您可以使用您的功能上下文类中的下一步按名称填充隐藏字段:

/** 
* @Given /^I fill hidden field "([^"]*)" with "([^"]*)"$/ 
*/ 
public function iFillHiddenFieldWith($field, $value) 
{ 
    $this->getSession()->getPage()->find('css', 
     'input[name="'.$field.'"]')->setValue($value); 
} 
+0

例如,我用它来测试带自定义验证器的ReCaptcha小部件(它只是在测试环境下根据预定义的值进行验证),而无需在真实浏览器中运行。 – WayFarer

+0

这也是测试服务器端验证黑客的好方法。 – branchgabriel