Ruby:Monkey 补丁 selenium 驱动程序

Ruby: Monkey patch selenium driver

提问人:saurav 提问时间:3/31/2023 更新时间:3/31/2023 访问量:28

问:

我想要什么?

我想在驱动程序实例创建后立即从中提取所有功能。

设置

我正在创建一个新的驱动程序实例。

def create_my_selenium_driver
  @driver = Selenium::WebDriver.for :chrome
  puts '[DRIVER CREATED] '
end
create_my_selenium_driver()

我试过了什么?

class Selenium::WebDriver::Driver
  bridge = instance_method(:create_bridge)
  define_method(:create_bridge) do
    driver = bridge.bind(self).call
    $driver = driver
  end
end

我正在尝试上述代码,但无法覆盖该方法。我需要同时为 和 .create_bridgechromeremote

注意:这 2 个片段存在于不同的文件中。

PS:我的用例是覆盖它,而不是通过任何方法传递已经创建的驱动程序实例。我想在我的系统上创建任何硒驱动程序时拦截任何时间。

谁能帮我实现这一目标? 提前致谢!!

class Selenium::WebDriver::Driver
  bridge = instance_method(:create_bridge)
  define_method(:create_bridge) do
    driver = bridge.bind(self).call
    $driver = driver
  end
end

如前所述,我尝试使用 .instance_method

Ruby Selenium-web驱动程序 monkeypatching

评论


答:

0赞 Luke Hill 3/31/2023 #1

您几乎可以随时访问这些功能。在普通的硒(你似乎正在使用)中,你只是这样做

0> driver = Selenium::WebDriver.for :chrome
=> #<Selenium::WebDriver::Chrome::Driver:0x..f8b84161a7230ca browser=:chrome>

0> driver.capabilities
=> #<Selenium::WebDriver::Remote::Capabilities:0x00007fc886665f98 @capabilities={:timeouts=>{:implicit=>0, :page_load=>300000, :script=>30000}, :browser_name=>"chrome", :browser_version=>"111.0.5563.146", :platform_name=>"linux", :accept_insecure_certs=>false, :page_load_strategy=>"normal", :set_window_rect=>true, :unhandled_prompt_behavior=>"dismiss and notify", :strict_file_interactability=>false, "chrome"=>{"chromedriverVersion"=>"111.0.5563.64 (c710e93d5b63b7095afe8c2c17df34408078439d-refs/branch-heads/5563@{#995})", "userDataDir"=>"/tmp/.com.google.Chrome.PtFi9k"}, "goog:chromeOptions"=>{"debuggerAddress"=>"localhost:42993"}, "networkConnectionEnabled"=>false, "webauthn:extension:credBlob"=>true, "webauthn:extension:largeBlob"=>true, "webauthn:extension:minP…

或者,如果你想要在运行时使用它,那么这里的方法就是你想要查看的地方#initialize

module Selenium
  module WebDriver
    module Chrome
      class Driver < Chromium::Driver