Ruby Cucumber env.rb重构

时间:2016-10-18 13:23:07

标签: ruby selenium-webdriver cucumber

我创建了这个包含大量信息的env.rb文件。我喜欢重构它以使其更具可读性。也许将一些代码提取到一个单独的文件中或将一些代码移动到它自己的类或模块文件中。但我不知道该怎么做。

  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. 我尝试将下面的Cookie创建部分移动到单独的文件中,但是"浏览器"变量变得不确定。我不知道如何范围。

    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文件,但是不会使用那些需要创建的cookie来设置局部变量浏览器。

    #hooks
    Before do
      @browser = browser
    end
    
    at_exit do
      browser.close
    end
    
  4. 你会怎么做?你会使用文件或类或模块吗?请分享您的解决方案。

1 个答案:

答案 0 :(得分: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

(免责声明:我在此处输入此代码而未对其进行测试,因此可能需要进行调整)

此外,由于范围限定,您想要移动到$ ./manage.py shell > import myapp.models as mdls # 'mdls' or whatever you want, but short... > mdls.SomeModel.objects.get(pk=100) > # At this point save some changes in the model > reload(mdls) > mdls.SomeModel.objects.get(pk=100) 的两个钩子无法正确移动。另一方面,其他钩子通常可以放入单独的文件中。