在Capybara测试中关闭动画

jok*_*lan 10 css animation ruby-on-rails capybara

我的页面上有很多动画,这实际上减慢了我在水豚的测试速度,因为水豚经常需要等到一个元素被动画化,因为它开始隐藏.

我为所有基于jQuery的动画找到了这个解决方案:

<%= javascript_tag '$.fx.off = true;' if Rails.env.test? %>

但是我使用twitter bootstrap,而bootstrap中的大多数动画都是由CSS 3(使用javascript后备)制作的.所以我的问题是,有没有办法在测试中转换CSS 3过渡和动画?

vby*_*yno 23

Capybara v3.2.0开始:

Capybara.disable_animation = true
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。完全解决了我在使用 Bootstrap 4 模态时遇到的问题! (3认同)

Mil*_*ern 11

您可以尝试创建一些转换重置并将其应用于特定元素.

.reset-transition {
    -webkit-transition: none;
    -moz-transition: none;
    -ms-transition: none;
    -o-transition: none;
    transition: none;
}
Run Code Online (Sandbox Code Playgroud)

您也可以将它应用于ALL并在Bootstrap之后放置此CSS

* {
    -webkit-transition: none;
    -moz-transition: none;
    -ms-transition: none;
    -o-transition: none;
    transition: none;
}
Run Code Online (Sandbox Code Playgroud)

你可以使它更具体

div, a, span, footer, header {
    -webkit-transition: none;
    -moz-transition: none;
    -ms-transition: none;
    -o-transition: none;
    transition: none;
}
Run Code Online (Sandbox Code Playgroud)


ste*_*nis 6

# env.rb or spec_helper.rb

Capybara.register_driver :poltergeist do |app|
  opts = {
    extensions: ["#{Rails.root}/features/support/phantomjs/disable_animations.js"] # or wherever
  }

  Capybara::Poltergeist::Driver.new(app, opts)
end

Capybara.javascript_driver = :poltergeist
Run Code Online (Sandbox Code Playgroud)

```

// disable_animations.js
var disableAnimationStyles = '-webkit-transition: none !important;' +
                             '-moz-transition: none !important;' +
                             '-ms-transition: none !important;' +
                             '-o-transition: none !important;' +
                             'transition: none !important;'

window.onload = function() {
  var animationStyles = document.createElement('style');
  animationStyles.type = 'text/css';
  animationStyles.innerHTML = '* {' + disableAnimationStyles + '}';
  document.head.appendChild(animationStyles);
};
Run Code Online (Sandbox Code Playgroud)

或者只是时间

var disableAnimationStyles = '-webkit-transition-duration: .0s !important;' +
  '-o-transition-duration: .0s !important;' +
'transition-duration: .0s !important;';
Run Code Online (Sandbox Code Playgroud)

  • 使用headless_chrome作为驱动程序有可能吗? (2认同)