Behat填充表单字段,动态设置为“可见”字样。

时间:2014-11-05 17:35:45

标签: javascript symfony selenium behat

我有一个隐藏字段的表单。如果用户选中了一个复选框,则使用jquery函数slideToggle()显示一些隐藏的表单字段。这是非常简单的代码,您可以查看示例here

我的问题是Behat仍然认为表单字段在复选框为用户显示后不可见且不可交互。

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

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

如何在我尝试填写表单之前等待单击侦听器以使复选框完成执行,或者是否有更好的方法?

1 个答案:

答案 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没有动画任何东西)。