javascript - 如何检测视口(viewport)中是否存在元素? ( capybara 、 ruby )

标签 javascript ruby selenium cucumber capybara

我有一个步骤来检查页脚可见性

And (/^the footer appears$/) do
   within("div.footer") do
      assert_selector "a", :text=> "About"
      ...
   end
end

基本上,我加载页面并滚动到底部,然后进行此检查,但我也注意到此步骤无需滚动到底部即可工作。我做了一些测试,发现此步骤仅检查整个页面的可见性。它不会检查视口(viewport)内的可见性。

我希望只有当元素位于视口(viewport)内时才通过检查。如果没有 Rspec 且仅 capybara/ruby/js ,这可能吗?

最佳答案

您可以使用#evaluate_javascript来检查这一点。类似的东西

in_view = evaluate_script("(function(el) {
  var rect = el.getBoundingClientRect();
  return (
    rect.top >= 0 && rect.left >= 0 &&
    rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
    rect.right <= (window.innerWidth || document.documentElement.clientWidth)
  )
})(arguments[0]);", find('div.footer'))
# assert that in_view is true, or whatever you want.

关于javascript - 如何检测视口(viewport)中是否存在元素? ( capybara 、 ruby ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49578880/

相关文章:

javascript - 从本地存储加载和解析 xml

javascript - 两台服务器可以访问共同的mongoDB数据库吗

javascript - 如何将函数的结果从外部 javascript 脚本返回到 pug 文件?

ruby - 使用 Faraday 通过 Unix 套接字发出 HTTP 请求

ruby - Java 到 JRuby 到 Resque

ruby-on-rails - Rails 4 Devise 3.1.1 ActionController::UnknownFormat 在 Devise::RegistrationsController#new

javascript - Protractor by.repeater 找不到任何东西

javascript - 使用数据表打开模式

java - 如何在 Cucumber 测试套件中订购功能文件?

ruby - capybara 找到按钮但点击它什么也没做