2016-05-02 88 views
-1

我使用3个选择下拉从服务器(通过ajax)获取数据。我想编写一个集成测试,我需要等待ajax请求完成,然后从下一个下拉列表中选择一个值。等待Ajax调用完成Capybara

到目前为止,我在等待几秒钟,然后再进行下一次选择,但这不可靠,也不是一个好的解决方案。

+0

https://robots.thoughtbot.com/write-reliable-asynchronous-integration-tests-with-capybara –

回答

0

我有意识到默认情况下capybara(最新版本)等待ajax完成,然后运行代码中的下一行。我不需要做任何事情,只需一个选择。

select 'VW', from: 'trademarks-dropdown' 
select 'Golf', from: 'models-dropdown' 
assert_equal 200, status_code 
+0

注:水豚实际上并不等待Ajax来完成 - 等待的选项元素出现。这是一个小技术性,但重要的是理解,因为水豚不知道浏览器的请求,它知道的只是它在页面上可以看到和看不到的东西。 –

0

当您要求它与它们交互时,Capybara会自动等待项目出现在页面上。如果没有足够长的等待时间,你可以增加Capybara.default_max_wait_time或将:wait选项传递给大多数发现者/动作。

所以,如果你是阿贾克斯加载一个选择框,你可以做

select('Item that is being loaded') 

和水豚会等待,直到Capybara.default_max_wait_time秒,以用于该文本的选项可供选择。如果没有等待足够长的时间为您的应用程序响应时间,你可以做

select('Item that is being loaded', wait: 10) 

然后将等待10秒出现在页面上,然后在选项中选择