使用Ruby中的模块进行适当的猴子修补

时间:2017-06-28 22:22:29

标签: ruby

我想为硒红宝石做一个猴子补丁。

以下是我关注的article

但是,当我确定自己的代码时:

module Selenium
  module WebDriver
    module Driver
      module CookieManagement
        # This is the same as Driver.get, but I just want it to save all the domains it goes to in an easily accessible variable
        def get_and_save(url)
          puts "You've asked me to get, so I am getting"
          get(url)
        end
      end
    end
  end
end

我收到错误:

Uncaught exception: Driver is not a module

我知道发生这种情况是因为我已经定义了一个Driver类,所以没关系。但那么文章中的这个家伙怎么没有发生,更重要的是,接受的解决方法是什么呢?

更新

我想我不能不包括我所包含的代码行导致上述错误。

Selenium::WebDriver::Driver.include Selenium::WebDriver::Driver::CookieManagement

此外,它只是红宝石。 没有涉及铁路。

1 个答案:

答案 0 :(得分:0)

好的,所以使用这个答案When monkey patching a method, can you call the overridden method from the new implementation?

我想出了:

require 'selenium-webdriver'

module CookieManagement
  def get_and_save(url)
    puts "You told me to get, so I am getting"
    get(url)
  end
end


class Selenium::WebDriver::Driver
  include CookieManagement
end

然后我require_relative而不是需要该功能的.rb文件中的标准selenium-webdriver gem。