2011-01-27 57 views
14

默認情況下,Selenium通過使用Cucumber定義的場景運行得儘可能快。 我想將它設置爲以較低的速度運行,因此我能夠捕獲該過程的視頻。如何以較低的速度運行Selenium(通過水豚使用)?

我發現Selenium::Client::Driver的一個實例有set_speed方法。其中對應Java API

如何獲得Selenium::Client::Driver類的實例?我可以得到儘可能多的page.driver,但返回的實例爲Capybara::Driver::Selenium

回答

21

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

請注意,這是使用Ruby的睡眠,所以它有點不準確 - 但應該爲你做這項工作。此外,執行被稱爲所有事情,所以這就是爲什麼它是亞秒等待。中間步驟 - 等到準備就緒,檢查字段,重點,輸入文本 - 每次暫停。

創建您的功能/支持目錄下的 「throttle.rb」(如果使用黃瓜),並填充:

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 

然後,在步驟定義,稱:

set_speed(:slow) 

或:

set_speed(:medium) 

要重置,請致電:

set_speed(:fast) 
+0

THX的暗示!以防萬一`page`不可用,要麼包括`Capybara :: DSL`或者替換爲`Capybara.current_session` – RngTng 2012-11-13 12:20:09

2

作爲更新,該類中的execute方法不再可用。它在這裏只現在是:

module ::Selenium::WebDriver::Remote

我需要扼殺一些測試,在IE和這個工作。

+0

請給出一個完整的代碼示例:) tanx。 – 2016-06-09 08:42:52

0

此線程中提到的方法不再適用於Selenium Webdriver v3。

您將需要爲執行命令添加睡眠。

module Selenium::WebDriver::Remote 
    class Bridge 
    def execute(command, opts = {}, command_hash = nil) 
     verb, path = commands(command) || raise(ArgumentError, "unknown command: #{command.inspect}") 
     path = path.dup 

     path[':session_id'] = session_id if path.include?(':session_id') 

     begin 
     opts.each { |key, value| path[key.inspect] = escaper.escape(value.to_s) } 
     rescue IndexError 
     raise ArgumentError, "#{opts.inspect} invalid for #{command.inspect}" 
     end 

     Selenium::WebDriver.logger.info("-> #{verb.to_s.upcase} #{path}") 
     res = http.call(verb, path, command_hash) 
     sleep(0.1) # <--- Add your sleep here. 
     res 
    end 
    end 
end 

注意:這是因爲你是猴子修補私有API的測試減慢很脆的方式。

1

這將工作,並且較脆(爲「少」的一些小的值)

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