Capybara是一个用于Ruby的验收测试框架,主要用于模拟用户与Web应用程序的交互。它常用于Rails应用的集成测试。
Capybara默认情况下不会自动等待AJAX调用完成并更新DOM,这会导致以下情况:
Capybara提供了内置的等待机制,可以使用以下方法:
# 等待特定元素出现
expect(page).to have_content('New content')
expect(page).to have_css('.new-element')
# 等待特定元素消失
expect(page).to have_no_content('Loading...')
# 在测试配置中增加默认等待时间
Capybara.default_max_wait_time = 5 # 秒
# 使用wait_until (较旧版本)
page.wait_until { page.has_content?('New content') }
# 或者使用find的等待功能
find('.new-element', wait: 10) # 等待最多10秒
# 使用Capybara的AJAX检测
expect(page).to have_no_css('.spinner') # 等待加载动画消失
# 在RSpec中
expect(page).to have_selector('.dynamic-content', wait: 5)
这种问题常见于:
通过正确使用Capybara的等待机制,可以确保测试能够正确处理AJAX调用后插入的新DOM元素。
没有搜到相关的文章