【问题标题】:Do not wait for page to finish loading for integration test不要等待页面完成加载以进行集成测试
【发布时间】:2015-12-11 08:21:19
【问题描述】:

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

我当前代码的片段:

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

【问题讨论】:

  • 你可以尝试适应你的需要这个等待某个元素变得可见的例子:github.com/ariya/phantomjs/blob/master/examples/waitfor.js
  • @Vaviloff 我不太确定该怎么做,因为wait_until 已被删除,而这个在 js 中(我的代码在 ruby​​ 中使用 capybara 选择器)。

标签: selenium rspec phantomjs capybara


【解决方案1】:

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

这样,Capybara 不会从头到尾分析 DOM,而只会分析你在 inside 方法中包含的部分代码。

假设您想在div 中单击button。在此示例中,我将使用 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

【讨论】:

  • 谢谢,但它不起作用(经过测试),因为我认为代码没有通过visit 行。 visit 正在阻止它下面的代码。
  • 您可以访问该页面吗?接下来会发生什么?
  • 我可以访问该页面,但加载时间过长(图片太多),但我要检查的元素已经可见。
  • 我认为我没有使用 webkit。我没有加载任何与 webkit 相关的 gem。其中的宝石包括capybarapoltergeistselenium-webdriver
  • 您使用的是什么驱动程序?你能分享你的 spec_helper 吗?
【解决方案2】:

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

【讨论】:

  • 我想说主要问题是页面加载时间过长(因为图像)。也许可以增加超时值。我可以增加它,页面不应该花费 5 分钟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
相关资源
最近更新 更多