ruby_raider 0.1.1 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a8d336aefa187b06c4299321d8a8a4b66235dfd14974845e70006632a6450899
4
- data.tar.gz: 10228a61500f16e12590d59f84363b7b85d186e79bf1cfb2967b63ae7788d00b
3
+ metadata.gz: 1862a69fc2192fafab5d76cacff2bfa956bfdec819c04897f80d689672962655
4
+ data.tar.gz: 190c50a7c66fbde69c04f2c35d6756a8737cbb529e15e5227163c99f8893c06f
5
5
  SHA512:
6
- metadata.gz: b87195baaa2521f54deddc1c6e62ebf04a52f13f6e8880c5071f5a6ea43e3282ee14b7d121a98eee8435eb2d584fa4a5190675771eab8061409d7aeffb3d1e54
7
- data.tar.gz: '0425969814d7f081fcacb71b510d5b5aa79d195a53511ab1b3028be602212533ad74e0150b53091ebbc43e27161c535e68c819ce483ffa8d2e423a9c1f2e814a'
6
+ metadata.gz: 5acde20915a1ecfa077e30b7aebe197e207c8216e85339be9f01e7985d989450698965eae5d0019aa49f6098bdca42a5e7ecd7e3652a274410e142bcd1f942fc
7
+ data.tar.gz: '08a74887fa8efb62838305aedcf99240b7c234789af3f3ec1dbb098b0a59404feb2a998146234736b41a4847ad163ceea44d88b34d0f611f73b92e64395ca2ad'
data/.gitignore CHANGED
@@ -1 +1,3 @@
1
- ruby_raider-*.gem
1
+ ruby_raider-*.gem
2
+ .idea/
3
+ ruby_raider.iml
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
data/README.md CHANGED
@@ -1,9 +1,23 @@
1
1
  # ruby_raider
2
2
  This is a gem to make setup and start of UI automation projects easier
3
3
 
4
- In order to run ruby raider you need to run the executable,
5
- after you can select the automation framework of your choice and the test framework of your choice.
4
+ Just do:
6
5
 
7
- Currently we only support Watir with Rspec.
6
+ **gem install ruby_raider**
7
+
8
+ then do:
9
+
10
+ **raider [name_of_project]**
11
+
12
+ and you will have a new project in the folder you are in
13
+
14
+ Currently we only support:
15
+
16
+ * Gerating a Selenium with Rspec framework
17
+ * Gerating a Watir with Rspec framework
8
18
 
9
19
  We have only tested this in mac and linux, so it works in both platforms.
20
+
21
+ If you wanna follow the development progress
22
+
23
+ https://trello.com/b/Nj7UPy0w/ruby-raider
data/bin/raider CHANGED
File without changes
@@ -0,0 +1,137 @@
1
+ require_relative 'file_generator'
2
+
3
+ module RubyRaider
4
+ class AutomationFileGenerator < FileGenerator
5
+ def self.generate_automation_files(name, automation, framework)
6
+ generate_file('abstract_page.rb', "#{name}/page_objects/abstract", abstract_page(automation, framework))
7
+ generate_file('abstract_component.rb', "#{name}/page_objects/abstract", abstract_component(framework))
8
+ generate_file('login_page.rb', "#{name}/page_objects/pages", example_page(automation))
9
+ generate_file('header_component.rb', "#{name}/page_objects/components", example_component)
10
+ end
11
+
12
+ def self.example_page(automation)
13
+ element = automation == 'watir' ? 'browser.element' : 'driver.find_element'
14
+ page_file = ERB.new <<~EOF
15
+ require_relative '../abstract/abstract_page'
16
+ require_relative '../components/header_component'
17
+
18
+ class LoginPage < AbstractPage
19
+
20
+ using #{automation == 'watir' ? 'Raider::WatirHelper' : 'Raider::SeleniumHelper'}
21
+
22
+ def url(_page)
23
+ 'index.php?rt=account/login'
24
+ end
25
+
26
+ # Actions
27
+
28
+ def login(username, password)
29
+ username_field.send_keys username
30
+ password_field.send_keys password
31
+ login_button.click_when_present
32
+ end
33
+
34
+ # Components
35
+
36
+ def header
37
+ HeaderComponent.new(#{element}(class: 'menu_text'))
38
+ end
39
+
40
+ private
41
+
42
+ # Elements
43
+
44
+ def username_field
45
+ #{element}(id: 'loginFrm_loginname')
46
+ end
47
+
48
+ def password_field
49
+ #{element}(id: 'loginFrm_password')
50
+ end
51
+
52
+ def login_button
53
+ #{element}(xpath: "//button[@title='Login']")
54
+ end
55
+ end
56
+ EOF
57
+ page_file.result(binding)
58
+ end
59
+
60
+ def self.abstract_page(automation, framework)
61
+ browser = "def browser
62
+ Raider::BrowserHelper.browser
63
+ end"
64
+ driver = "def driver
65
+ Raider::DriverHelper.driver
66
+ end"
67
+ visit = automation == 'watir' ? 'browser.goto full_url(page.first)' : 'driver.navigate.to full_url(page.first)'
68
+ raider = if framework == 'rspec'
69
+ "require_relative '../../helpers/raider'"
70
+ else
71
+ "require_relative '../../features/support/helpers/raider'"
72
+ end
73
+ abstract_file = ERB.new <<~EOF
74
+ require 'rspec'
75
+ #{raider}
76
+
77
+ class AbstractPage
78
+
79
+ include RSpec::Matchers
80
+ extend Raider::PomHelper
81
+
82
+ #{automation == 'watir' ? browser : driver}
83
+
84
+ def visit(*page)
85
+ #{visit}
86
+ end
87
+
88
+ def full_url(*page)
89
+ "#\{base_url}#\{url(*page)}"
90
+ end
91
+
92
+ def base_url
93
+ 'https://automationteststore.com/'
94
+ end
95
+
96
+ def url(_page)
97
+ raise 'Url must be defined on child pages'
98
+ end
99
+ end
100
+ EOF
101
+ abstract_file.result(binding)
102
+ end
103
+
104
+ def self.example_component
105
+ page_file = ERB.new <<~EOF
106
+ require_relative '../abstract/abstract_component'
107
+
108
+ class HeaderComponent < AbstractComponent
109
+
110
+ def customer_name
111
+ @component.text
112
+ end
113
+ end
114
+ EOF
115
+ page_file.result(binding)
116
+ end
117
+
118
+ def self.abstract_component(framework)
119
+ raider = if framework == 'rspec'
120
+ "require_relative '../../helpers/raider'"
121
+ else
122
+ "require_relative '../../features/support/helpers/raider'"
123
+ end
124
+ abstract_file = ERB.new <<~EOF
125
+ #{raider}
126
+
127
+ class AbstractComponent
128
+
129
+ def initialize(component)
130
+ @component = component
131
+ end
132
+ end
133
+ EOF
134
+ abstract_file.result(binding)
135
+ end
136
+ end
137
+ end
@@ -2,10 +2,11 @@ require_relative 'file_generator'
2
2
 
3
3
  module RubyRaider
4
4
  class CommonFileGenerator < FileGenerator
5
- def self.generate_common_files(name)
5
+ def self.generate_common_files(name, framework)
6
6
  generate_file('config.yml', "#{name}/config", config_file)
7
7
  generate_file('Rakefile', name.to_s, rake_file)
8
8
  generate_file('Readme.md', name.to_s, readme_file)
9
+ generate_file('Gemfile', name.to_s, gemfile_template((framework)))
9
10
  end
10
11
 
11
12
  def self.readme_file
@@ -130,5 +131,32 @@ module RubyRaider
130
131
  EOF
131
132
  rake_file.result(binding)
132
133
  end
134
+
135
+ def self.gemfile_template(framework)
136
+ if framework == 'cucumber'
137
+ allure_cucumber = "gem 'allure-cucumber'"
138
+ rspec = "gem 'rspec'"
139
+ end
140
+
141
+ gemfile = ERB.new <<~EOF
142
+ # frozen_string_literal: true
143
+
144
+ source 'https://rubygems.org'
145
+
146
+ gem 'activesupport'
147
+ gem 'allure-rspec'
148
+ gem 'allure-ruby-commons'
149
+ #{allure_cucumber}
150
+ gem 'parallel_split_test'
151
+ gem 'parallel_tests'
152
+ gem 'rake'
153
+ gem '#{framework}'
154
+ #{rspec}
155
+ gem 'selenium-webdriver'
156
+ gem 'watir'
157
+ gem 'webdrivers'
158
+ EOF
159
+ gemfile.result(binding)
160
+ end
133
161
  end
134
162
  end
@@ -0,0 +1,81 @@
1
+ require_relative 'file_generator'
2
+
3
+ module RubyRaider
4
+ class CucumberFileGenerator < FileGenerator
5
+ def self.generate_cucumber_files(name, automation)
6
+ CommonFileGenerator.generate_common_files(name, 'cucumber')
7
+ HelpersFileGenerator.generate_helper_files(name, automation, 'cucumber')
8
+ generate_file('login.feature', "#{name}/features", example_feature)
9
+ generate_file('login_steps.rb', "#{name}/features/step_definitions", example_steps)
10
+ generate_file('env.rb', "#{name}/features/support", env(automation))
11
+ AutomationFileGenerator.generate_automation_files(name, automation, 'framework')
12
+ end
13
+
14
+ def self.example_feature
15
+ gemfile = ERB.new <<~EOF
16
+ Feature: Login Page
17
+
18
+ Scenario: A user can login
19
+ Given I'm a registered user on the login page
20
+ When I login with my credentials
21
+ Then I can see the main page
22
+
23
+ EOF
24
+ gemfile.result(binding)
25
+ end
26
+
27
+ def self.example_steps
28
+ gemfile = ERB.new <<~EOF
29
+ require_relative '../../page_objects/pages/login_page'
30
+
31
+ Given("I'm a registered user on the login page") do
32
+ LoginPage.visit
33
+ end
34
+
35
+ When('I login with my credentials') do
36
+ LoginPage.login('aguspe', '12341234')
37
+ end
38
+
39
+ When('I can see the main page') do
40
+ expect(LoginPage.header.customer_name).to eq 'Welcome back Agustin'
41
+ end
42
+ EOF
43
+ gemfile.result(binding)
44
+ end
45
+
46
+ def self.env(automation)
47
+ if automation == 'watir'
48
+ helper = 'helpers/browser_helper'
49
+ browser = 'Raider::BrowserHelper.new_browser'
50
+ get_browser = 'browser = Raider::BrowserHelper.new_browser'
51
+ screenshot = 'browser.screenshot.save("allure-results/screenshots/#{scenario.name}.png")'
52
+ quit = 'browser.quit'
53
+ else
54
+ helper = 'helpers/driver_helper'
55
+ browser = 'Raider::DriverHelper.new_driver'
56
+ get_browser = 'driver = Raider::DriverHelper.driver'
57
+ screenshot = 'driver.save_screenshot("allure-results/screenshots/#{scenario.name}.png")'
58
+ quit = 'driver.quit'
59
+ end
60
+
61
+ gemfile = ERB.new <<~EOF
62
+ require 'active_support/all'
63
+ require_relative 'helpers/allure_helper'
64
+ require_relative '#{helper}'
65
+
66
+ Before do
67
+ Raider::AllureHelper.configure
68
+ #{browser}
69
+ end
70
+
71
+ After do |scenario|
72
+ #{get_browser}
73
+ #{screenshot}
74
+ Raider::AllureHelper.add_screenshot(scenario.name)
75
+ #{quit}
76
+ end
77
+ EOF
78
+ gemfile.result(binding)
79
+ end
80
+ end
81
+ end
@@ -2,56 +2,73 @@ require_relative 'file_generator'
2
2
 
3
3
  module RubyRaider
4
4
  class HelpersFileGenerator < FileGenerator
5
- def self.generate_helper_files(name)
6
- generate_file('raider.rb', "#{name}/helpers", generate_raider_helper)
7
- generate_file('allure_helper.rb', "#{name}/helpers", generate_allure_helper)
8
- generate_file('browser_helper.rb', "#{name}/helpers", generate_browser_helper)
9
- generate_file('pom_helper.rb', "#{name}/helpers", generate_pom_helper)
10
- generate_file('watir_helper.rb', "#{name}/helpers", generate_watir_helper)
11
- generate_file('spec_helper.rb', "#{name}/helpers", generate_spec_helper)
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
12
18
  end
13
19
 
14
- def self.generate_raider_helper
20
+ def self.generate_raider_helper(automation, framework)
15
21
  spec = ERB.new <<~EOF
16
22
  module Raider
17
- require_relative 'spec_helper'
18
- require_relative 'watir_helper'
23
+ #{"require_relative 'spec_helper'" if framework == 'rspec'}
24
+ require_relative '#{automation}_helper'
19
25
  require_relative 'pom_helper'
20
- require_relative 'browser_helper'
26
+ require_relative '#{automation == 'watir' ? 'browser_helper' : 'driver_helper'}'
21
27
  require_relative 'allure_helper'
22
28
  end
23
29
  EOF
30
+
24
31
  spec.result(binding)
25
32
  end
26
33
 
27
- def self.generate_allure_helper
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
+ end
28
43
  spec = ERB.new <<~EOF
29
- require 'allure-ruby-commons'
30
- require 'allure-rspec'
44
+ #{gems}
31
45
 
32
46
  module Raider
33
47
  module AllureHelper
34
48
  class << self
35
49
 
36
50
  def configure
37
- AllureRspec.configure do |config|
51
+ #{allure}.configure do |config|
38
52
  config.results_directory = 'allure-results'
39
53
  config.clean_results_directory = true
40
54
  end
41
55
  end
42
56
 
43
- def add_screenshot(name)
57
+ def add_screenshot(screenshot_name)
44
58
  Allure.add_attachment(
45
59
  name: name,
46
- source: File.open("allure-results/screenshots/#{name}.png"),
60
+ source: "File.open(allure-results/screenshots/\#{screenshot_name}.png)",
47
61
  type: Allure::ContentType::PNG,
48
62
  test_case: true
49
63
  )
50
64
  end
51
65
 
52
- def formatter
53
- AllureRspecFormatter
54
- end
66
+ #{
67
+ if framework == 'rspec'
68
+ 'def formatter
69
+ AllureRspecFormatter
70
+ end'
71
+ end }
55
72
  end
56
73
  end
57
74
  end
@@ -78,6 +95,7 @@ module RubyRaider
78
95
  end
79
96
  end
80
97
  end
98
+
81
99
  EOF
82
100
  spec.result(binding)
83
101
  end
@@ -105,12 +123,12 @@ module RubyRaider
105
123
  spec.result(binding)
106
124
  end
107
125
 
108
- def self.generate_spec_helper
126
+ def self.generate_spec_helper(automation)
109
127
  spec = ERB.new <<~EOF
110
128
  require 'active_support/all'
111
129
  require 'rspec'
112
130
  require_relative 'allure_helper'
113
- require_relative 'browser_helper'
131
+ require_relative '#{automation == 'watir' ? 'browser_helper' : 'driver_helper'}'
114
132
 
115
133
  module Raider
116
134
  module SpecHelper
@@ -120,16 +138,16 @@ module RubyRaider
120
138
  RSpec.configure do |config|
121
139
  config.formatter = AllureHelper.formatter
122
140
  config.before(:each) do
123
- BrowserHelper.new_browser
141
+ #{automation == 'watir' ? 'BrowserHelper.new_browser' : 'DriverHelper.new_driver'}
124
142
  end
125
143
 
126
144
  config.after(:each) do
127
- browser = BrowserHelper.browser
145
+ #{automation == 'watir' ? 'browser = BrowserHelper.browser' : 'driver = DriverHelper.driver'}
128
146
  example_name = self.class.descendant_filtered_examples.first.description
129
147
  status = self.class.descendant_filtered_examples.first.execution_result.status
130
- browser.save_screenshot("allure-results/screenshots/#\{example_name}.png") if status == :failed
148
+ #{automation == 'watir' ? 'browser' : 'driver'}.save_screenshot("allure-results/screenshots/#\{example_name}.png") if status == :failed
131
149
  AllureHelper.add_screenshot example_name if status == :failed
132
- browser.quit
150
+ #{automation == 'watir' ? 'browser.quit' : 'driver.quit'}
133
151
  end
134
152
  end
135
153
  end
@@ -159,5 +177,68 @@ module RubyRaider
159
177
  EOF
160
178
  spec.result(binding)
161
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
200
+
201
+ def hover
202
+ # Using actions to move the mouse over an element
203
+ DriverHelper.driver.action.move_to(self).perform
204
+ end
205
+
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
211
+
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
217
+
218
+ EOF
219
+ spec.result(binding)
220
+ end
221
+
222
+ def self.generate_driver_helper
223
+ spec = ERB.new <<~EOF
224
+ require 'selenium-webdriver'
225
+ require 'watir'
226
+ require 'webdrivers'
227
+ require 'yaml'
228
+
229
+ module Raider
230
+ module DriverHelper
231
+ class << self
232
+ attr_reader :driver
233
+
234
+ def new_driver
235
+ @driver = Selenium::WebDriver.for :chrome
236
+ end
237
+ end
238
+ end
239
+ end
240
+ EOF
241
+ spec.result(binding)
242
+ end
162
243
  end
163
244
  end
@@ -1,20 +1,16 @@
1
1
  require_relative 'common_file_generator'
2
2
  require_relative 'file_generator'
3
3
  require_relative 'helpers_file_generator'
4
- require_relative 'watir_file_generator'
4
+ require_relative 'automation_file_generator'
5
5
 
6
6
  module RubyRaider
7
7
  class RspecFileGenerator < FileGenerator
8
8
  def self.generate_rspec_files(name, automation)
9
- if automation == 'watir'
10
- CommonFileGenerator.generate_common_files(name)
11
- WatirFileGenerator.generate_watir_files(name)
12
- HelpersFileGenerator.generate_helper_files(name)
13
- generate_file('login_page_spec.rb', "#{name}/spec", generate_example_spec)
14
- generate_file('base_spec.rb', "#{name}/spec", generate_base_spec)
15
- else
16
- pp 'here goes selenium'
17
- end
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')
18
14
  end
19
15
 
20
16
  def self.generate_example_spec
@@ -32,13 +28,14 @@ module RubyRaider
32
28
  describe 'A user can' do
33
29
  it 'login with the right credentials', :JIRA_123 do
34
30
  LoginPage.login('aguspe', '12341234')
35
- expect(LoginPage.customer_name).to eq 'Welcome back Agustin'
31
+ expect(LoginPage.header.customer_name).to eq 'Welcome back Agustin'
36
32
  end
37
33
  end
38
34
 
39
35
  describe 'A user cannot' do
40
36
  it 'login with the wrong credentials', :JIRA_123 do
41
- expect(LoginPage.customer_name).to eq 'Login or register'
37
+ LoginPage.login('aguspe', 'wrongPassword')
38
+ expect(LoginPage.header.customer_name).to be_empty
42
39
  end
43
40
  end
44
41
  end
@@ -1,4 +1,5 @@
1
1
  require 'highline'
2
+ require_relative '../generators/projects/cucumber_project_generator'
2
3
  require_relative '../generators/projects/rspec_project_generator'
3
4
 
4
5
  module RubyRaider
@@ -7,8 +8,8 @@ module RubyRaider
7
8
  cli = HighLine.new
8
9
  cli.choose do |menu|
9
10
  menu.prompt = 'Please select your automation framework'
10
- menu.choice(:Selenium) { 'We are still working on supporting this' }
11
- menu.choice(:Watir) {choose_test_framework('watir', project_name) }
11
+ menu.choice(:Selenium) { choose_test_framework('selenium', project_name) }
12
+ menu.choice(:Watir) { choose_test_framework('watir', project_name) }
12
13
  menu.choice(:Quit, 'Exit program.') { exit }
13
14
  end
14
15
  end
@@ -20,16 +21,25 @@ module RubyRaider
20
21
  framework = ''
21
22
  cli.choose do |menu|
22
23
  menu.prompt = 'Please select your test framework'
23
- menu.choice(:Rspec) { framework = 'Rspec'; set_rspec_framework(automation, project_name)}
24
- menu.choice(:Cucumber) { framework = 'cucumber'; 'We are still working on supporting this' }
24
+ menu.choice(:Rspec) do
25
+ framework = 'rspec'
26
+ set_framework(automation, framework, project_name)
27
+ end
28
+ menu.choice(:Cucumber) do
29
+ framework = 'cucumber'
30
+ set_framework(automation, framework, project_name)
31
+ end
25
32
  menu.choice(:Quit, 'Exit program.') { exit }
26
33
  end
27
34
  cli.say("You have chosen to use #{framework} with #{automation}")
28
35
  end
29
36
 
30
- def self.set_rspec_framework(automation, project_name)
31
- RspecProjectGenerator.generate_rspec_project(project_name, automation: automation)
32
- ProjectGenerator.install_gems(project_name)
37
+ def self.set_framework(automation, framework, project_name)
38
+ if framework == 'rspec'
39
+ RspecProjectGenerator.generate_rspec_project(project_name, automation: automation)
40
+ else
41
+ CucumberProjectGenerator.generate_cucumber_project(project_name, automation: automation)
42
+ end
33
43
  end
34
44
  end
35
45
  end
@@ -1,14 +1,24 @@
1
+ require_relative '../files/cucumber_file_generator'
1
2
  require_relative 'project_generator'
2
3
 
3
4
  module RubyRaider
4
- class CucumberProjectGenerator
5
- def cucumber_folder_structure(name)
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
11
+
12
+ def self.cucumber_folder_structure(name)
6
13
  Dir.mkdir name.to_s
7
- Dir.mkdir "#{name}/features"
8
- folders = %w[steps_definitions support]
14
+ folders = %w[features config page_objects allure-results]
15
+ create_children_folders("#{name}", folders)
16
+ folders = %w[step_definitions support]
9
17
  create_children_folders("#{name}/features", folders)
10
18
  Dir.mkdir "#{name}/features/support/helpers"
11
- Dir.mkdir "#{name}/page_objects"
19
+ folders = %w[abstract pages components]
20
+ create_children_folders("#{name}/page_objects", folders)
21
+ Dir.mkdir "#{name}/allure-results/screenshots"
12
22
  end
13
23
  end
14
24
  end
@@ -5,7 +5,8 @@ module RubyRaider
5
5
  class RspecProjectGenerator < ProjectGenerator
6
6
  def self.generate_rspec_project(name, automation: 'watir')
7
7
  rspec_folder_structure(name)
8
- rspec_files(name, automation)
8
+ RspecFileGenerator.generate_rspec_files(name, automation)
9
+ ProjectGenerator.install_gems(name)
9
10
  end
10
11
 
11
12
  def self.rspec_folder_structure(name)
@@ -15,9 +16,5 @@ module RubyRaider
15
16
  pages = %w[pages components abstract]
16
17
  create_children_folders("#{name}/page_objects", pages)
17
18
  end
18
-
19
- def self.rspec_files(name, automation)
20
- RspecFileGenerator.generate_rspec_files(name, automation)
21
- end
22
19
  end
23
20
  end
data/lib/ruby_raider.rb CHANGED
@@ -5,7 +5,7 @@ require_relative 'generators/projects/rspec_project_generator'
5
5
 
6
6
  module RubyRaider
7
7
  extend self
8
- def generate_project(project_name)
9
- MenuGenerator.generate_choice_menu(project_name)
10
- end
8
+ def generate_project(project_name)
9
+ MenuGenerator.generate_choice_menu(project_name)
10
+ end
11
11
  end
data/ruby_raider.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'ruby_raider'
3
- s.version = '0.1.1'
3
+ s.version = '0.1.5'
4
4
  s.summary = 'A gem to make setup and start of UI automation projects easier'
5
5
  s.description = 'This gem contents everything you need to start doing web automation in one simple package'
6
6
  s.authors = ['Agustin Pequeno']
@@ -12,7 +12,8 @@ Gem::Specification.new do |s|
12
12
  s.files = `git ls-files -z`.split("\x0")
13
13
  s.bindir = 'bin'
14
14
  s.executables << 'raider'
15
- s.add_development_dependency 'rspec'
15
+ s.add_development_dependency 'rake', '~> 13.0.6'
16
+ s.add_development_dependency 'rspec', '~> 3.11.0'
16
17
 
17
- s.add_runtime_dependency 'highline'
18
+ s.add_runtime_dependency 'highline', '~> 2.0.3'
18
19
  end
@@ -1,7 +1,7 @@
1
- require_relative '../lib/generators/files/watir_file_generator'
1
+ require_relative '../lib/generators/files/automation_file_generator'
2
2
  require_relative 'spec_helper'
3
3
 
4
- describe RubyRaider::WatirFileGenerator do
4
+ describe RubyRaider::AutomationFileGenerator do
5
5
  it 'creates a login page file' do
6
6
  expect(File.exist?("#{@project_name}/page_objects/pages/login_page.rb")).to be_truthy
7
7
  end
metadata CHANGED
@@ -1,43 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_raider
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Agustin Pequeno
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-04 00:00:00.000000000 Z
11
+ date: 2022-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 13.0.6
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 13.0.6
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rspec
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - ">="
31
+ - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: '0'
33
+ version: 3.11.0
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - ">="
38
+ - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: '0'
40
+ version: 3.11.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: highline
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ">="
45
+ - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: '0'
47
+ version: 2.0.3
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ">="
52
+ - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: '0'
54
+ version: 2.0.3
41
55
  description: This gem contents everything you need to start doing web automation in
42
56
  one simple package
43
57
  email: agustin.pe94@gmail.com
@@ -47,30 +61,29 @@ extensions: []
47
61
  extra_rdoc_files: []
48
62
  files:
49
63
  - ".gitignore"
50
- - ".idea/.gitignore"
51
- - ".idea/modules.xml"
52
- - ".idea/ruby_raider.iml"
64
+ - Gemfile
53
65
  - README.md
54
66
  - Rakefile
55
67
  - bin/raider
68
+ - lib/generators/files/automation_file_generator.rb
56
69
  - lib/generators/files/common_file_generator.rb
70
+ - lib/generators/files/cucumber_file_generator.rb
57
71
  - lib/generators/files/file_generator.rb
58
72
  - lib/generators/files/helpers_file_generator.rb
59
73
  - lib/generators/files/rspec_file_generator.rb
60
- - lib/generators/files/watir_file_generator.rb
61
74
  - lib/generators/menu_generator.rb
62
75
  - lib/generators/projects/cucumber_project_generator.rb
63
76
  - lib/generators/projects/project_generator.rb
64
77
  - lib/generators/projects/rspec_project_generator.rb
65
78
  - lib/ruby_raider.rb
66
79
  - ruby_raider.gemspec
80
+ - spec/automation_file_generator_spec.rb
67
81
  - spec/common_file_generator_spec.rb
68
82
  - spec/helpers_file_generator_spec.rb
69
83
  - spec/menu_generator_spec.rb
70
84
  - spec/rspec_file_generator_spec.rb
71
85
  - spec/rspec_project_generator_spec.rb
72
86
  - spec/spec_helper.rb
73
- - spec/watir_file_generator_spec.rb
74
87
  homepage: http://github.com/aguspe/ruby_raider
75
88
  licenses:
76
89
  - MIT
data/.idea/.gitignore DELETED
@@ -1,8 +0,0 @@
1
- # Default ignored files
2
- /shelf/
3
- /workspace.xml
4
- # Editor-based HTTP Client requests
5
- /httpRequests/
6
- # Datasource local storage ignored files
7
- /dataSources/
8
- /dataSources.local.xml
data/.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/ruby_raider.iml" filepath="$PROJECT_DIR$/.idea/ruby_raider.iml" />
6
- </modules>
7
- </component>
8
- </project>
@@ -1,20 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="RUBY_MODULE" version="4">
3
- <component name="ModuleRunConfigurationManager">
4
- <shared />
5
- </component>
6
- <component name="NewModuleRootManager">
7
- <content url="file://$MODULE_DIR$">
8
- <sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
9
- <sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
10
- <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
11
- </content>
12
- <orderEntry type="jdk" jdkName="RVM: ruby-3.0.0" jdkType="RUBY_SDK" />
13
- <orderEntry type="sourceFolder" forTests="false" />
14
- </component>
15
- <component name="RakeTasksCache">
16
- <option name="myRootTask">
17
- <RakeTaskImpl id="rake" />
18
- </option>
19
- </component>
20
- </module>
@@ -1,144 +0,0 @@
1
- require_relative 'file_generator'
2
-
3
- module RubyRaider
4
- class WatirFileGenerator < FileGenerator
5
- def self.generate_watir_files(name)
6
- generate_file('abstract_page.rb', "#{name}/page_objects/abstract", abstract_page)
7
- generate_file('abstract_component.rb', "#{name}/page_objects/abstract", abstract_component)
8
- generate_file('login_page.rb', "#{name}/page_objects/pages", example_page)
9
- generate_file('header_component.rb', "#{name}/page_objects/components", example_component)
10
- generate_file('Gemfile', name.to_s, gemfile_template)
11
- end
12
-
13
- def self.gemfile_template
14
- gemfile = ERB.new <<~EOF
15
- # frozen_string_literal: true
16
-
17
- source 'https://rubygems.org'
18
-
19
- gem 'activesupport'
20
- gem 'allure-rspec'
21
- gem 'allure-ruby-commons'
22
- gem 'parallel_split_test'
23
- gem 'parallel_tests'
24
- gem 'rake'
25
- gem 'rspec'
26
- gem 'selenium-webdriver'
27
- gem 'watir'
28
- gem 'webdrivers'
29
- EOF
30
- gemfile.result(binding)
31
- end
32
-
33
- def self.example_page
34
- page_file = ERB.new <<~EOF
35
- require_relative '../abstract/abstract_page'
36
- require_relative '../components/header_component'
37
-
38
- class LoginPage < BasePage
39
-
40
- using Raider::WatirHelper
41
-
42
- def url(_page)
43
- 'index.php?rt=account/login'
44
- end
45
-
46
- # Actions
47
-
48
- def login(username, password)
49
- username_field.set username
50
- password_field.set password
51
- login_button.click_when_present
52
- end
53
-
54
- private
55
-
56
- # Elements
57
-
58
- def username_field
59
- browser.text_field(id: 'loginFrm_loginname')
60
- end
61
-
62
- def password_field
63
- browser.text_field(id: 'loginFrm_password')
64
- end
65
-
66
- def login_button
67
- browser.button(visible_text: 'Login')
68
- end
69
- end
70
- EOF
71
- page_file.result(binding)
72
- end
73
-
74
- def self.abstract_page
75
- abstract_file = ERB.new <<~EOF
76
- require 'rspec'
77
- require_relative '../components/header_component'
78
- require_relative '../../helpers/raider'
79
-
80
- class BasePage
81
-
82
- include HeaderComponent
83
- include RSpec::Matchers
84
- extend Raider::PomHelper
85
-
86
- def browser
87
- Raider::BrowserHelper.browser
88
- end
89
-
90
- def visit(*page)
91
- browser.goto full_url(page.first)
92
- end
93
-
94
- def full_url(*page)
95
- "#\{base_url}#\{url(*page)}"
96
- end
97
-
98
- def base_url
99
- 'https://automationteststore.com/'
100
- end
101
-
102
- def url(_page)
103
- raise 'Url must be defined on child pages'
104
- end
105
- end
106
- EOF
107
- abstract_file.result(binding)
108
- end
109
-
110
- def self.example_component
111
- page_file = ERB.new <<~EOF
112
- require_relative '../abstract/abstract_component'
113
-
114
- module HeaderComponent
115
-
116
- include BaseComponent
117
-
118
- def customer_name
119
- sleep 2
120
- customer_menu.text
121
- end
122
-
123
- private
124
-
125
- # Elements
126
-
127
- def customer_menu
128
- browser.element(id: 'customer_menu_top')
129
- end
130
- end
131
- EOF
132
- page_file.result(binding)
133
- end
134
-
135
- def self.abstract_component
136
- abstract_file = ERB.new <<~EOF
137
- require_relative '../../helpers/raider'
138
-
139
- module BaseComponent; end
140
- EOF
141
- abstract_file.result(binding)
142
- end
143
- end
144
- end