我有一个隐藏字段的表单。如果用户选中了一个复选框,则使用jquery函数slideToggle()显示一些隐藏的表单字段。这是非常简单的代码,您可以查看示例here。
我的问题是Behat仍然认为表单字段在复选框为用户显示后不可见且不可交互。
这是我试图在我的功能中测试的场景:
When I check "form_checkbox"
And I fill in "form_field" with "some data"
如何在我尝试填写表单之前等待单击侦听器以使复选框完成执行,或者是否有更好的方法?
答案 0 :(得分: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)');
}
这基本上意味着在文本包含“follow”,“press”,“click”,“submit”或“check”的任何步骤之后,执行将等待$duration
毫秒或直到javascript断言返回true
(即jQuery没有动画任何东西)。