我有一个很长的加载页面(很多图像),我只想在我需要的第一个元素出现时立即测试。我不想等到每个元素都完成加载。我怎么能这样做?
我当前代码的片段:
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
答案 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为任何您不关心的图像请求返回错误。另一种选择是交换到允许设置不加载图像的选项的驱动程序。