Ruby子类没有继承父方法或不能在类体中调用父方法



我正在创建一个页面对象。

require 'watir-webdriver'
class Page
  attr_accessor :driver
  def initialize
    @driver = Watir::Browser.new :phantomjs
    @driver.goto(some_arbitrary_url)
  end
  def element(**attrs)
    @driver.element( id: attrs[:id], tag_name: attrs[:tag_name])
  end
  def elements(**attrs)
    @driver.elements( class: attrs[:class], tag_name: attrs[:tag_name])
  end
end

然而,当我子类化Page类时,我不能在类体中使用它的element方法,除非我把它们放在一个方法中,像这样:

class Home < Page
  #throws NoMethodError: undefined method 'element' for Home:Class
  some_element = element(id: 'elements_id')
  #works
  def some_arbitrary_element
    element(id: 'elements_id')
  end
end

到目前为止,只是修修补补,我已经尝试做protected: element, elements以及self.element(...)都无济于事。那么这是怎么回事呢?我没有在Matz的Ruby书中读到任何关于方法继承的启发性内容,而且Ruby通常是如此的不令人惊讶,所以我很难确定问题到底在哪里。

调用element就好像它被定义为一个类方法一样。任何在类定义中但不在方法定义中的代码都只能调用类方法。使方法在调用它的地方可见的一种方法是更改签名,使其成为类对象的方法。

class Page
  def self.element
  end
end

最新更新