通过devise登录后,我单击带有附加javascript的按钮,该按钮使一些HTML可见。

<button id="btn_simple_search"
        class="btn btn-primary btn-md well_button"
        data-toggle="button"
>
   Search
</button>

通话功能
$("#btn_simple_search").click(function(){
   $("#simple_search").toggle(500);
});

我希望 capybara 测试要等到此功能完成(我不知道-像一些回调或类似的东西),而不是在单击其他按钮或从新显示的HTML块中选择一些选项之前进行sleep 0.6的测试。我正在使用Minitest作为测试框架。怎么做?

上面的javascript直接嵌入在页面上。

最佳答案

capybara 发现者(all/first除外),匹配器和 session 操作默认为等待/重试行为,专门用于处理您正在谈论的问题。他们(默认情况下)将等待Capybara.default_max_wait_time秒,以使所需的元素显示在页面上。这意味着当您执行一项需要花费一些时间的操作,并且想要等待该操作完成时,您需要指示Capybara在页面上寻找可以更改以指示完成的内容。单击使事物可见的按钮时,这可能是在寻找显示的文本内容,或者只是告诉它单击可见的按钮,因为找到该按钮将稍等一会,直到它变为可见为止。

其中的一个皱纹是页面上存在动画的项目。这里的问题是这些项目变为可见但仍在移动。这可能会导致某些驱动程序(特别是Poltergeist,由于无法真正解决的体系结构问题)在页面上的错误位置单击。最好的解决方案是在测试模式下禁用动画,这也可以加快测试速度,但是您执行此操作的精确度取决于所使用的生成动画的库。

关于ruby-on-rails - Capybara/Poltergeist-等待JavaScript完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41854537/

10-13 04:50