ruby_raider 0.1.1 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
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