2014-11-05 73 views
0

我有一个带有隐藏字段的表单。如果用户选择了一个复选框,那么使用jquery函数slideToggle()显示一些隐藏的表单域。这是非常直接的代码,您可以查看示例hereBehat填充表格字段被动态设置为'可见'

我的问题是,在复选框向用户显示它们之后,Behat仍然认为表单域是不可见和不可交互的。

这是我想在我的功能测试场景:

When I check "form_checkbox" 
And I fill in "form_field" with "some data" 

如何去等待上点击侦听器复选框,以执行之前,我试图填写表格还是有更好的方法?

+0

请给我们一些代码。 – HarrieDakpan 2014-11-05 17:37:36

回答

1

您可以尝试在两者之间放置一个AfterStep步骤以允许jQuery执行动画。像这样的事情在你的FeatureContext应该有所帮助:

/** 
* @AfterStep @javascript 
*/ 
public function afterStep($event) 
{ 
    $text = $event->getStep()->getText(); 
    if (preg_match('/(follow|press|click|submit|check)/i', $text)) { 
     $this->jqueryWait(); 
    } 
} 

protected function jqueryWait($duration = 4000) 
{ 
     $this->getSession()->wait($duration, '(0 === jQuery.active && 0 === jQuery(':animated').length)'); 
} 

这基本上意味着,任何一个步骤,其文本包含后“跟随”,“新闻”,“点击”,“提交”或“检查”,执行将等待要么$duration毫秒,要么直到javascript断言返回true(即jQuery不会动画任何东西)。