2016-01-04 67 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 
相關問題