等待 Ajax 调用完成 Capybara
Wait for Ajax call to finish for Capybara
我正在使用 3 select 下拉菜单从服务器(通过 ajax)获取数据。我想编写一个集成测试,我需要等待 ajax 请求完成,然后 select 下一个下拉列表中的值。
到目前为止,在执行下一个 select 之前,我正在等待几秒钟,但这并不可靠,也不是一个好的解决方案。
当您要求 Capybara 与项目交互时,它会自动等待项目出现在页面上。如果等待的时间不够长,您可以增加 Capybara.default_max_wait_time 或将 :wait 选项传递给大多数 finders/actions。
因此,如果您要通过 Ajax 加载 select 框,您可以这样做
select('Item that is being loaded')
并且 Capybara 将等待 Capybara.default_max_wait_time 秒,以便 select 可以使用带有该文本的选项。如果您的应用程序响应时间不够长,您可以这样做
select('Item that is being loaded', wait: 10)
然后最多等待 10 秒让选项出现在页面上,然后 select 它
我已经意识到水豚(最新版本)默认情况下会等待 ajax 完成,然后 运行 代码中的下一行。我不需要做任何事情,只是一个接一个地选择。
select 'VW', from: 'trademarks-dropdown'
select 'Golf', from: 'models-dropdown'
assert_equal 200, status_code
我正在使用 3 select 下拉菜单从服务器(通过 ajax)获取数据。我想编写一个集成测试,我需要等待 ajax 请求完成,然后 select 下一个下拉列表中的值。
到目前为止,在执行下一个 select 之前,我正在等待几秒钟,但这并不可靠,也不是一个好的解决方案。
当您要求 Capybara 与项目交互时,它会自动等待项目出现在页面上。如果等待的时间不够长,您可以增加 Capybara.default_max_wait_time 或将 :wait 选项传递给大多数 finders/actions。
因此,如果您要通过 Ajax 加载 select 框,您可以这样做
select('Item that is being loaded')
并且 Capybara 将等待 Capybara.default_max_wait_time 秒,以便 select 可以使用带有该文本的选项。如果您的应用程序响应时间不够长,您可以这样做
select('Item that is being loaded', wait: 10)
然后最多等待 10 秒让选项出现在页面上,然后 select 它
我已经意识到水豚(最新版本)默认情况下会等待 ajax 完成,然后 运行 代码中的下一行。我不需要做任何事情,只是一个接一个地选择。
select 'VW', from: 'trademarks-dropdown'
select 'Golf', from: 'models-dropdown'
assert_equal 200, status_code