我正在制作一个页面对象。
cublasSgeam
但是当我继承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
都无济于事。发生什么了?我没有在Matz的Ruby书中读到有关方法继承的任何启发,通常Ruby也不足为奇,因此我很难确定问题的实际位置。
答案 0 :(得分:1)
您正在调用元素,就好像它被定义为类方法一样。类定义中但不在方法定义中的任何代码只能调用类方法。一种使方法可见的方法是从调用它的位置改变签名,使其成为类对象的方法。
class Page
def self.element
end
end