1

Ruby で Selenium Webdriver ライブラリを使用しています。典型的なコードは次のようになります。

require 'rubygems'
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :firefox 
# driver is an instance of Selenium::WebDriver::Driver

url = 'http://www.google.com/'
wait = Selenium::WebDriver::Wait.new(:timeout => 10)
driver.get(url)
wait.until { driver.title.start_with? "Google" }

いくつかの新しいメソッドとインスタンス変数を含む、 Selenium::WebDriver::Drivercalledのサブクラスを作成したいと思います。Selenium::WebDriver::Driver::MyClass

上記のコードが示すように、 のインスタンスをSelenium::WebDriver::Driver作成する方法はSelenium::WebDriver.for.

コードの大規模なコピーなしでSelenium::WebDriver.for、 と同じことを行い、Selenium::WebDriver.forインスタンスを作成する のバージョンを作成するにはどうすればよいSelenium::WebDriver::Driver::MyClassですか?

4

3 に答える 3

0

ソースコードを確認してください。Selenium::WebDriver.forメソッド呼び出しを にデリゲートするだけSelenium::WebDriver::Driver.forです。

リスナーが接続されていない場合は、独自のブリッジMyClass::Bridge.newを簡単に作成して、それを に渡すことができますSelenium::WebDriver::Driver.new

メソッドをオーバーライドしたい場合は、次forのコード スニペットが役立ちます。

module Selenium
  module WebDriver
    class Driver
      class << self
        alias_method :old_for, :for
        def for(browser, opts = {})
          if browser == :myclass
            # create your MyClass::Bridge instance and pass that to new()
          else
            old_for(browser, opts)
          end
        end
      end
    end
  end
end
于 2013-03-29T05:50:10.440 に答える
0

ドライバーに追加のメソッドを定義するだけの場合は、WebDriver.for をオーバーライドする必要はありません。

以下は私にとってうまくいきました:

まず、ファイル customdriver.rb で

require 'selenium-webdriver'
class CustomDriver < Selenium::WebDriver::Driver 
  #a custom method..
  def click_on (_id)
    element = find_element :id => _id
    element.click
  end 
  #add other custom methods here
  #....
end

次に、ファイル main.rb で

require-relative 'customdriver'
driver = CustomDriver.for :chrome
driver.click_on("buttonID")

よろしく、

于 2015-12-05T18:00:49.310 に答える
0

なぜオーバーライドしないのSelenium::WebDriver.forですか?私の例をお見せしましょう

# selenium code
module Selenium
  class WebDriver
    def self.for
      puts "creating oldclass"
    end
  end
end

# your code
class Selenium::WebDriver
  def self.for
    puts "creating myclass"
  end
end

Selenium::WebDriver.for

出力:

creating myclass

安全な代替手段は、クラスを派生Selenium::WebDriverさせてコードで使用することです。極端に言えば、Driver クラスを開いて動作を追加することもできます。

于 2013-03-29T02:59:24.537 に答える