默认情况下,Selenium会在我使用Cucumber定义的场景中尽可能快地运行。 我想将它设置为以较低的速度运行,因此我能够捕获该过程的视频。
我发现Selenium::Client::Driver
的实例有set_speed
方法。这与Java API。
如何获取Selenium::Client::Driver
类的实例?我可以获得page.driver
,但返回Capybara::Driver::Selenium
的实例。
答案 0 :(得分:23)
感谢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
然后,在步骤定义中,调用:
set_speed(:slow)
或:
set_speed(:medium)
要重置,请致电:
set_speed(:fast)
答案 1 :(得分:4)
这会起作用,并且不那么脆弱(对于某些小的值"较少")
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
答案 2 :(得分:3)
作为更新,该类中的execute方法不再可用。它现在只在这里:
module ::Selenium::WebDriver::Remote
我需要在IE中限制一些测试,这很有用。
答案 3 :(得分:2)
此线程中提到的方法不再适用于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。
答案 4 :(得分:0)
我想降低Capybara测试套件中的页面加载速度,以查看是否可以触发一些间歇性失败的测试。我通过创建nginx反向代理容器并将其放置在测试容器和用作无头浏览器的phantomjs容器之间来实现此目的。通过使用limit_rate指令来限制速度。最终并没有帮助我实现目标,但确实奏效了,对于其他人来说可能是有用的策略!