我使用黄瓜框架来测试 Web 应用程序,当我开发我的脚本时,每次在我的代码中添加一些内容后,我都必须一次又一次地启动浏览器。我的问题是“是否可以从 ruby(.rb) 文件在已打开的浏览器上执行命令”??。这将节省我很多时间。我的框架基于 cucumber、capybara 和 selenium webdriver。
提前致谢
无法将现有浏览器与 Selenium Webdriver 一起使用。
但是,与浏览器相比,有些驱动程序(Capybara-Webkit、Poltergeist、Webdriver 的 HtmlUnitDriver)更快且启动时间更短。也许,他们会对你有好处。
不确定您到底想要什么...如果每次更改 UI 代码中的某些内容时都必须“F5”,您可以考虑使用保护宝石。
如果您编辑“视图”,guard + guard-livereload 和应用程序中包含的 rack-livereload 会自动更新浏览器。
我一直在使用 Selenium Webdriver 的猴子补丁版本,它使 PhantomJS 浏览器在测试运行之间保持打开状态。请参阅此博客文章:http: //blog.sharetribe.com/2014/04/07/faster-cucumber-startup-keep-phantomjs-browser-open-between-tests/
诀窍是存根Selenium::WebDriver::PhantomJS::Service.create_process
方法并告诉 Selenium 驱动程序使用默认端口 8910,即使它是保留的。
您可以将这段代码添加到您的 config/test.rb 文件中:
class Selenium::WebDriver::PortProber
def self.free?(port)
true
end
end
class Selenium::WebDriver::PhantomJS::Service
def create_process(args)
puts "Starting monkey-patched PhantomJS Selenium Webdriver"
Struct.new("ChildProcessFake") do
def start() end
def exited?() true end
end.new
end
end
现在您可以在终端选项卡中启动 PhantomJS:
phantomjs --webdriver=8910
当你运行 PhantomJS 时,你可以开始你的 Cucumber 测试。
显然这仅适用于 PhantomJS,但类似的东西也适用于其他浏览器。