Ruby初学者试图从Ruby中的另一个类调用方法?
我正在努力让下面的工作。不知道我在哪里失败了。我收到以下错误: 1) 错误: 我对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
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:insearch'google.rb:25:in'test\u google'的:nomethoderor:undefined methodfind\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