ruby_raider 0.1.5 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/lib/generators/files/automation_file_generator.rb +31 -130
  4. data/lib/generators/files/common_file_generator.rb +22 -150
  5. data/lib/generators/files/cucumber_file_generator.rb +22 -70
  6. data/lib/generators/files/file_generator.rb +7 -5
  7. data/lib/generators/files/helpers_file_generator.rb +46 -227
  8. data/lib/generators/files/rspec_file_generator.rb +19 -49
  9. data/lib/generators/projects/cucumber_project_generator.rb +17 -15
  10. data/lib/generators/projects/project_generator.rb +7 -5
  11. data/lib/generators/projects/rspec_project_generator.rb +13 -11
  12. data/lib/generators/templates/automation/abstract_component_template.rb +22 -0
  13. data/lib/generators/templates/automation/abstract_page_template.rb +48 -0
  14. data/lib/generators/templates/automation/component_template.rb +16 -0
  15. data/lib/generators/templates/automation/page_template.rb +51 -0
  16. data/lib/generators/templates/common/config_template.rb +9 -0
  17. data/lib/generators/templates/common/gemfile_template.rb +29 -0
  18. data/lib/generators/templates/common/rake_file_template.rb +16 -0
  19. data/lib/generators/templates/common/read_me_template.rb +104 -0
  20. data/lib/generators/templates/cucumber/env_template.rb +38 -0
  21. data/lib/generators/templates/cucumber/example_feature_template.rb +15 -0
  22. data/lib/generators/templates/cucumber/example_steps_template.rb +21 -0
  23. data/lib/generators/templates/helpers/allure_helper_template.rb +47 -0
  24. data/lib/generators/templates/helpers/browser_helper_template.rb +26 -0
  25. data/lib/generators/templates/helpers/driver_helper_template.rb +24 -0
  26. data/lib/generators/templates/helpers/pom_helper_template.rb +25 -0
  27. data/lib/generators/templates/helpers/raider_helper_template.rb +15 -0
  28. data/lib/generators/templates/helpers/selenium_helper_template.rb +42 -0
  29. data/lib/generators/templates/helpers/spec_helper_template.rb +35 -0
  30. data/lib/generators/templates/helpers/watir_helper_template.rb +24 -0
  31. data/lib/generators/templates/rspec/base_spec_template.rb +13 -0
  32. data/lib/generators/templates/rspec/example_spec_template.rb +33 -0
  33. data/lib/generators/templates/template.rb +14 -0
  34. data/ruby_raider.gemspec +1 -1
  35. data/spec/automation_file_generator_spec.rb +14 -5
  36. data/spec/common_file_generator_spec.rb +12 -3
  37. data/spec/cucumber_file_generator_spec.rb +26 -0
  38. data/spec/cucumber_project_generator_spec.rb +60 -0
  39. data/spec/helpers_file_generator_spec.rb +58 -16
  40. data/spec/rspec_file_generator_spec.rb +11 -2
  41. data/spec/rspec_project_generator_spec.rb +18 -9
  42. data/spec/spec_helper.rb +2 -12
  43. metadata +26 -3
  44. data/spec/menu_generator_spec.rb +0 -8
@@ -1,244 +1,63 @@
1
+ require_relative '../templates/helpers/allure_helper_template'
2
+ require_relative '../templates/helpers/browser_helper_template'
3
+ require_relative '../templates/helpers/driver_helper_template'
4
+ require_relative '../templates/helpers/pom_helper_template'
5
+ require_relative '../templates/helpers/raider_helper_template'
6
+ require_relative '../templates/helpers/spec_helper_template'
7
+ require_relative '../templates/helpers/selenium_helper_template'
8
+ require_relative '../templates/helpers/watir_helper_template'
1
9
  require_relative 'file_generator'
2
10
 
3
11
  module RubyRaider
4
12
  class HelpersFileGenerator < FileGenerator
5
- def self.generate_helper_files(name, automation, framework)
6
- path = framework == 'rspec' ? "#{name}/helpers" : "#{name}/features/support/helpers"
7
- generate_file('raider.rb', path, generate_raider_helper(automation, framework))
8
- generate_file('allure_helper.rb', path, generate_allure_helper(framework))
9
- generate_file('pom_helper.rb', path, generate_pom_helper)
10
- generate_file('spec_helper.rb', path, generate_spec_helper((automation))) if framework == 'rspec'
11
- if automation == 'watir'
12
- generate_file('watir_helper.rb', path, generate_watir_helper)
13
- generate_file('browser_helper.rb', path, generate_browser_helper)
14
- else
15
- generate_file('selenium_helper.rb', path, generate_selenium_helper)
16
- generate_file('driver_helper.rb', path, generate_driver_helper)
17
- end
18
- end
19
-
20
- def self.generate_raider_helper(automation, framework)
21
- spec = ERB.new <<~EOF
22
- module Raider
23
- #{"require_relative 'spec_helper'" if framework == 'rspec'}
24
- require_relative '#{automation}_helper'
25
- require_relative 'pom_helper'
26
- require_relative '#{automation == 'watir' ? 'browser_helper' : 'driver_helper'}'
27
- require_relative 'allure_helper'
13
+ class << self
14
+ def generate_helper_files(name, automation, framework)
15
+ path = framework == 'rspec' ? "#{name}/helpers" : "#{name}/features/support/helpers"
16
+ generate_raider_helper(automation, framework, path)
17
+ generate_allure_helper(framework, path)
18
+ generate_pom_helper(path)
19
+ generate_spec_helper(automation, path) if framework == 'rspec'
20
+ if automation == 'watir'
21
+ generate_watir_helper(path)
22
+ generate_browser_helper(path)
23
+ else
24
+ generate_selenium_helper(path)
25
+ generate_driver_helper(path)
28
26
  end
29
- EOF
30
-
31
- spec.result(binding)
32
- end
33
-
34
- def self.generate_allure_helper(framework)
35
- if framework == 'cucumber'
36
- gems = "require 'allure-cucumber'"
37
- allure = 'AllureCucumber'
38
- else
39
- gems = "require 'allure-ruby-commons'
40
- require 'allure-rspec'"
41
- allure = 'AllureRspec'
42
27
  end
43
- spec = ERB.new <<~EOF
44
- #{gems}
45
-
46
- module Raider
47
- module AllureHelper
48
- class << self
49
-
50
- def configure
51
- #{allure}.configure do |config|
52
- config.results_directory = 'allure-results'
53
- config.clean_results_directory = true
54
- end
55
- end
56
-
57
- def add_screenshot(screenshot_name)
58
- Allure.add_attachment(
59
- name: name,
60
- source: "File.open(allure-results/screenshots/\#{screenshot_name}.png)",
61
- type: Allure::ContentType::PNG,
62
- test_case: true
63
- )
64
- end
65
-
66
- #{
67
- if framework == 'rspec'
68
- 'def formatter
69
- AllureRspecFormatter
70
- end'
71
- end }
72
- end
73
- end
74
- end
75
- EOF
76
- spec.result(binding)
77
- end
78
-
79
- def self.generate_browser_helper
80
- spec = ERB.new <<~EOF
81
- require 'yaml'
82
- require 'selenium-webdriver'
83
- require 'watir'
84
- require 'webdrivers'
85
-
86
- module Raider
87
- module BrowserHelper
88
- class << self
89
- attr_reader :browser
90
-
91
- def new_browser
92
- config = YAML.load_file('config/config.yml')
93
- @browser = Watir::Browser.new config['browser']
94
- end
95
- end
96
- end
97
- end
98
-
99
- EOF
100
- spec.result(binding)
101
- end
102
-
103
- def self.generate_pom_helper
104
- spec = ERB.new <<~EOF
105
- module Raider
106
- module PomHelper
107
- def instance
108
- @instance ||= new
109
- end
110
-
111
- def method_missing(message, *args, &block)
112
- return super unless instance.respond_to?(message)
113
-
114
- instance.public_send(message, *args, &block)
115
- end
116
-
117
- def respond_to_missing?(method, *_args, &block)
118
- instance.respond_to?(method) || super
119
- end
120
- end
121
- end
122
- EOF
123
- spec.result(binding)
124
- end
125
-
126
- def self.generate_spec_helper(automation)
127
- spec = ERB.new <<~EOF
128
- require 'active_support/all'
129
- require 'rspec'
130
- require_relative 'allure_helper'
131
- require_relative '#{automation == 'watir' ? 'browser_helper' : 'driver_helper'}'
132
28
 
133
- module Raider
134
- module SpecHelper
135
-
136
- AllureHelper.configure
137
-
138
- RSpec.configure do |config|
139
- config.formatter = AllureHelper.formatter
140
- config.before(:each) do
141
- #{automation == 'watir' ? 'BrowserHelper.new_browser' : 'DriverHelper.new_driver'}
142
- end
143
-
144
- config.after(:each) do
145
- #{automation == 'watir' ? 'browser = BrowserHelper.browser' : 'driver = DriverHelper.driver'}
146
- example_name = self.class.descendant_filtered_examples.first.description
147
- status = self.class.descendant_filtered_examples.first.execution_result.status
148
- #{automation == 'watir' ? 'browser' : 'driver'}.save_screenshot("allure-results/screenshots/#\{example_name}.png") if status == :failed
149
- AllureHelper.add_screenshot example_name if status == :failed
150
- #{automation == 'watir' ? 'browser.quit' : 'driver.quit'}
151
- end
152
- end
153
- end
154
- end
155
- EOF
156
- spec.result(binding)
157
- end
158
-
159
- def self.generate_watir_helper
160
- spec = ERB.new <<~EOF
161
- require 'watir'
162
-
163
- module Raider
164
- module WatirHelper
165
- refine Watir::Element do
166
- def click_when_present
167
- wait_until_present
168
- self.click
169
- end
170
-
171
- def wait_until_present
172
- self.wait_until(&:present?)
173
- end
174
- end
175
- end
176
- end
177
- EOF
178
- spec.result(binding)
179
- end
180
-
181
- def self.generate_selenium_helper
182
- spec = ERB.new <<~EOF
183
- require 'selenium-webdriver'
184
- require_relative 'driver_helper'
185
-
186
- module Raider
187
- module SeleniumHelper
188
- def click_when_present
189
- # This is an example of an implicit wait in selenium
190
- wait = Selenium::WebDriver::Wait.new(timeout: 15)
191
- wait.until { present? }
192
- click
193
- end
194
-
195
- def select_by(key, value)
196
- # Creates new Select object to use the select by method
197
- dropdown = Selenium::WebDriver::Support::Select.new self
198
- dropdown.select_by(key, value)
199
- end
29
+ def generate_raider_helper(automation, framework, path)
30
+ generate_file('raider.rb', path,
31
+ RaiderHelperTemplate.new(automation: automation, framework: framework).parsed_body)
32
+ end
200
33
 
201
- def hover
202
- # Using actions to move the mouse over an element
203
- DriverHelper.driver.action.move_to(self).perform
204
- end
34
+ def generate_allure_helper(framework, path)
35
+ generate_file('allure_helper.rb', path, AllureHelperTemplate.new(framework: framework).parsed_body)
36
+ end
205
37
 
206
- # How to perform right click through the context click method
207
- def right_click
208
- DriverHelper.driver.action.context_click(self).perform
209
- end
210
- end
38
+ def generate_browser_helper(path)
39
+ generate_file('browser_helper.rb', path, BrowserHelperTemplate.new.parsed_body)
40
+ end
211
41
 
212
- # Here we are opening the selenium class and adding our custom method
213
- class Selenium::WebDriver::Element
214
- include SeleniumHelper
215
- end
216
- end
42
+ def generate_pom_helper(path)
43
+ generate_file('pom_helper.rb', path, PomHelperTemplate.new.parsed_body)
44
+ end
217
45
 
218
- EOF
219
- spec.result(binding)
220
- end
46
+ def generate_spec_helper(automation, path)
47
+ generate_file('spec_helper.rb', path, SpecHelperTemplate.new(automation: automation).parsed_body)
48
+ end
221
49
 
222
- def self.generate_driver_helper
223
- spec = ERB.new <<~EOF
224
- require 'selenium-webdriver'
225
- require 'watir'
226
- require 'webdrivers'
227
- require 'yaml'
50
+ def generate_watir_helper(path)
51
+ generate_file('watir_helper.rb', path, WatirHelperTemplate.new.parsed_body)
52
+ end
228
53
 
229
- module Raider
230
- module DriverHelper
231
- class << self
232
- attr_reader :driver
54
+ def generate_selenium_helper(path)
55
+ generate_file('selenium_helper.rb', path, SeleniumHelperTemplate.new.parsed_body)
56
+ end
233
57
 
234
- def new_driver
235
- @driver = Selenium::WebDriver.for :chrome
236
- end
237
- end
238
- end
239
- end
240
- EOF
241
- spec.result(binding)
58
+ def generate_driver_helper(path)
59
+ generate_file('driver_helper.rb', path, DriverHelperTemplate.new.parsed_body)
60
+ end
242
61
  end
243
62
  end
244
63
  end
@@ -1,58 +1,28 @@
1
+ require_relative '../templates/rspec/example_spec_template'
2
+ require_relative '../templates/rspec/base_spec_template'
3
+ require_relative 'automation_file_generator'
1
4
  require_relative 'common_file_generator'
2
5
  require_relative 'file_generator'
3
6
  require_relative 'helpers_file_generator'
4
- require_relative 'automation_file_generator'
5
7
 
6
8
  module RubyRaider
7
9
  class RspecFileGenerator < FileGenerator
8
- def self.generate_rspec_files(name, automation)
9
- CommonFileGenerator.generate_common_files(name, 'rspec')
10
- HelpersFileGenerator.generate_helper_files(name, automation, 'rspec')
11
- generate_file('login_page_spec.rb', "#{name}/spec", generate_example_spec)
12
- generate_file('base_spec.rb', "#{name}/spec", generate_base_spec)
13
- AutomationFileGenerator.generate_automation_files(name, automation, 'rspec')
14
- end
15
-
16
- def self.generate_example_spec
17
- spec = ERB.new <<~EOF
18
- require_relative 'base_spec'
19
- require_relative '../page_objects/pages/login_page'
20
-
21
- class LoginSpec < BaseSpec
22
- context 'On the Login Page' do
23
-
24
- before(:each) do
25
- LoginPage.visit
26
- end
27
-
28
- describe 'A user can' do
29
- it 'login with the right credentials', :JIRA_123 do
30
- LoginPage.login('aguspe', '12341234')
31
- expect(LoginPage.header.customer_name).to eq 'Welcome back Agustin'
32
- end
33
- end
34
-
35
- describe 'A user cannot' do
36
- it 'login with the wrong credentials', :JIRA_123 do
37
- LoginPage.login('aguspe', 'wrongPassword')
38
- expect(LoginPage.header.customer_name).to be_empty
39
- end
40
- end
41
- end
42
- end
43
- EOF
44
- spec.result(binding)
45
- end
46
-
47
- def self.generate_base_spec
48
- spec = ERB.new <<~EOF
49
- require_relative '../helpers/raider'
50
-
51
- class BaseSpec
52
- include Raider::SpecHelper
53
- end
54
- EOF
55
- spec.result(binding)
10
+ class << self
11
+ def generate_rspec_files(name, automation)
12
+ AutomationFileGenerator.generate_automation_files(name, automation, 'rspec')
13
+ CommonFileGenerator.generate_common_files(name, 'rspec')
14
+ HelpersFileGenerator.generate_helper_files(name, automation, 'rspec')
15
+ generate_base_spec(name)
16
+ generate_example_spec(name)
17
+ end
18
+
19
+ def generate_example_spec(name)
20
+ generate_file('login_page_spec.rb', "#{name}/spec", ExampleSpecTemplate.new.parsed_body)
21
+ end
22
+
23
+ def generate_base_spec(name)
24
+ generate_file('base_spec.rb', "#{name}/spec", BaseSpecTemplate.new.parsed_body)
25
+ end
56
26
  end
57
27
  end
58
28
  end
@@ -3,22 +3,24 @@ require_relative 'project_generator'
3
3
 
4
4
  module RubyRaider
5
5
  class CucumberProjectGenerator < ProjectGenerator
6
- def self.generate_cucumber_project(name, automation: 'watir')
7
- cucumber_folder_structure(name)
8
- CucumberFileGenerator.generate_cucumber_files(name, automation)
9
- ProjectGenerator.install_gems(name)
10
- end
6
+ class << self
7
+ def generate_cucumber_project(name, automation: 'watir')
8
+ cucumber_folder_structure(name)
9
+ CucumberFileGenerator.generate_cucumber_files(name, automation)
10
+ ProjectGenerator.install_gems(name)
11
+ end
11
12
 
12
- def self.cucumber_folder_structure(name)
13
- Dir.mkdir name.to_s
14
- folders = %w[features config page_objects allure-results]
15
- create_children_folders("#{name}", folders)
16
- folders = %w[step_definitions support]
17
- create_children_folders("#{name}/features", folders)
18
- Dir.mkdir "#{name}/features/support/helpers"
19
- folders = %w[abstract pages components]
20
- create_children_folders("#{name}/page_objects", folders)
21
- Dir.mkdir "#{name}/allure-results/screenshots"
13
+ def cucumber_folder_structure(name)
14
+ Dir.mkdir name.to_s
15
+ folders = %w[features config page_objects allure-results]
16
+ create_children_folders("#{name}", folders)
17
+ folders = %w[step_definitions support]
18
+ create_children_folders("#{name}/features", folders)
19
+ Dir.mkdir "#{name}/features/support/helpers"
20
+ folders = %w[abstract pages components]
21
+ create_children_folders("#{name}/page_objects", folders)
22
+ Dir.mkdir "#{name}/allure-results/screenshots"
23
+ end
22
24
  end
23
25
  end
24
26
  end
@@ -1,11 +1,13 @@
1
1
  module RubyRaider
2
2
  class ProjectGenerator
3
- def self.create_children_folders(parent, folders)
4
- folders.each { |folder| Dir.mkdir "#{parent}/#{folder}" }
5
- end
3
+ class << self
4
+ def create_children_folders(parent, folders)
5
+ folders.each { |folder| Dir.mkdir "#{parent}/#{folder}" }
6
+ end
6
7
 
7
- def self.install_gems(name)
8
- system "cd #{name} && gem install bundler && bundle install"
8
+ def install_gems(name)
9
+ system "cd #{name} && gem install bundler && bundle install"
10
+ end
9
11
  end
10
12
  end
11
13
  end
@@ -3,18 +3,20 @@ require_relative '../files/rspec_file_generator'
3
3
 
4
4
  module RubyRaider
5
5
  class RspecProjectGenerator < ProjectGenerator
6
- def self.generate_rspec_project(name, automation: 'watir')
7
- rspec_folder_structure(name)
8
- RspecFileGenerator.generate_rspec_files(name, automation)
9
- ProjectGenerator.install_gems(name)
10
- end
6
+ class << self
7
+ def generate_rspec_project(name, automation: 'watir')
8
+ rspec_folder_structure(name)
9
+ RspecFileGenerator.generate_rspec_files(name, automation)
10
+ ProjectGenerator.install_gems(name)
11
+ end
11
12
 
12
- def self.rspec_folder_structure(name)
13
- Dir.mkdir name.to_s
14
- folders = %w[config data page_objects helpers spec]
15
- create_children_folders(name, folders)
16
- pages = %w[pages components abstract]
17
- create_children_folders("#{name}/page_objects", pages)
13
+ def rspec_folder_structure(name)
14
+ Dir.mkdir name.to_s
15
+ folders = %w[config data page_objects helpers spec]
16
+ create_children_folders(name, folders)
17
+ pages = %w[pages components abstract]
18
+ create_children_folders("#{name}/page_objects", pages)
19
+ end
18
20
  end
19
21
  end
20
22
  end
@@ -0,0 +1,22 @@
1
+ require_relative '../template'
2
+
3
+ class AbstractComponentTemplate < Template
4
+ def body
5
+ raider = if @framework == 'rspec'
6
+ "require_relative '../../helpers/raider'"
7
+ else
8
+ "require_relative '../../features/support/helpers/raider'"
9
+ end
10
+
11
+ <<~EOF
12
+ #{raider}
13
+
14
+ class AbstractComponent
15
+
16
+ def initialize(component)
17
+ @component = component
18
+ end
19
+ end
20
+ EOF
21
+ end
22
+ end
@@ -0,0 +1,48 @@
1
+ require_relative '../template'
2
+
3
+ class AbstractPageTemplate < Template
4
+ def body
5
+ browser = "def browser
6
+ Raider::BrowserHelper.browser
7
+ end"
8
+ driver = "def driver
9
+ Raider::DriverHelper.driver
10
+ end"
11
+
12
+ visit = @automation == 'watir' ? 'browser.goto full_url(page.first)' : 'driver.navigate.to full_url(page.first)'
13
+ raider = if @framework == 'rspec'
14
+ "require_relative '../../helpers/raider'"
15
+ else
16
+ "require_relative '../../features/support/helpers/raider'"
17
+ end
18
+
19
+ <<~EOF
20
+ require 'rspec'
21
+ #{raider}
22
+
23
+ class AbstractPage
24
+
25
+ include RSpec::Matchers
26
+ extend Raider::PomHelper
27
+
28
+ #{@automation == 'watir' ? browser : driver}
29
+
30
+ def visit(*page)
31
+ #{visit}
32
+ end
33
+
34
+ def full_url(*page)
35
+ "#\{base_url}#\{url(*page)}"
36
+ end
37
+
38
+ def base_url
39
+ 'https://automationteststore.com/'
40
+ end
41
+
42
+ def url(_page)
43
+ raise 'Url must be defined on child pages'
44
+ end
45
+ end
46
+ EOF
47
+ end
48
+ end
@@ -0,0 +1,16 @@
1
+ require_relative '../template'
2
+
3
+ class ComponentTemplate < Template
4
+ def body
5
+ <<~EOF
6
+ require_relative '../abstract/abstract_component'
7
+
8
+ class HeaderComponent < AbstractComponent
9
+
10
+ def customer_name
11
+ @component.text
12
+ end
13
+ end
14
+ EOF
15
+ end
16
+ end
@@ -0,0 +1,51 @@
1
+ require_relative '../template'
2
+
3
+ class PageTemplate < Template
4
+ def body
5
+ element = @automation == 'watir' ? 'browser.element' : 'driver.find_element'
6
+ helper = @automation == 'watir' ? 'Raider::WatirHelper' : 'Raider::SeleniumHelper'
7
+
8
+ <<~EOF
9
+ require_relative '../abstract/abstract_page'
10
+ require_relative '../components/header_component'
11
+
12
+ class LoginPage < AbstractPage
13
+ using #{helper}
14
+
15
+ def url(_page)
16
+ 'index.php?rt=account/login'
17
+ end
18
+
19
+ # Actions
20
+
21
+ def login(username, password)
22
+ username_field.send_keys username
23
+ password_field.send_keys password
24
+ login_button.click_when_present
25
+ end
26
+
27
+ # Components
28
+
29
+ def header
30
+ HeaderComponent.new(#{element}(class: 'menu_text'))
31
+ end
32
+
33
+ private
34
+
35
+ # Elements
36
+
37
+ def username_field
38
+ #{element}(id: 'loginFrm_loginname')
39
+ end
40
+
41
+ def password_field
42
+ #{element}(id: 'loginFrm_password')
43
+ end
44
+
45
+ def login_button
46
+ #{element}(xpath: "//button[@title='Login']")
47
+ end
48
+ end
49
+ EOF
50
+ end
51
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../template'
2
+
3
+ class ConfigTemplate < Template
4
+ def body
5
+ <<~EOF
6
+ browser: :chrome
7
+ EOF
8
+ end
9
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../template'
2
+
3
+ class GemfileTemplate < Template
4
+ def body
5
+ if @framework == 'cucumber'
6
+ allure_cucumber = "gem 'allure-cucumber'"
7
+ rspec = "gem 'rspec'"
8
+ end
9
+
10
+ <<~EOF
11
+ # frozen_string_literal: true
12
+
13
+ source 'https://rubygems.org'
14
+
15
+ gem 'activesupport'
16
+ gem 'allure-rspec'
17
+ gem 'allure-ruby-commons'
18
+ #{allure_cucumber}
19
+ gem 'parallel_split_test'
20
+ gem 'parallel_tests'
21
+ gem 'rake'
22
+ gem '#{@framework}'
23
+ #{rspec}
24
+ gem 'selenium-webdriver'
25
+ gem 'watir'
26
+ gem 'webdrivers'
27
+ EOF
28
+ end
29
+ end
@@ -0,0 +1,16 @@
1
+ require_relative '../template'
2
+
3
+ class RakeFileTemplate < Template
4
+ def body
5
+ <<~EOF
6
+ require 'yaml'
7
+
8
+ desc 'Selects browser for automation run'
9
+ task :select_browser, [:browser] do |_t, args|
10
+ config = YAML.load_file('config/config.yml')
11
+ config['browser'] = args.browser
12
+ File.write('config/config.yml', config.to_yaml)
13
+ end
14
+ EOF
15
+ end
16
+ end