我有一个主文件,并希望从中提取一些代码并将其移动到另一个,但它不适用于实例。例如:
require "selenium-webdriver"
require "./out.rb"
driver = Selenium::WebDriver.for :firefox
driver.navigate.to "http://www.google.com"
hello
save
out.rb是:
def save
driver.save_screenshot('screenshot.png')
end
def hello
puts "hello"
end
hello
in `<main>': undefined local variable or method `save' for main:Object(NameError)
如何从其他文件访问类方法?
答案 0 :(得分:1)
可以在第一个文件中访问这些方法。实质上,执行require与在同一文件中写入所有内容相同。
通过这样做,您可以看到部分问题:
require "selenium-webdriver"
def save
driver.save_screenshot('screenshot.png')
end
def hello
puts "hello"
end
driver = Selenium::WebDriver.for :firefox
driver.navigate.to "http://www.google.com"
hello
save
变量driver
在方法save
内无法使用。
解决这个问题的一种方法是让save
将驱动程序作为参数:
def save(driver)
driver.save_screenshot('screenshot.png')
end
# Call the method like this
save(driver)
有些观点:
they become private instance methods of Object
答案 1 :(得分:0)
由于您的问题似乎是 - 据我所知 - 更多的是Ruby问题而不完全依赖于Selenium,您可以采取另一种方法。
那就是使用:require_relative './out'
如果out.rb文件位于不同的文件夹中,则需要指定路径,但我编写了几个程序,其中我只做了类似require_relative 'out'
的操作。我还没弄清楚它为什么要求或不要求./前缀,所以最好先用它来尝试。
尝试一下:
require "selenium-webdriver"
require_relative "./out"
driver = Selenium::WebDriver.for :firefox
driver.navigate.to "http://www.google.com"
hello
save