如何以较低的速度运行Selenium(通过Capybara使用)?

mla*_*erg 16 ruby selenium cucumber capybara

默认情况下,Selenium在我使用Cucumber定义的场景中尽可能快地运行.我想将它设置为以较低的速度运行,因此我能够捕获该过程的视频.

我想出了一个Selenium::Client::Driver有一个set_speed方法的实例.这与Java API相对应.

我怎样才能获得Selenium::Client::Driver该类的实例?我可以得到page.driver,但它返回一个实例Capybara::Driver::Selenium.

del*_*ere 24

感谢http://groups.google.com/group/ruby-capybara/msg/6079b122979ffad2提示.

只是注意到这使用了Ruby的睡眠,所以它有点不精确 - 但应该为你做好工作.此外,执行调用的所有内容,这就是为什么它等待亚秒级.中间步骤 - 等到准备好,检查字段,聚焦,输入文本 - 每次暂停.

在您的功能/支持目录中创建"throttle.rb"(如果使用Cucumber)并填写:

require 'selenium-webdriver'
module ::Selenium::WebDriver::Firefox
  class Bridge
    attr_accessor :speed

    def execute(*args)
      result = raw_execute(*args)['value']
      case speed
        when :slow
          sleep 0.3
        when :medium
          sleep 0.1
      end
      result
    end
  end
end

def set_speed(speed)
  begin
    page.driver.browser.send(:bridge).speed=speed
  rescue
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,在步骤定义中,调用:

set_speed(:slow)
Run Code Online (Sandbox Code Playgroud)

要么:

set_speed(:medium)
Run Code Online (Sandbox Code Playgroud)

要重置,请致电:

set_speed(:fast)
Run Code Online (Sandbox Code Playgroud)


Ken*_*yer 5

这将起作用,并且不那么脆弱(对于一些较小的“ less”值)

require 'selenium-webdriver'
module ::Selenium::WebDriver::Remote
  class Bridge
    alias_method :old_execute, :execute
    def execute(*args)
      sleep(0.1)
      old_execute(*args)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)