不要等待页面完成加载以进行集成测试

时间:2015-12-11 08:21:19

标签: selenium rspec phantomjs capybara

我有一个很长的加载页面(很多图像),我只想在我需要的第一个元素出现时立即测试。我不想等到每个元素都完成加载。我怎么能这样做?

我当前代码的片段:

visit ...

expect(page).to have_selector('#block .item', minimum: 1)

驱动程序配置:

Capybara.register_driver :selenium do |app|
  client = Selenium::WebDriver::Remote::Http::Default.new
  client.timeout = 360

  Capybara::Selenium::Driver.new(app, :browser => :chrome, :http_client => client)
end

2 个答案:

答案 0 :(得分:0)

1)您可以尝试使用within方法:http://www.rubydoc.info/github/jnicklas/capybara/Capybara%2FSession%3Awithin

这样,Capybara不会从开始到结束分析DOM,而只是你在within方法中包含的代码部分。

假设您要点击button内的div。在这个例子中,我将使用xpath但它取决于你的 Capybara.default_selector

 within(:xpath, 'THE XPATH OF YOUR DIV') do
  click_button('YOUR BUTTON')
 end

2)另一种选择是跳过图片加载,在Capybara config中设置。

Capybara.register_driver :firefox do |app|
 profile = Selenium::WebDriver::Firefox::Profile.new
 profile['webdriver.load.strategy'] = 'unstable'
 Capybara::Selenium::Driver.new(app, :browser => :firefox, profile: profile)
end
Capybara.default_driver = :firefox

答案 1 :(得分:0)

如果这里的问题确实是需要很长时间才能加载的图像,那么您应该查看puffing-billy,它提供了一个可与selenium驱动程序配合使用的可编程代理。有了它,您可以设置puffing-billy为任何您不关心的图像请求返回错误。另一种选择是交换到允许设置不加载图像的选项的驱动程序。