使用 Capybara SitePrism 等待图像加载

Wait for an image to load using Capybara SitePrism

如何使用 Capybara 等待图像加载?这是我的应用程序代码:

-- <img src="data:image/jpeg.*" class="some class" alt="Image">

我曾尝试使用 wait_for 方法使用那些 classimg 属性,但没有成功。它从不等待该图像加载。

img 元素有一个完整的 属性 指示图像是否已加载。因此,类似于

start = Time.now
while true
  break if find('img.some_class')['complete']
  if Time.now > start + 5.seconds
    fail "Image still not loaded"
  end
  sleep 0.1
end

假设 img 元素已经在页面上,将最多等待 5 秒让图像完成加载。

这也可以作为自定义选择器实现,其中包含一些类似于

的东西
Capybara.add_selector(:loaded_image) do
  css { |locator_class| "img.#{locator_class}" }
  filter(:loaded, default: true, boolean: true) { |node, value| not(value ^ node['complete']) }
end

然后可以称为

find(:loaded_image, 'some_class')

*** 注意:我还没有真正尝试自定义选择器代码,但它应该足够接近以提供指导