2016-10-18 2 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

Если 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 

, а затем внутри env.rb, вызовите

BrowserConfigurator.create_required_cookies(browser) 

(отказ от ответственности: я ввел этот код здесь без тестирования, поэтому может потребоваться настройка)

Кроме того, два крючка, которые вы хотели переместить на hooks.rb, не могут быть перемещены точно из-за sc Опанье. С другой стороны, другие крючки обычно можно помещать в отдельный файл.

+0

Я поставил «require File.expand_path (File.dirname (__ FILE __) + '/ helpers/browser_configurator')" в файле env.rb; переменные экземпляра cookie. Оно работает! Спасибо, Дмитрий! – fongfong

Смежные вопросы