Ruby on rails Ruby未初始化常量BaseHelper(NameError)
嗨,我有一个让我发疯的问题,当我的代码符合我收到的错误Ruby on rails Ruby未初始化常量BaseHelper(NameError),ruby-on-rails,ruby,oop,selenium,selenium-webdriver,Ruby On Rails,Ruby,Oop,Selenium,Selenium Webdriver,嗨,我有一个让我发疯的问题,当我的代码符合我收到的错误 uninitialized constant BaseHelper (NameError) 我的代码一直工作得很好,直到我添加了另一个子类(AccessoriesMerchandise) 我的课是这样的 BaseHelper类: class BaseHelper def find(locator) @browser.find_element locator end def type(locator, input) find(l
uninitialized constant BaseHelper (NameError)
我的代码一直工作得很好,直到我添加了另一个子类(AccessoriesMerchandise)
我的课是这样的
BaseHelper类:
class BaseHelper
def find(locator)
@browser.find_element locator
end
def type(locator, input)
find(locator).send_keys input
end
end
儿童班:
class FindADealerPage < BaseHelper
#PageObjects
FIND_A_DEALER_SEARCH_FIELD = {id: "abcd"}
MAP_TAB = {css: 'abcd abcd abcd'}
SERVICE_CHECK_BOX = {class: "abcd"}
SUBMIT_SEARCH = {class: "abcd"}
DEALER_RESULTS_FIRST_DEALER = {css: "abcd"}
def initialize(browser, wait)
@browser = browser
@wait = wait
end
def go_to_find_a_dealer_page
@browser.get $base_url
end
end
class FindADealerPage
他们都坐在同一个文件夹里!我在问题开始的地方添加了这个类
class AccessoriesMerchandise < BaseHelper
#PageObjects
ACCESSORIES_ACCORDION = {css: 'div.mesSpecAccordion.accessoriesAccordion'}
PANEL_CLOSED = {css: 'h2.trigger'}
PANEL_OPENED_ACTIVE = {css: 'h2.trigger.active'}
def initialize(browser, wait)
@browser = browser
@wait = wait
end
def go_to_page
@browser.get $base_url
end
end
class accessorieserchandise
这个类也位于同一文件夹中。
我使用的框架是Ruby Selenium WebDriver、Cucumber和Rspec Expections,您需要
要求它
它应该类似于[正如您所说,两者都在同一个文件夹中]
require 'base_helper.rb'
class FindADealerPage < BaseHelper
#PageObjects
FIND_A_DEALER_SEARCH_FIELD = {id: "abcd"}
MAP_TAB = {css: 'abcd abcd abcd'}
SERVICE_CHECK_BOX = {class: "abcd"}
SUBMIT_SEARCH = {class: "abcd"}
DEALER_RESULTS_FIRST_DEALER = {css: "abcd"}
def initialize(browser, wait)
@browser = browser
@wait = wait
end
...
end
需要'base\u helper.rb'
类FindADealerPage
您需要在子类文件上require
它,比如require base\u helper.rb
但是为什么它以前在没有任何requires的情况下工作?如果它们都位于同一个文件夹中,您还需要一个require吗?是的,为了创建可重用的组件(可以在其他程序中轻松使用的组件),编程语言必须有某种方式在运行时顺利导入代码。在Ruby中,require方法用于加载另一个文件并执行其所有语句。这用于导入文件中的所有类和方法定义。除了简单地执行文件中的所有语句外,require方法还跟踪以前需要的文件,因此不会两次需要一个文件。ok require单独不起作用,但需要文件。expand_path('../base_helper.rb',file)以前可能工作过,因为您的框架加载文件夹中的所有文件,可能是按字母顺序。因此,在加载find_a_dealer.rb时,base_helper.rb已经加载,因此常量BaseHelper
可用。但是当您添加accessories.rb时,它在base_helper.rb之前加载,并且常量BaseHelper
不可用。正如其他海报所解释的,当您需要时,require
会带来您需要的文件。