Capybara / Poltergeist - 等待JavaScript完成

时间:2017-01-25 14:49:14

标签: ruby-on-rails capybara poltergeist

通过设计登录后,我点击了附带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直接嵌入页面。

2 个答案:

答案 0 :(得分:2)

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

其中一个问题就是在页面上存在动画的项目。这里的问题是物品变得可见但仍在移动。这可能会导致一些驱动程序(特别是由于架构问题导致的Poltergeist无法解决)点击页面上的错误位置。最好的解决方案是在测试模式下禁用动画,这也会加快你的测试速度,但你究竟是怎么做的,取决于你使用哪些库产生动画。

答案 1 :(得分:1)

您可以使用capybara的匹配器have_content等待内容出现在页面上:

expect(page).to have_content("Text from your hidden block here")
# click other button