2016-01-04 68 views
0

我有一个主文件,并希望从中拉出一些代码并将其移至另一个文件,但它不适用于实例。例如:如何从另一个文件访问类方法

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) 

如何从其它文件访问类的方法呢?

回答

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) 

几点:在全球范围内

  • 写这样的代码是不可取的。尝试包装你想在课堂上做什么。
  • 您定义的方法并不是真正的类方法。正如@JörgWMittag指出:they become private instance methods of Object
+0

谢谢。你也可以发布一个很好的教程,深入理解课程。 –

+0

“全局范围内的写入方法在一个名为main的对象上定义它们。” - 不,它们成为'Object'的'私有'实例方法,而不是'main'的单独方法(除了在IRB中,它们成为Object的公共实例方法)。 –

+0

感谢您澄清,@JörgWMittag,我会更新我的答案。 – Jesper

0

由于您的问题似乎是 - 据我可以告诉 - 更多的是Ruby的问题,而不是完全依赖硒,还有你可以采取另一种方法。

这是使用方法: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 
相关问题