从超类型对象创建ruby对象
我正在使用Ruby中的SeleniumWebDriver库。一段典型的代码如下所示:从超类型对象创建ruby对象,ruby,factory,subtype,Ruby,Factory,Subtype,我正在使用Ruby中的SeleniumWebDriver库。一段典型的代码如下所示: 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::W
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::Driver
,名为Selenium::WebDriver::Driver::MyClass
,它将包含一些新方法和实例变量
如上代码所示,创建Selenium::WebDriver::Driver
实例的方法是使用Selenium::WebDriver.for
如果不大规模复制代码,我如何创建一个版本的
Selenium::WebDriver.for
,它与Selenium::WebDriver.for
的功能相同,但创建Selenium::WebDriver::Driver::MyClass
?为什么不直接覆盖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类并将您的行为添加到其中。检查Selenium::WebDriver.for
只需将方法调用委托给Selenium::WebDriver::Driver.for
如果您没有附加侦听器,您可以简单地创建自己的网桥MyClass::bridge.new
,然后将其传递给Selenium::WebDriver::Driver.new
如果您坚持重写for
方法,下面是一些代码片段,可能会有所帮助
模块硒
模块WebDriver
类驱动程序
类如果只想在驱动程序上定义一些额外的方法,则不需要重写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
问候,
require-relative 'customdriver'
driver = CustomDriver.for :chrome
driver.click_on("buttonID")