2016-10-18 12 views
0

私はこのenv.rbファイルを大量の情報で作成しました。私はそれをより読みやすくするためにリファクタリングするのが好きです。たぶん、コードの一部を別のファイルに抽出するか、コードの一部を独自のクラスまたはモジュールファイルに移動することができます。しかし、私はそれをどうやって行うのか分かりません。Ruby Cucumber env.rb refactor

  1. env.rb

    require 'page-object' 
    require 'page-object/page_factory' 
    require 'active_record' 
    
    World(PageObject::PageFactory) 
    
    current_directory = File.dirname __FILE__ 
    
    web_config_file = current_directory + '/../../config/config.yml' 
    web_config = YAML.load_file web_config_file 
    
    BASE_URL = web_config['testApplicationBaseURL'] 
    browser = Selenium::WebDriver.for :firefox 
    
    # Creating two cookies to the browser to avoid a dialog to appear 
    browser.navigate.to(BASE_URL) 
    
    visited_before_cookie = { 
          :name => 'visitedBefore', 
          :value => 'yes', 
          :path => '/', 
          :domain => 'xxxx.net', 
          :secure => false 
    } 
    
    saw_browser_suggestion_cookie = { 
          :name => 'sawBrowserSuggestion', 
          :value => 'yes', 
          :path => '/', 
          :domain => 'xxxx.net', 
          :secure => false 
    } 
    
    browser.manage.add_cookie(visited_before_cookie) 
    browser.manage.add_cookie(saw_browser_suggestion_cookie) 
    
    #hooks 
    Before do 
        @browser = browser 
    end 
    
    at_exit do 
        browser.close 
    end 
    
  2. 私は別のファイルに以下のクッキー作成ピースを移動しようとしましたが、「ブラウザ」の変数は未定義となりました。私はそれをどのようにスコープするのか分からない。

    browser = Selenium::WebDriver.for :firefox 
    
    # Creating two cookies to the browser to avoid a dialog to appear 
    browser.navigate.to(BASE_URL) 
    
    visited_before_cookie = { 
          :name => 'visitedBefore', 
          :value => 'yes', 
          :path => '/', 
          :domain => 'xxxx.net', 
          :secure => false 
    } 
    
    saw_browser_suggestion_cookie = { 
          :name => 'sawBrowserSuggestion', 
          :value => 'yes', 
          :path => '/', 
          :domain => 'xxxx.net', 
          :secure => false 
    } 
    
    browser.manage.add_cookie(visited_before_cookie) 
    browser.manage.add_cookie(saw_browser_suggestion_cookie) 
    
  3. 私は、ファイルをhooks.rbするフックを動かすことについて考えたが、その後、ローカル変数のブラウザを作成する必要があり、これらのクッキーを使用して設定されることはありません。

    #hooks 
    Before do 
        @browser = browser 
    end 
    
    at_exit do 
        browser.close 
    end 
    
  4. あなたはどのようにしますか?ファイルやクラス、モジュールを使用しますか?あなたの解決策を教えてください。

答えて

0

あなたが最初にトップレベルのブロックにあなたがenv.rbでする方法をbrowserを定義した場合、あなたは(つまり、他のスクリプトから実行)他のファイルで定義されていたコードの引数としてそれを渡す必要があります。

だから、例えば、(必ずしも素晴らしい例)のために、

BrowserConfigurator.create_required_cookies(browser) 

(免責事項を呼び出して、env.rb内側その後、

module BrowserConfigurator 

    visited_before_cookie = { 
     :name => 'visitedBefore', 
     :value => 'yes', 
     :path => '/', 
     :domain => 'xxxx.net', 
     :secure => false 
    } 

    saw_browser_suggestion_cookie = { 
      :name => 'sawBrowserSuggestion', 
      :value => 'yes', 
      :path => '/', 
      :domain => 'xxxx.net', 
      :secure => false 
    } 

    def self.create_required_cookies(browser) 
    browser.manage.add_cookie(visited_before_cookie) 
    browser.manage.add_cookie(saw_browser_suggestion_cookie) 
    end 
end 

などのモジュールを作成することができます。私はこのコードを入力ここでテストすることなく調整する必要があります)

また、hooks.rbに移動したい2つのフックは、sc oping。一方、他のフックは、通常、別のファイルに置くことができます。

+0

ファイルenv.rbに「require File.expand_path(File.dirname(__ FILE __)+ '/ helpers/browser_configurator」)を入れます。 cookie変数のインスタンス変数を作成しました。できます!ドミトリーありがとう! – fongfong

関連する問題