Ruby初学者试图从Ruby中的另一个类调用方法?

Ruby初学者试图从Ruby中的另一个类调用方法?,ruby,Ruby,我正在努力让下面的工作。不知道我在哪里失败了。我收到以下错误: 1) 错误: 我对ruby还不熟悉,所以这是非常简单的。有人能给我解释一下我的错误和原因吗。谢谢 require "test/unit" require "selenium-webdriver" require "json" require "time" require_relative "methods" class Google < Test::Unit::TestCase def setup @drive

我正在努力让下面的工作。不知道我在哪里失败了。我收到以下错误:

1) 错误:

我对ruby还不熟悉,所以这是非常简单的。有人能给我解释一下我的错误和原因吗。谢谢

require "test/unit"
require "selenium-webdriver"
require "json"
require "time"
require_relative "methods"

class Google < Test::Unit::TestCase

  def setup
    @driver = Selenium::WebDriver.for :firefox
    @base_url = "https://www.google.com/"
    @accept_next_alert = true
    @driver.manage.timeouts.implicit_wait = 30
    @verification_errors = []
    @search = Method.new()
  end 

  def teardown
    @driver.quit
    assert_equal [], @verification_errors
  end 

  def test_google
    @driver.get(@base_url + "/")
    @search.search
  end 

end

class Method

  def search
      @driver.find_element(:id, "gbqfq").clear
      @driver.find_element(:id, "gbqfq").send_keys "this is a test"
      @driver.find_element(:id, "gbqfb").click
      @driver.find_element(:id, "gbqfb").click
  end 

end
要求“测试/单元”
需要“selenium webdriver”
需要“json”
需要“时间”
需要相对的“方法”
类Google
我更改了类名:

require "test/unit"
require "selenium-webdriver"
require "json"
require "time"


class Google < Test::Unit::TestCase

  def setup
    @driver = Selenium::WebDriver.for :firefox
    @base_url = "https://www.google.com/"
    @accept_next_alert = true
    @driver.manage.timeouts.implicit_wait = 30
    @verification_errors = []
    @search = Suber.new()
  end 

  def teardown
    @driver.quit
    assert_equal [], @verification_errors
  end 

  def test_google
    @driver.get(@base_url + "/")
    @search.search
  end 

end


class Suber


  def search
      @driver.find_element(:id, "gbqfq").clear
      @driver.find_element(:id, "gbqfq").send_keys "this is a test"
      @driver.find_element(:id, "gbqfb").click
      @driver.find_element(:id, "gbqfb").click
  end 


end
要求“测试/单元”
需要“selenium webdriver”
需要“json”
需要“时间”
类Google
现在我不确定如何在我的“Suber”类中设置@driver。我以为它会起作用,但它抛出:

NoMethodError:nil:NilClass的未定义方法
find_元素
google.rb:37:in
search' google.rb:25:in'test_google'


:/

根据您的编辑,执行以下操作:

require "test/unit"
require "selenium-webdriver"
require "json"
require "time"

module Suber


  def search
      @driver.find_element(:id, "gbqfq").clear
      @driver.find_element(:id, "gbqfq").send_keys "this is a test"
      @driver.find_element(:id, "gbqfb").click
      @driver.find_element(:id, "gbqfb").click
  end 


end

class Google < Test::Unit::TestCase

  include Suber

  def setup
    @driver = Selenium::WebDriver.for :firefox
    @base_url = "https://www.google.com/"
    @accept_next_alert = true
    @driver.manage.timeouts.implicit_wait = 30
    @verification_errors = []
    #@search = Suber.new()
  end 

  def teardown
    @driver.quit
    assert_equal [], @verification_errors
  end 

  def test_google
    @driver.get(@base_url + "/")
    search
  end 

end
要求“测试/单元”
需要“selenium webdriver”
需要“json”
需要“时间”
模苏贝尔
def搜索
@driver.find_元素(:id,“gbqfq”)。清除
@driver.find_元素(:id,“gbqfq”)。发送_键“这是一个测试”
@驱动程序。查找_元素(:id,“gbqfb”)。单击
@驱动程序。查找_元素(:id,“gbqfb”)。单击
结束
结束
类Google
方法是Ruby中的内置类(),您必须将您的类重命名为其他类。

这确实不是一个解决方案,但如果您有时间,元编程Ruby一书将详细介绍类。

谢谢!但是,现在我收到了nil:NilClass google.rb:35:in
search'google.rb:25:in'test\u google'的:nomethoderor:undefined method
find\u element',所以我觉得我仍然没有正确调用这个类。我的Mothod类中的实例变量在Google中调用时是否应该正常工作?还是我需要在方法类中定义一些内容?”“find_element”是selenium webdriver的内置方法,我在Google中调用它。@user2120790,在
find_element
中使用它之前,您没有在新类上设置
@driver
。它仍然存在。他的
方法
类没有继承任何其他类,因此
搜索
实例方法没有任何关于
@driver的知识
我已经为您的第二部分添加了答案。希望对您有所帮助。
require "test/unit"
require "selenium-webdriver"
require "json"
require "time"

module Suber


  def search
      @driver.find_element(:id, "gbqfq").clear
      @driver.find_element(:id, "gbqfq").send_keys "this is a test"
      @driver.find_element(:id, "gbqfb").click
      @driver.find_element(:id, "gbqfb").click
  end 


end

class Google < Test::Unit::TestCase

  include Suber

  def setup
    @driver = Selenium::WebDriver.for :firefox
    @base_url = "https://www.google.com/"
    @accept_next_alert = true
    @driver.manage.timeouts.implicit_wait = 30
    @verification_errors = []
    #@search = Suber.new()
  end 

  def teardown
    @driver.quit
    assert_equal [], @verification_errors
  end 

  def test_google
    @driver.get(@base_url + "/")
    search
  end 

end