ruby_raider 0.1.2 → 0.1.4
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 +4 -4
- data/.gitignore +2 -1
- data/Gemfile +5 -0
- data/README.md +8 -3
- data/bin/raider +0 -0
- data/lib/generators/files/{watir_file_generator.rb → automation_file_generator.rb} +43 -48
- data/lib/generators/files/common_file_generator.rb +29 -1
- data/lib/generators/files/cucumber_file_generator.rb +81 -0
- data/lib/generators/files/helpers_file_generator.rb +33 -23
- data/lib/generators/files/rspec_file_generator.rb +4 -9
- data/lib/generators/menu_generator.rb +15 -5
- data/lib/generators/projects/cucumber_project_generator.rb +15 -5
- data/lib/generators/projects/rspec_project_generator.rb +2 -5
- data/lib/ruby_raider.rb +3 -3
- data/ruby_raider.gemspec +4 -3
- data/spec/{watir_file_generator_spec.rb → automation_file_generator_spec.rb} +2 -2
- metadata +28 -14
- data/lib/generators/files/selenium_file_generator.rb +0 -159
- data/spec/selenium_file_generator_spec.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47cababb68c29a1a13ad36bb58a37f67aa9b0aad02a329a1fe3215af3cfa1174
|
4
|
+
data.tar.gz: 44f078d705101b3e233a06b1b5e6f30b7ff730a9923647c681faf7689c676d69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a638b7050b95dfde750279a26722abb645f56f175f4729e02af8f6acad0f2b3448617aaddaf87dbc7fd14b417dca56048d52dfe2e936f26f52b94f2320818f02
|
7
|
+
data.tar.gz: 0e28acc526f8d775704e8642b3a7ac7a9da35d1d399acf7949b3c4bb6bd9a39694ce5f5e460ba5050d94923597c507f55561c64b94533da7ef58118385e18eb0
|
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/README.md
CHANGED
@@ -3,13 +3,18 @@ This is a gem to make setup and start of UI automation projects easier
|
|
3
3
|
|
4
4
|
Just do:
|
5
5
|
|
6
|
-
gem install ruby_raider
|
6
|
+
**gem install ruby_raider**
|
7
7
|
|
8
|
-
then do
|
8
|
+
then do:
|
9
|
+
|
10
|
+
**raider [name_of_project]**
|
9
11
|
|
10
12
|
and you will have a new project in the folder you are in
|
11
13
|
|
12
|
-
Currently we only support
|
14
|
+
Currently we only support:
|
15
|
+
|
16
|
+
* Gerating a Selenium with Rspec framework
|
17
|
+
* Gerating a Watir with Rspec framework
|
13
18
|
|
14
19
|
We have only tested this in mac and linux, so it works in both platforms.
|
15
20
|
|
data/bin/raider
CHANGED
File without changes
|
@@ -1,43 +1,23 @@
|
|
1
1
|
require_relative 'file_generator'
|
2
2
|
|
3
3
|
module RubyRaider
|
4
|
-
class
|
5
|
-
def self.
|
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)
|
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
9
|
generate_file('header_component.rb', "#{name}/page_objects/components", example_component)
|
10
|
-
generate_file('Gemfile', name.to_s, gemfile_template)
|
11
10
|
end
|
12
11
|
|
13
|
-
def self.
|
14
|
-
|
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
|
12
|
+
def self.example_page(automation)
|
13
|
+
element = automation == 'watir' ? 'browser.element' : 'driver.find_element'
|
34
14
|
page_file = ERB.new <<~EOF
|
35
15
|
require_relative '../abstract/abstract_page'
|
36
16
|
require_relative '../components/header_component'
|
37
17
|
|
38
18
|
class LoginPage < AbstractPage
|
39
19
|
|
40
|
-
using Raider::WatirHelper
|
20
|
+
using #{automation == 'watir' ? 'Raider::WatirHelper' : 'Raider::SeleniumHelper'}
|
41
21
|
|
42
22
|
def url(_page)
|
43
23
|
'index.php?rt=account/login'
|
@@ -46,15 +26,15 @@ module RubyRaider
|
|
46
26
|
# Actions
|
47
27
|
|
48
28
|
def login(username, password)
|
49
|
-
username_field.
|
50
|
-
password_field.
|
29
|
+
username_field.send_keys username
|
30
|
+
password_field.send_keys password
|
51
31
|
login_button.click_when_present
|
52
32
|
end
|
53
33
|
|
54
34
|
# Components
|
55
35
|
|
56
36
|
def header
|
57
|
-
HeaderComponent.new(
|
37
|
+
HeaderComponent.new(#{element}(class: 'menu_text'))
|
58
38
|
end
|
59
39
|
|
60
40
|
private
|
@@ -62,37 +42,47 @@ module RubyRaider
|
|
62
42
|
# Elements
|
63
43
|
|
64
44
|
def username_field
|
65
|
-
|
45
|
+
#{element}(id: 'loginFrm_loginname')
|
66
46
|
end
|
67
47
|
|
68
48
|
def password_field
|
69
|
-
|
49
|
+
#{element}(id: 'loginFrm_password')
|
70
50
|
end
|
71
51
|
|
72
52
|
def login_button
|
73
|
-
|
53
|
+
#{element}(xpath: "//button[@title='Login']")
|
74
54
|
end
|
75
55
|
end
|
76
56
|
EOF
|
77
57
|
page_file.result(binding)
|
78
58
|
end
|
79
59
|
|
80
|
-
def self.abstract_page
|
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
|
81
73
|
abstract_file = ERB.new <<~EOF
|
82
74
|
require 'rspec'
|
83
|
-
|
75
|
+
#{raider}
|
84
76
|
|
85
77
|
class AbstractPage
|
86
78
|
|
87
79
|
include RSpec::Matchers
|
88
80
|
extend Raider::PomHelper
|
89
81
|
|
90
|
-
|
91
|
-
Raider::BrowserHelper.browser
|
92
|
-
end
|
82
|
+
#{automation == 'watir' ? browser : driver}
|
93
83
|
|
94
84
|
def visit(*page)
|
95
|
-
|
85
|
+
#{visit}
|
96
86
|
end
|
97
87
|
|
98
88
|
def full_url(*page)
|
@@ -107,7 +97,6 @@ module RubyRaider
|
|
107
97
|
raise 'Url must be defined on child pages'
|
108
98
|
end
|
109
99
|
end
|
110
|
-
|
111
100
|
EOF
|
112
101
|
abstract_file.result(binding)
|
113
102
|
end
|
@@ -126,15 +115,21 @@ module RubyRaider
|
|
126
115
|
page_file.result(binding)
|
127
116
|
end
|
128
117
|
|
129
|
-
def self.abstract_component
|
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
|
130
124
|
abstract_file = ERB.new <<~EOF
|
131
|
-
|
125
|
+
#{raider}
|
126
|
+
|
127
|
+
class AbstractComponent
|
132
128
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
end
|
129
|
+
def initialize(component)
|
130
|
+
@component = component
|
131
|
+
end
|
132
|
+
end
|
138
133
|
EOF
|
139
134
|
abstract_file.result(binding)
|
140
135
|
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,24 +2,25 @@ require_relative 'file_generator'
|
|
2
2
|
|
3
3
|
module RubyRaider
|
4
4
|
class HelpersFileGenerator < FileGenerator
|
5
|
-
def self.generate_helper_files(name, automation)
|
6
|
-
|
7
|
-
generate_file('
|
8
|
-
generate_file('
|
9
|
-
generate_file('
|
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'
|
10
11
|
if automation == 'watir'
|
11
|
-
generate_file('watir_helper.rb',
|
12
|
-
generate_file('browser_helper.rb',
|
12
|
+
generate_file('watir_helper.rb', path, generate_watir_helper)
|
13
|
+
generate_file('browser_helper.rb', path, generate_browser_helper)
|
13
14
|
else
|
14
|
-
generate_file('selenium_helper.rb',
|
15
|
-
generate_file('driver_helper.rb',
|
15
|
+
generate_file('selenium_helper.rb', path, generate_selenium_helper)
|
16
|
+
generate_file('driver_helper.rb', path, generate_driver_helper)
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
19
|
-
def self.generate_raider_helper(automation)
|
20
|
+
def self.generate_raider_helper(automation, framework)
|
20
21
|
spec = ERB.new <<~EOF
|
21
22
|
module Raider
|
22
|
-
require_relative 'spec_helper'
|
23
|
+
#{"require_relative 'spec_helper'" if framework == 'rspec'}
|
23
24
|
require_relative '#{automation}_helper'
|
24
25
|
require_relative 'pom_helper'
|
25
26
|
require_relative '#{automation == 'watir' ? 'browser_helper' : 'driver_helper'}'
|
@@ -30,34 +31,44 @@ module RubyRaider
|
|
30
31
|
spec.result(binding)
|
31
32
|
end
|
32
33
|
|
33
|
-
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
|
34
43
|
spec = ERB.new <<~EOF
|
35
|
-
|
36
|
-
require 'allure-rspec'
|
44
|
+
#{gems}
|
37
45
|
|
38
46
|
module Raider
|
39
47
|
module AllureHelper
|
40
48
|
class << self
|
41
49
|
|
42
50
|
def configure
|
43
|
-
|
51
|
+
#{allure}.configure do |config|
|
44
52
|
config.results_directory = 'allure-results'
|
45
53
|
config.clean_results_directory = true
|
46
54
|
end
|
47
55
|
end
|
48
56
|
|
49
|
-
def add_screenshot(
|
57
|
+
def add_screenshot(screenshot_name)
|
50
58
|
Allure.add_attachment(
|
51
59
|
name: name,
|
52
|
-
source: File.open(
|
60
|
+
source: "File.open(allure-results/screenshots/\#{screenshot_name}.png)",
|
53
61
|
type: Allure::ContentType::PNG,
|
54
62
|
test_case: true
|
55
63
|
)
|
56
64
|
end
|
57
65
|
|
58
|
-
|
59
|
-
|
60
|
-
|
66
|
+
#{
|
67
|
+
if framework == 'rspec'
|
68
|
+
'def formatter
|
69
|
+
AllureRspecFormatter
|
70
|
+
end'
|
71
|
+
end }
|
61
72
|
end
|
62
73
|
end
|
63
74
|
end
|
@@ -84,6 +95,7 @@ module RubyRaider
|
|
84
95
|
end
|
85
96
|
end
|
86
97
|
end
|
98
|
+
|
87
99
|
EOF
|
88
100
|
spec.result(binding)
|
89
101
|
end
|
@@ -171,7 +183,7 @@ module RubyRaider
|
|
171
183
|
require 'selenium-webdriver'
|
172
184
|
require_relative 'driver_helper'
|
173
185
|
|
174
|
-
module
|
186
|
+
module Raider
|
175
187
|
module SeleniumHelper
|
176
188
|
def click_when_present
|
177
189
|
# This is an example of an implicit wait in selenium
|
@@ -225,8 +237,6 @@ module RubyRaider
|
|
225
237
|
end
|
226
238
|
end
|
227
239
|
end
|
228
|
-
|
229
|
-
|
230
240
|
EOF
|
231
241
|
spec.result(binding)
|
232
242
|
end
|
@@ -1,21 +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 '
|
5
|
-
require_relative 'watir_file_generator'
|
4
|
+
require_relative 'automation_file_generator'
|
6
5
|
|
7
6
|
module RubyRaider
|
8
7
|
class RspecFileGenerator < FileGenerator
|
9
8
|
def self.generate_rspec_files(name, automation)
|
10
|
-
CommonFileGenerator.generate_common_files(name)
|
11
|
-
HelpersFileGenerator.generate_helper_files(name, automation)
|
9
|
+
CommonFileGenerator.generate_common_files(name, 'rspec')
|
10
|
+
HelpersFileGenerator.generate_helper_files(name, automation, 'rspec')
|
12
11
|
generate_file('login_page_spec.rb', "#{name}/spec", generate_example_spec)
|
13
12
|
generate_file('base_spec.rb', "#{name}/spec", generate_base_spec)
|
14
|
-
|
15
|
-
WatirFileGenerator.generate_watir_files(name)
|
16
|
-
else
|
17
|
-
SeleniumFileGenerator.generate_selenium_files(name)
|
18
|
-
end
|
13
|
+
AutomationFileGenerator.generate_automation_files(name, automation, 'rspec')
|
19
14
|
end
|
20
15
|
|
21
16
|
def self.generate_example_spec
|
@@ -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
|
@@ -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)
|
24
|
-
|
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.
|
31
|
-
|
32
|
-
|
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
|
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
|
-
|
8
|
-
folders
|
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
|
-
|
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
|
-
|
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
|
-
|
9
|
-
|
10
|
-
|
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.
|
3
|
+
s.version = '0.1.4'
|
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 '
|
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/
|
1
|
+
require_relative '../lib/generators/files/automation_file_generator'
|
2
2
|
require_relative 'spec_helper'
|
3
3
|
|
4
|
-
describe RubyRaider::
|
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.
|
4
|
+
version: 0.1.4
|
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-
|
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:
|
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:
|
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:
|
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:
|
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,29 +61,29 @@ extensions: []
|
|
47
61
|
extra_rdoc_files: []
|
48
62
|
files:
|
49
63
|
- ".gitignore"
|
64
|
+
- Gemfile
|
50
65
|
- README.md
|
51
66
|
- Rakefile
|
52
67
|
- bin/raider
|
68
|
+
- lib/generators/files/automation_file_generator.rb
|
53
69
|
- lib/generators/files/common_file_generator.rb
|
70
|
+
- lib/generators/files/cucumber_file_generator.rb
|
54
71
|
- lib/generators/files/file_generator.rb
|
55
72
|
- lib/generators/files/helpers_file_generator.rb
|
56
73
|
- lib/generators/files/rspec_file_generator.rb
|
57
|
-
- lib/generators/files/selenium_file_generator.rb
|
58
|
-
- lib/generators/files/watir_file_generator.rb
|
59
74
|
- lib/generators/menu_generator.rb
|
60
75
|
- lib/generators/projects/cucumber_project_generator.rb
|
61
76
|
- lib/generators/projects/project_generator.rb
|
62
77
|
- lib/generators/projects/rspec_project_generator.rb
|
63
78
|
- lib/ruby_raider.rb
|
64
79
|
- ruby_raider.gemspec
|
80
|
+
- spec/automation_file_generator_spec.rb
|
65
81
|
- spec/common_file_generator_spec.rb
|
66
82
|
- spec/helpers_file_generator_spec.rb
|
67
83
|
- spec/menu_generator_spec.rb
|
68
84
|
- spec/rspec_file_generator_spec.rb
|
69
85
|
- spec/rspec_project_generator_spec.rb
|
70
|
-
- spec/selenium_file_generator_spec.rb
|
71
86
|
- spec/spec_helper.rb
|
72
|
-
- spec/watir_file_generator_spec.rb
|
73
87
|
homepage: http://github.com/aguspe/ruby_raider
|
74
88
|
licenses:
|
75
89
|
- MIT
|
@@ -1,159 +0,0 @@
|
|
1
|
-
require_relative 'file_generator'
|
2
|
-
|
3
|
-
module RubyRaider
|
4
|
-
class SeleniumFileGenerator < FileGenerator
|
5
|
-
def self.generate_selenium_files(name)
|
6
|
-
generate_file('abstract_page.rb', "#{name}/page_objects/abstract", abstract_page)
|
7
|
-
generate_file('abstract_page_object.rb', "#{name}/page_objects/abstract", abstract_page_object)
|
8
|
-
generate_file('abstract_component.rb', "#{name}/page_objects/abstract", abstract_component)
|
9
|
-
generate_file('login_page.rb', "#{name}/page_objects/pages", example_page)
|
10
|
-
generate_file('header_component.rb', "#{name}/page_objects/components", example_component)
|
11
|
-
generate_file('Gemfile', name.to_s, gemfile_template)
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.gemfile_template
|
15
|
-
gemfile = ERB.new <<~EOF
|
16
|
-
# frozen_string_literal: true
|
17
|
-
|
18
|
-
source 'https://rubygems.org'
|
19
|
-
|
20
|
-
gem 'activesupport'
|
21
|
-
gem 'allure-rspec'
|
22
|
-
gem 'allure-ruby-commons'
|
23
|
-
gem 'parallel_split_test'
|
24
|
-
gem 'parallel_tests'
|
25
|
-
gem 'rake'
|
26
|
-
gem 'rspec'
|
27
|
-
gem 'selenium-webdriver'
|
28
|
-
gem 'webdrivers'
|
29
|
-
|
30
|
-
EOF
|
31
|
-
gemfile.result(binding)
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.example_page
|
35
|
-
gemfile = ERB.new <<~EOF
|
36
|
-
require_relative '../abstract/abstract_page'
|
37
|
-
require_relative '../components/header_component'
|
38
|
-
require_relative '../../helpers/selenium_helper'
|
39
|
-
|
40
|
-
class LoginPage < AbstractPage
|
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.send_keys username
|
50
|
-
password_field.send_keys password
|
51
|
-
login_button.click_when_present
|
52
|
-
end
|
53
|
-
|
54
|
-
def header
|
55
|
-
HeaderComponent.new(driver.find_element(class: 'menu_text'))
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
# Elements
|
61
|
-
|
62
|
-
def username_field
|
63
|
-
driver.find_element(id: 'loginFrm_loginname')
|
64
|
-
end
|
65
|
-
|
66
|
-
def password_field
|
67
|
-
driver.find_element(id: 'loginFrm_password')
|
68
|
-
end
|
69
|
-
|
70
|
-
def login_button
|
71
|
-
driver.find_element(xpath: "//button[@title='Login']")
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
EOF
|
78
|
-
gemfile.result(binding)
|
79
|
-
end
|
80
|
-
|
81
|
-
def self.abstract_page
|
82
|
-
abstract_file = ERB.new <<~EOF
|
83
|
-
require_relative '../components/header_component'
|
84
|
-
require_relative 'abstract_page_object'
|
85
|
-
require 'rspec'
|
86
|
-
|
87
|
-
class AbstractPage < AbstractPageObject
|
88
|
-
include RSpec::Matchers
|
89
|
-
|
90
|
-
def visit(*page)
|
91
|
-
driver.navigate.to 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
|
-
|
106
|
-
def header
|
107
|
-
HeaderComponent.new(driver.find_element(css: 'header'))
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
EOF
|
112
|
-
abstract_file.result(binding)
|
113
|
-
end
|
114
|
-
|
115
|
-
def self.abstract_component
|
116
|
-
abstract_file = ERB.new <<~EOF
|
117
|
-
require_relative '../../helpers/raider'
|
118
|
-
|
119
|
-
class AbstractComponent
|
120
|
-
def initialize(component)
|
121
|
-
@component = component
|
122
|
-
end
|
123
|
-
end
|
124
|
-
EOF
|
125
|
-
abstract_file.result(binding)
|
126
|
-
end
|
127
|
-
|
128
|
-
def self.abstract_page_object
|
129
|
-
abstract_file = ERB.new <<~EOF
|
130
|
-
require_relative '../../helpers/raider'
|
131
|
-
|
132
|
-
class AbstractPageObject
|
133
|
-
extend Raider::PomHelper
|
134
|
-
|
135
|
-
def driver
|
136
|
-
Raider::DriverHelper.driver
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
EOF
|
141
|
-
abstract_file.result(binding)
|
142
|
-
end
|
143
|
-
|
144
|
-
def self.example_component
|
145
|
-
page_file = ERB.new <<~EOF
|
146
|
-
require_relative '../abstract/abstract_component'
|
147
|
-
|
148
|
-
class HeaderComponent < AbstractComponent
|
149
|
-
|
150
|
-
def customer_name
|
151
|
-
@component.text
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
EOF
|
156
|
-
page_file.result(binding)
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require_relative '../lib/generators/files/selenium_file_generator'
|
2
|
-
require_relative 'spec_helper'
|
3
|
-
|
4
|
-
describe RubyRaider::SeleniumFileGenerator do
|
5
|
-
it 'creates a login page file' do
|
6
|
-
expect(File.exist?("#{@project_name}/page_objects/pages/login_page.rb")).to be_truthy
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'creates an abstract page file' do
|
10
|
-
expect(File.exist?("#{@project_name}/page_objects/abstract/abstract_page.rb")).to be_truthy
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'creates an abstract page object file' do
|
14
|
-
expect(File.exist?("#{@project_name}/page_objects/abstract/abstract_page_object.rb")).to be_truthy
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'creates an abstract component file' do
|
18
|
-
expect(File.exist?("#{@project_name}/page_objects/abstract/abstract_component.rb")).to be_truthy
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'creates a component file' do
|
22
|
-
expect(File.exist?("#{@project_name}/page_objects/components/header_component.rb")).to be_truthy
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'creates a gemfile file' do
|
26
|
-
expect(File.exist?("#{@project_name}/Gemfile")).to be_truthy
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|