Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby未初始化常量BaseHelper(NameError)_Ruby On Rails_Ruby_Oop_Selenium_Selenium Webdriver - Fatal编程技术网

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
会带来您需要的文件。