ruby_raider 0.7.0 → 0.7.2
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/README.md +1 -1
- data/lib/generators/automation/automation_examples_generator.rb +6 -1
- data/lib/generators/automation/automation_generator.rb +14 -5
- data/lib/generators/automation/templates/account_page.tt +5 -0
- data/lib/generators/automation/templates/login_page.tt +5 -5
- data/lib/generators/automation/templates/partials/selenium_account.tt +17 -0
- data/lib/generators/automation/templates/partials/watir_account.tt +15 -0
- data/lib/generators/common_generator.rb +3 -3
- data/lib/generators/cucumber/cucumber_generator.rb +1 -1
- data/lib/generators/cucumber/templates/env.tt +7 -7
- data/lib/generators/cucumber/templates/feature.tt +1 -1
- data/lib/generators/cucumber/templates/partials/driver_world.tt +10 -6
- data/lib/generators/cucumber/templates/partials/selenium_env.tt +44 -0
- data/lib/generators/cucumber/templates/partials/watir_env.tt +32 -1
- data/lib/generators/cucumber/templates/partials/watir_world.tt +3 -2
- data/lib/generators/cucumber/templates/partials/web_steps.tt +8 -3
- data/lib/generators/cucumber/templates/steps.tt +3 -3
- data/lib/generators/cucumber/templates/world.tt +5 -5
- data/lib/generators/generator.rb +25 -4
- data/lib/generators/helper_generator.rb +12 -6
- data/lib/generators/menu_generator.rb +2 -2
- data/lib/generators/rspec/rspec_examples_generator.rb +2 -2
- data/lib/generators/rspec/templates/spec.tt +13 -28
- data/lib/generators/templates/common/gemfile.tt +3 -4
- data/lib/generators/templates/common/read_me.tt +1 -1
- data/lib/generators/templates/helpers/allure_helper.tt +5 -4
- data/lib/generators/templates/helpers/driver_helper.tt +4 -4
- data/lib/generators/templates/helpers/partials/driver_and_options.tt +1 -1
- data/lib/generators/templates/helpers/partials/screenshot.tt +3 -6
- data/lib/generators/templates/helpers/raider_helper.tt +0 -2
- data/lib/generators/templates/helpers/spec_helper.tt +2 -2
- data/lib/generators/templates/helpers/visual_spec_helper.tt +5 -9
- data/lib/ruby_raider.rb +1 -1
- data/ruby_raider.gemspec +1 -1
- data/spec/helpers_generator_spec.rb +0 -10
- metadata +7 -4
- data/lib/generators/cucumber/templates/partials/selenium_appium_env.tt +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8710aab0ae8636ca5829f35c5a5d5076002b02caf918284b161816eeda0b6dca
|
4
|
+
data.tar.gz: b69e53e10c6bfa0a8132e8975b8ce54cd412bfde5b88d465d244d9241005b4c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bc42e8cc009974f4793e47ed2a9eba9afd651fe1309f91a247d587a63618d3302e3ee68bcaaf71378446edd30f5e6b35582ee38c55407e34973f0a1e8fa5538
|
7
|
+
data.tar.gz: b189d100a0a4c47dcb6be4d58e7ff17e47ffb91c031a820db0d9f84f0a5368a3974d3cb2f846c0286cc6e6405a5cad851f3e44c79f637b41fbfc6b0bfbbaf993
|
data/README.md
CHANGED
@@ -54,7 +54,7 @@ Ruby Raider is a generator and scaffolding gem to make UI test automation easier
|
|
54
54
|
|
55
55
|
* Generating a visual testing framework with Rspec, Applitools and Selenium
|
56
56
|
|
57
|
-
* Generating a visual testing framework with
|
57
|
+
* Generating a visual testing framework with Cucumber, Applitools and Selenium
|
58
58
|
|
59
59
|
***In order to run the Appium tests, download the example [app](https://github.com/saucelabs/my-demo-app-rn).***
|
60
60
|
|
@@ -4,7 +4,7 @@ require_relative '../generator'
|
|
4
4
|
|
5
5
|
class AutomationExamplesGenerator < Generator
|
6
6
|
def generate_example_files
|
7
|
-
if
|
7
|
+
if mobile?
|
8
8
|
generate_home_page
|
9
9
|
generate_pdp_page
|
10
10
|
else
|
@@ -12,6 +12,7 @@ class AutomationExamplesGenerator < Generator
|
|
12
12
|
generate_model_data
|
13
13
|
generate_header_component
|
14
14
|
generate_login_page
|
15
|
+
generate_account_page
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
@@ -21,6 +22,10 @@ class AutomationExamplesGenerator < Generator
|
|
21
22
|
template('login_page.tt', "#{name}/page_objects/pages/login_page.rb")
|
22
23
|
end
|
23
24
|
|
25
|
+
def generate_account_page
|
26
|
+
template('account_page.tt', "#{name}/page_objects/pages/account_page.rb")
|
27
|
+
end
|
28
|
+
|
24
29
|
def generate_home_page
|
25
30
|
template('home_page.tt', "#{name}/page_objects/pages/home_page.rb")
|
26
31
|
end
|
@@ -3,24 +3,33 @@
|
|
3
3
|
require_relative '../generator'
|
4
4
|
|
5
5
|
class AutomationGenerator < Generator
|
6
|
+
def generate_automation_files
|
7
|
+
if mobile?
|
8
|
+
generate_appium_settings
|
9
|
+
else
|
10
|
+
generate_abstract_component
|
11
|
+
generate_visual_options
|
12
|
+
end
|
13
|
+
|
14
|
+
generate_abstract_page
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
6
19
|
def generate_abstract_page
|
7
20
|
template('abstract_page.tt', "#{name}/page_objects/abstract/abstract_page.rb")
|
8
21
|
end
|
9
22
|
|
10
23
|
def generate_abstract_component
|
11
|
-
return if mobile_platform?
|
12
|
-
|
13
24
|
template('abstract_component.tt', "#{name}/page_objects/abstract/abstract_component.rb")
|
14
25
|
end
|
15
26
|
|
16
27
|
def generate_appium_settings
|
17
|
-
return unless mobile_platform?
|
18
|
-
|
19
28
|
template('appium_caps.tt', "#{name}/config/capabilities.yml")
|
20
29
|
end
|
21
30
|
|
22
31
|
def generate_visual_options
|
23
|
-
return unless
|
32
|
+
return unless visual?
|
24
33
|
|
25
34
|
template('visual_options.tt', "#{name}/config/options.yml")
|
26
35
|
end
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<%- if automation == 'selenium' -%>
|
2
|
+
<%=- ERB.new(File.read(File.expand_path('./partials/selenium_account.tt', __dir__)), trim_mode: '-').result(binding) -%>
|
3
|
+
<%- elsif automation == 'watir' -%>
|
4
|
+
<%=- ERB.new(File.read(File.expand_path('./partials/watir_account.tt', __dir__)), trim_mode: '-').result(binding) -%>
|
5
|
+
<%- end -%>
|
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
<%- if automation == 'selenium' -%>
|
2
|
+
<%=- ERB.new(File.read(File.expand_path('./partials/selenium_login.tt', __dir__)), trim_mode: '-').result(binding) -%>
|
3
|
+
<%- elsif automation == 'watir' -%>
|
4
|
+
<%=- ERB.new(File.read(File.expand_path('./partials/watir_login.tt', __dir__)), trim_mode: '-').result(binding) -%>
|
5
|
+
<%- end -%>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../abstract/abstract_page'
|
4
|
+
require_relative '../components/header_component'
|
5
|
+
|
6
|
+
class AccountPage < AbstractPage
|
7
|
+
|
8
|
+
def url(_page)
|
9
|
+
'index.php?rt=account/account'
|
10
|
+
end
|
11
|
+
|
12
|
+
# Components
|
13
|
+
|
14
|
+
def header
|
15
|
+
HeaderComponent.new(driver.find_element(class: 'menu_text'))
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative '../abstract/abstract_page'
|
2
|
+
require_relative '../components/header_component'
|
3
|
+
|
4
|
+
class AccountPage < AbstractPage
|
5
|
+
|
6
|
+
def url(_page)
|
7
|
+
'index.php?rt=account/account'
|
8
|
+
end
|
9
|
+
|
10
|
+
# Components
|
11
|
+
|
12
|
+
def header
|
13
|
+
HeaderComponent.new(browser.element(class: 'menu_text'))
|
14
|
+
end
|
15
|
+
end
|
@@ -8,7 +8,7 @@ class CommonGenerator < Generator
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def generate_config_file
|
11
|
-
return if
|
11
|
+
return if mobile?
|
12
12
|
|
13
13
|
template('common/config.tt', "#{name}/config/config.yml")
|
14
14
|
end
|
@@ -30,10 +30,10 @@ class CommonGenerator < Generator
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def create_allure_folder
|
33
|
-
empty_directory "#{name}/allure-results"
|
33
|
+
empty_directory "#{name}/allure-results"
|
34
34
|
end
|
35
35
|
|
36
36
|
def create_screenshots_folder
|
37
|
-
empty_directory "#{name}/allure-results/screenshots"
|
37
|
+
empty_directory "#{name}/allure-results/screenshots"
|
38
38
|
end
|
39
39
|
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
|
1
|
+
<%- case automation
|
2
2
|
when 'selenium' -%>
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
<%=- ERB.new(File.read(File.expand_path('./partials/selenium_env.tt', __dir__)), trim_mode: '-').result(binding) -%>
|
4
|
+
<%- when 'watir' -%>
|
5
|
+
<%=- ERB.new(File.read(File.expand_path('./partials/watir_env.tt', __dir__)), trim_mode: '-').result(binding) -%>
|
6
|
+
<%- else -%>
|
7
|
+
<%=- ERB.new(File.read(File.expand_path('./partials/appium_env.tt', __dir__)), trim_mode: '-').result(binding) -%>
|
8
|
+
<%- end -%>
|
@@ -1,7 +1,11 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require_relative '../../helpers/driver_helper'
|
2
|
+
<%- if visual_automation -%>
|
3
|
+
require_relative '../../helpers/visual_helper'
|
4
|
+
<%- end -%>
|
5
|
+
<%- if automation == 'selenium' -%>
|
6
|
+
require_relative '../../models/user_factory'
|
3
7
|
|
4
|
-
World(DriverHelper
|
5
|
-
|
6
|
-
World(DriverHelper)
|
7
|
-
|
8
|
+
World(Raider::DriverHelper<%- if visual_automation -%>, Raider::VisualHelper<%- end -%>)
|
9
|
+
<%- else -%>
|
10
|
+
World(Raider::DriverHelper)
|
11
|
+
<%- end -%>
|
@@ -0,0 +1,44 @@
|
|
1
|
+
<%- if visual_automation -%>
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require_relative '../../helpers/driver_helper'
|
5
|
+
require_relative '../../helpers/visual_helper'
|
6
|
+
|
7
|
+
include Raider::DriverHelper
|
8
|
+
include Raider::VisualHelper
|
9
|
+
|
10
|
+
Before do
|
11
|
+
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
|
12
|
+
@grid_runner = create_grid_runner
|
13
|
+
@eyes = create_eyes(@grid_runner)
|
14
|
+
configure_eyes @eyes
|
15
|
+
@driver = @eyes.open(driver: new_driver)
|
16
|
+
end
|
17
|
+
|
18
|
+
After do |scenario|
|
19
|
+
driver.save_screenshot("allure-results/screenshots/#{scenario.name}.png")
|
20
|
+
Raider::AllureHelper.add_screenshot(scenario.name)
|
21
|
+
@eyes.close
|
22
|
+
@driver.quit
|
23
|
+
@eyes.abort_async
|
24
|
+
results = @grid_runner.get_all_test_results
|
25
|
+
puts results
|
26
|
+
end
|
27
|
+
|
28
|
+
<%- else -%>
|
29
|
+
# frozen_string_literal: true
|
30
|
+
|
31
|
+
require_relative '../../helpers/driver_helper'
|
32
|
+
|
33
|
+
include Raider::DriverHelper
|
34
|
+
|
35
|
+
Before do
|
36
|
+
new_driver
|
37
|
+
end
|
38
|
+
|
39
|
+
After do |scenario|
|
40
|
+
driver.save_screenshot("allure-results/screenshots/#{scenario.name}.png")
|
41
|
+
Raider::AllureHelper.add_screenshot(scenario.name)
|
42
|
+
driver.quit
|
43
|
+
end
|
44
|
+
<%- end -%>
|
@@ -1,3 +1,33 @@
|
|
1
|
+
<%- if visual_automation -%>
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require_relative '../../helpers/browser_helper'
|
5
|
+
require_relative '../../helpers/visual_helper'
|
6
|
+
|
7
|
+
include Raider::BrowserHelper
|
8
|
+
include Raider::VisualHelper
|
9
|
+
|
10
|
+
Before do
|
11
|
+
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
|
12
|
+
@grid_runner = create_grid_runner
|
13
|
+
@eyes = create_eyes(@grid_runner)
|
14
|
+
configure_eyes @eyes
|
15
|
+
@browser = @eyes.open(driver: new_browser.driver)
|
16
|
+
end
|
17
|
+
|
18
|
+
After do |scenario|
|
19
|
+
browser.screenshot.save("allure-results/screenshots/#{scenario.name}.png")
|
20
|
+
Raider::AllureHelper.add_screenshot(scenario.name)
|
21
|
+
@eyes.close
|
22
|
+
@browser.quit
|
23
|
+
@eyes.abort_async
|
24
|
+
results = @grid_runner.get_all_test_results
|
25
|
+
puts results
|
26
|
+
end
|
27
|
+
|
28
|
+
<%- else -%>
|
29
|
+
# frozen_string_literal: true
|
30
|
+
|
1
31
|
require_relative '../../helpers/browser_helper'
|
2
32
|
|
3
33
|
include Raider::BrowserHelper
|
@@ -10,4 +40,5 @@ After do |scenario|
|
|
10
40
|
browser.screenshot.save("allure-results/screenshots/#{scenario.name}.png")
|
11
41
|
Raider::AllureHelper.add_screenshot(scenario.name)
|
12
42
|
browser.quit
|
13
|
-
end
|
43
|
+
end
|
44
|
+
<%- end -%>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../../page_objects/pages/account_page'
|
3
4
|
require_relative '../../page_objects/pages/login_page'
|
4
|
-
require_relative '../../models/user_factory'
|
5
5
|
|
6
6
|
Given("I'm a {user} on the login page") do |user|
|
7
7
|
@user = user
|
@@ -13,6 +13,11 @@ When('I login with my credentials') do
|
|
13
13
|
@login_page.login(@user['username'], @user['password'])
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
Then("I'm logged in") do
|
17
|
+
account_page = AccountPage.new(<% if automation == 'watir' %>browser<% else %>driver<% end %>)
|
18
|
+
<%- if visual_automation == true -%>
|
19
|
+
check_page account_page
|
20
|
+
<%- else -%>
|
21
|
+
expect(account_page.header.customer_name).to eq "Welcome back #{@user['name']}"
|
22
|
+
<%- end -%>
|
18
23
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% if %w[selenium watir].include? automation -%>
|
2
|
-
<%= ERB.new(File.read(File.expand_path('./partials/web_steps.tt', __dir__))).result(binding).strip! -%>
|
2
|
+
<%= ERB.new(File.read(File.expand_path('./partials/web_steps.tt', __dir__)), trim_mode: '-').result(binding).strip! -%>
|
3
3
|
<% else -%>
|
4
|
-
<%= ERB.new(File.read(File.expand_path('./partials/mobile_steps.tt', __dir__))).result(binding).strip! -%>
|
5
|
-
<% end -%>
|
4
|
+
<%= ERB.new(File.read(File.expand_path('./partials/mobile_steps.tt', __dir__)), trim_mode: '-').result(binding).strip! -%>
|
5
|
+
<% end -%>
|
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
<%- if automation == 'watir' -%>
|
2
|
+
<%=- ERB.new(File.read(File.expand_path('./partials/watir_world.tt', __dir__)), trim_mode: '-').result(binding).strip! -%>
|
3
|
+
<%- else -%>
|
4
|
+
<%=- ERB.new(File.read(File.expand_path('./partials/driver_world.tt', __dir__)), trim_mode: '-').result(binding).strip! -%>
|
5
|
+
<%- end -%>
|
data/lib/generators/generator.rb
CHANGED
@@ -19,15 +19,36 @@ class Generator < Thor::Group
|
|
19
19
|
initializer.first
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
23
|
-
|
22
|
+
def cucumber?
|
23
|
+
args.include?('cucumber')
|
24
|
+
end
|
25
|
+
|
26
|
+
# The framework is cross platform when it supports Android and iOS
|
27
|
+
def cross_platform?
|
28
|
+
args.include?('cross_platform')
|
24
29
|
end
|
25
30
|
|
26
|
-
def
|
31
|
+
def mobile?
|
27
32
|
(args & %w[android ios cross_platform]).count.positive?
|
28
33
|
end
|
29
34
|
|
30
|
-
def
|
35
|
+
def rspec?
|
36
|
+
args.include?('rspec')
|
37
|
+
end
|
38
|
+
|
39
|
+
def selenium?
|
40
|
+
args.include?('selenium')
|
41
|
+
end
|
42
|
+
|
43
|
+
def visual?
|
44
|
+
initializer.first.last
|
45
|
+
end
|
46
|
+
|
47
|
+
def watir?
|
48
|
+
args.include?('watir')
|
49
|
+
end
|
50
|
+
|
51
|
+
def web?
|
31
52
|
args.include?(%w[selenium watir])
|
32
53
|
end
|
33
54
|
|
@@ -8,12 +8,12 @@ class HelpersGenerator < Generator
|
|
8
8
|
generate_browser_helper
|
9
9
|
generate_driver_helper
|
10
10
|
generate_appium_helper
|
11
|
+
generate_allure_helper
|
11
12
|
|
12
|
-
if
|
13
|
+
if visual?
|
13
14
|
generate_visual_helper
|
14
15
|
generate_visual_spec_helper
|
15
16
|
else
|
16
|
-
generate_allure_helper
|
17
17
|
generate_spec_helper
|
18
18
|
end
|
19
19
|
end
|
@@ -29,21 +29,25 @@ class HelpersGenerator < Generator
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def generate_browser_helper
|
32
|
-
|
32
|
+
return if selenium?
|
33
|
+
|
34
|
+
template('helpers/browser_helper.tt', "#{name}/helpers/browser_helper.rb")
|
33
35
|
end
|
34
36
|
|
35
37
|
def generate_spec_helper
|
36
|
-
|
38
|
+
return if cucumber?
|
39
|
+
|
40
|
+
template('helpers/spec_helper.tt', "#{name}/helpers/spec_helper.rb")
|
37
41
|
end
|
38
42
|
|
39
43
|
def generate_driver_helper
|
40
|
-
return if
|
44
|
+
return if watir?
|
41
45
|
|
42
46
|
template('helpers/driver_helper.tt', "#{name}/helpers/driver_helper.rb")
|
43
47
|
end
|
44
48
|
|
45
49
|
def generate_appium_helper
|
46
|
-
return unless
|
50
|
+
return unless cross_platform?
|
47
51
|
|
48
52
|
template('helpers/appium_helper.tt', "#{name}/helpers/appium_helper.rb")
|
49
53
|
end
|
@@ -53,6 +57,8 @@ class HelpersGenerator < Generator
|
|
53
57
|
end
|
54
58
|
|
55
59
|
def generate_visual_spec_helper
|
60
|
+
return if cucumber?
|
61
|
+
|
56
62
|
template('helpers/visual_spec_helper.tt', "#{name}/helpers/spec_helper.rb")
|
57
63
|
end
|
58
64
|
end
|
@@ -80,14 +80,14 @@ class MenuGenerator
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def framework_with_examples(framework, automation_type)
|
83
|
-
visual_automation = choose_visual_automation if %w[selenium
|
83
|
+
visual_automation = choose_visual_automation if %w[selenium].include?(automation_type)
|
84
84
|
options = create_framework_options(automation: automation_type, framework: framework.downcase, visual_automation: visual_automation, with_examples: true)
|
85
85
|
set_up_framework(options)
|
86
86
|
prompt.say("You have chosen to use #{framework} with #{automation_type}")
|
87
87
|
end
|
88
88
|
|
89
89
|
def framework_without_examples(framework, automation_type)
|
90
|
-
visual_automation = choose_visual_automation if %w[selenium
|
90
|
+
visual_automation = choose_visual_automation if %w[selenium].include?(automation_type)
|
91
91
|
options = create_framework_options(automation: automation_type, framework: framework.downcase, visual_automation: visual_automation, with_examples: false)
|
92
92
|
set_up_framework(options)
|
93
93
|
prompt.say("You have chosen to use #{framework} with #{automation_type}")
|
@@ -4,13 +4,13 @@ require_relative '../generator'
|
|
4
4
|
|
5
5
|
class RspecExamplesGenerator < Generator
|
6
6
|
def generate_login_spec
|
7
|
-
return if
|
7
|
+
return if mobile?
|
8
8
|
|
9
9
|
template('spec.tt', "#{name}/spec/login_page_spec.rb")
|
10
10
|
end
|
11
11
|
|
12
12
|
def generate_pdp_spec
|
13
|
-
return unless
|
13
|
+
return unless mobile?
|
14
14
|
|
15
15
|
template('spec.tt', "#{name}/spec/pdp_page_spec.rb")
|
16
16
|
end
|
@@ -1,40 +1,17 @@
|
|
1
|
-
|
1
|
+
<%- if %w[selenium watir].include? automation -%>
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require_relative 'base_spec'
|
5
5
|
require_relative '../models/model_factory'
|
6
|
+
require_relative '../page_objects/pages/account_page'
|
6
7
|
require_relative '../page_objects/pages/login_page'
|
7
8
|
|
8
9
|
describe 'Login' do
|
9
|
-
subject(:header) {
|
10
|
-
|
11
|
-
let(:user) { ModelFactory.for('users')['registered user'] }
|
12
|
-
let(:login_page) { LoginPage.new(<% if automation == 'watir' -%>browser<% else -%>driver<% end -%>) }
|
13
|
-
|
14
|
-
before do
|
15
|
-
login_page.visit
|
16
|
-
end
|
17
|
-
|
18
|
-
context 'with right credentials' do
|
19
|
-
let(:password) { user['password'] }
|
20
|
-
|
21
|
-
it 'cannot see unexpected changes on the login page' do
|
22
|
-
check_page login_page
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
<%- elsif %w[selenium watir].include? automation -%>
|
27
|
-
# frozen_string_literal: true
|
28
|
-
|
29
|
-
require_relative 'base_spec'
|
30
|
-
require_relative '../models/model_factory'
|
31
|
-
require_relative '../page_objects/pages/login_page'
|
32
|
-
|
33
|
-
describe 'Login' do
|
34
|
-
subject(:header) { login_page.header.customer_name }
|
10
|
+
subject(:header) { account_page.header.customer_name }
|
35
11
|
|
36
12
|
let(:user) { ModelFactory.for('users')['registered user'] }
|
37
13
|
let(:login_page) { LoginPage.new(<% if automation == 'watir' -%>browser<% else -%>driver<% end -%>) }
|
14
|
+
let(:account_page) { AccountPage.new(<% if automation == 'watir' -%>browser<% else -%>driver<% end -%>) }
|
38
15
|
|
39
16
|
before do
|
40
17
|
login_page.visit
|
@@ -45,15 +22,23 @@ describe 'Login' do
|
|
45
22
|
let(:password) { user['password'] }
|
46
23
|
|
47
24
|
it 'can successfully log in' do
|
25
|
+
<%- if visual_automation == true -%>
|
26
|
+
check_page account_page
|
27
|
+
<%- else -%>
|
48
28
|
expect(header).to eq "Welcome back #{user['name']}"
|
29
|
+
<%- end -%>
|
49
30
|
end
|
50
31
|
end
|
51
32
|
|
52
33
|
context 'with wrong credentials' do
|
53
34
|
let(:password) { 'wrongPassword' }
|
54
35
|
|
55
|
-
it 'cannot
|
36
|
+
it 'cannot log in' do
|
37
|
+
<%- if visual_automation == true -%>
|
38
|
+
check_page login_page
|
39
|
+
<%- else -%>
|
56
40
|
expect(header).to be_empty
|
41
|
+
<%- end -%>
|
57
42
|
end
|
58
43
|
end
|
59
44
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
3
|
gem 'activesupport'
|
4
|
-
<% unless visual_automation -%>
|
5
|
-
gem 'allure-rspec'
|
6
|
-
gem 'allure-ruby-commons'
|
7
|
-
<% end -%>
|
8
4
|
<% if framework == 'cucumber' -%>
|
9
5
|
gem 'allure-cucumber'
|
6
|
+
<% else -%>
|
7
|
+
gem 'allure-rspec'
|
8
|
+
gem 'allure-ruby-commons'
|
10
9
|
<% end -%>
|
11
10
|
<% if visual_automation -%>
|
12
11
|
gem 'eyes_selenium', '~> 4.6', '>= 4.6.1'
|
@@ -50,7 +50,7 @@ Ruby Raider is a generator and scaffolding gem to make UI test automation easier
|
|
50
50
|
|
51
51
|
* Generating a visual testing framework with Rspec, Applitools and Selenium
|
52
52
|
|
53
|
-
* Generating a visual testing framework with
|
53
|
+
* Generating a visual testing framework with Cucumber, Applitools and Selenium
|
54
54
|
|
55
55
|
***In order to run the Appium tests, download the example [app](https://github.com/saucelabs/my-demo-app-rn).***
|
56
56
|
|
@@ -1,7 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
<%=- ERB.new(File.read(File.expand_path('./partials/allure_requirements.tt', __dir__))).result(binding).strip! -%>
|
4
|
+
<%- allure = ERB.new(File.read(File.expand_path('./partials/allure_imports.tt', __dir__))).result(binding).strip! -%>
|
5
|
+
|
5
6
|
|
6
7
|
module Raider
|
7
8
|
module AllureHelper
|
@@ -22,11 +23,11 @@ module Raider
|
|
22
23
|
)
|
23
24
|
end
|
24
25
|
|
25
|
-
|
26
|
+
<%- if framework == 'rspec' -%>
|
26
27
|
def formatter
|
27
28
|
AllureRspecFormatter
|
28
29
|
end
|
29
|
-
|
30
|
+
<%- end -%>
|
30
31
|
end
|
31
32
|
end
|
32
33
|
end
|
@@ -11,7 +11,7 @@ module Raider
|
|
11
11
|
module DriverHelper
|
12
12
|
attr_reader :driver
|
13
13
|
|
14
|
-
|
14
|
+
<%= ERB.new(File.read(File.expand_path('./partials/driver_and_options.tt', __dir__)), trim_mode: '-').result(binding).strip! %>
|
15
15
|
|
16
16
|
<% if automation == 'cross_platform' -%>
|
17
17
|
private
|
@@ -20,11 +20,11 @@ module Raider
|
|
20
20
|
YAML.load_file('config/config.yml')
|
21
21
|
end
|
22
22
|
<% end -%>
|
23
|
-
|
23
|
+
<%- if automation != 'selenium' -%>
|
24
24
|
# :reek:UtilityFunction
|
25
25
|
def caps
|
26
26
|
YAML.load_file('config/capabilities.yml')
|
27
27
|
end
|
28
|
-
|
29
|
-
|
28
|
+
<%- end -%>
|
29
|
+
end
|
30
30
|
end
|
@@ -1,8 +1,5 @@
|
|
1
|
-
|
2
|
-
when 'selenium' %>
|
1
|
+
<%- if automation == 'selenium' -%>
|
3
2
|
driver.save_screenshot("allure-results/screenshots/#{example_name}.png")
|
4
|
-
|
3
|
+
<%- else -%>
|
5
4
|
browser.screenshot.save("allure-results/screenshots/#{example_name}.png")
|
6
|
-
|
7
|
-
driver.screenshot("allure-results/screenshots/#{example_name}.png")
|
8
|
-
<% end %>
|
5
|
+
<%- end -%>
|
@@ -9,9 +9,7 @@ module Raider
|
|
9
9
|
<%- else -%>
|
10
10
|
require_relative 'driver_helper'
|
11
11
|
<%- end -%>
|
12
|
-
<%- unless visual_automation -%>
|
13
12
|
require_relative 'allure_helper'
|
14
|
-
<%- end -%>
|
15
13
|
<%- if automation == 'cross_platform' -%>
|
16
14
|
require_relative 'appium_helper'
|
17
15
|
<%- end -%>
|
@@ -21,9 +21,9 @@ module Raider
|
|
21
21
|
|
22
22
|
config.after(:each) do
|
23
23
|
example_name = self.class.descendant_filtered_examples.first.description
|
24
|
-
<%= ERB.new(File.read(File.expand_path('./partials/screenshot.tt', __dir__))).result(binding).strip! %>
|
24
|
+
<%= ERB.new(File.read(File.expand_path('./partials/screenshot.tt', __dir__)), trim_mode: '-').result(binding).strip! %>
|
25
25
|
AllureHelper.add_screenshot example_name
|
26
|
-
<%= ERB.new(File.read(File.expand_path('./partials/quit_driver.tt', __dir__))).result(binding).strip! %>
|
26
|
+
<%= ERB.new(File.read(File.expand_path('./partials/quit_driver.tt', __dir__)), trim_mode: '-').result(binding).strip! %>
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
@@ -2,34 +2,30 @@
|
|
2
2
|
|
3
3
|
require 'rspec'
|
4
4
|
require 'eyes_selenium'
|
5
|
-
|
5
|
+
require_relative 'allure_helper'
|
6
6
|
require_relative 'driver_helper'
|
7
|
-
<%- else -%>
|
8
|
-
require_relative 'browser_helper'
|
9
|
-
<%- end -%>
|
10
7
|
require_relative 'visual_helper'
|
11
8
|
|
12
9
|
module Raider
|
13
10
|
module SpecHelper
|
14
11
|
RSpec.configure do |config|
|
15
|
-
config.include(
|
12
|
+
config.include(DriverHelper)
|
16
13
|
config.include(VisualHelper)
|
17
14
|
config.before(:each) do
|
18
15
|
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
|
19
16
|
@grid_runner = create_grid_runner
|
20
17
|
@eyes = create_eyes(@grid_runner)
|
21
18
|
configure_eyes @eyes
|
22
|
-
<%- if automation == 'selenium' -%>
|
23
19
|
@driver = @eyes.open(driver: new_driver)
|
24
|
-
<%- else -%>
|
25
|
-
@driver = @eyes.open(driver: new_browser.driver)
|
26
|
-
<%- end -%>
|
27
20
|
end
|
28
21
|
|
29
22
|
config.after(:each) do
|
23
|
+
example_name = self.class.descendant_filtered_examples.first.description
|
24
|
+
driver.save_screenshot("allure-results/screenshots/#{example_name}.png")
|
30
25
|
@eyes.close
|
31
26
|
@driver.quit
|
32
27
|
@eyes.abort_async
|
28
|
+
AllureHelper.add_screenshot example_name
|
33
29
|
results = @grid_runner.get_all_test_results
|
34
30
|
puts results
|
35
31
|
end
|
data/lib/ruby_raider.rb
CHANGED
@@ -26,7 +26,7 @@ module RubyRaider
|
|
26
26
|
desc 'version', 'It shows the version of Ruby Raider you are currently using'
|
27
27
|
|
28
28
|
def version
|
29
|
-
puts 'The Ruby Raider version is 0.7.
|
29
|
+
puts 'The Ruby Raider version is 0.7.1, Happy testing!'
|
30
30
|
end
|
31
31
|
|
32
32
|
map 'v' => 'version'
|
data/ruby_raider.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'ruby_raider'
|
5
|
-
s.version = '0.7.
|
5
|
+
s.version = '0.7.2'
|
6
6
|
s.summary = 'A gem to make setup and start of UI automation projects easier'
|
7
7
|
s.description = 'This gem has everything you need to start working with test automation'
|
8
8
|
s.authors = ['Agustin Pequeno']
|
@@ -45,10 +45,6 @@ describe HelpersGenerator do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
shared_examples 'creates common visual helpers' do |name|
|
48
|
-
it 'does not create an allure helper file' do
|
49
|
-
expect(File).not_to exist("#{name}/helpers/allure_helper.rb")
|
50
|
-
end
|
51
|
-
|
52
48
|
it 'creates a raider file' do
|
53
49
|
expect(File).to exist("#{name}/helpers/raider.rb")
|
54
50
|
end
|
@@ -76,12 +72,6 @@ describe HelpersGenerator do
|
|
76
72
|
include_examples 'creates rspec helpers', "#{FRAMEWORKS.last}_#{AUTOMATION_TYPES[2]}_visual"
|
77
73
|
end
|
78
74
|
|
79
|
-
context 'with rspec, watir and applitools' do
|
80
|
-
include_examples 'creates common visual helpers', "#{FRAMEWORKS.last}_#{AUTOMATION_TYPES[3]}_visual"
|
81
|
-
include_examples 'creates watir helpers', "#{FRAMEWORKS.last}_#{AUTOMATION_TYPES[3]}_visual"
|
82
|
-
include_examples 'creates rspec helpers', "#{FRAMEWORKS.last}_#{AUTOMATION_TYPES[3]}_visual"
|
83
|
-
end
|
84
|
-
|
85
75
|
context 'with cucumber and selenium' do
|
86
76
|
include_examples 'creates common helpers', "#{FRAMEWORKS.first}_#{AUTOMATION_TYPES[2]}"
|
87
77
|
include_examples 'creates selenium helpers', "#{FRAMEWORKS.first}_#{AUTOMATION_TYPES[2]}"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_raider
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Agustin Pequeno
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dotenv
|
@@ -212,6 +212,7 @@ files:
|
|
212
212
|
- lib/generators/automation/automation_generator.rb
|
213
213
|
- lib/generators/automation/templates/abstract_component.tt
|
214
214
|
- lib/generators/automation/templates/abstract_page.tt
|
215
|
+
- lib/generators/automation/templates/account_page.tt
|
215
216
|
- lib/generators/automation/templates/appium_caps.tt
|
216
217
|
- lib/generators/automation/templates/component.tt
|
217
218
|
- lib/generators/automation/templates/home_page.tt
|
@@ -224,9 +225,11 @@ files:
|
|
224
225
|
- lib/generators/automation/templates/partials/ios_caps.tt
|
225
226
|
- lib/generators/automation/templates/partials/pdp_page_selector.tt
|
226
227
|
- lib/generators/automation/templates/partials/require_raider.tt
|
228
|
+
- lib/generators/automation/templates/partials/selenium_account.tt
|
227
229
|
- lib/generators/automation/templates/partials/selenium_login.tt
|
228
230
|
- lib/generators/automation/templates/partials/url_methods.tt
|
229
231
|
- lib/generators/automation/templates/partials/visit_method.tt
|
232
|
+
- lib/generators/automation/templates/partials/watir_account.tt
|
230
233
|
- lib/generators/automation/templates/partials/watir_login.tt
|
231
234
|
- lib/generators/automation/templates/pdp_page.tt
|
232
235
|
- lib/generators/automation/templates/visual_options.tt
|
@@ -239,7 +242,7 @@ files:
|
|
239
242
|
- lib/generators/cucumber/templates/partials/appium_env.tt
|
240
243
|
- lib/generators/cucumber/templates/partials/driver_world.tt
|
241
244
|
- lib/generators/cucumber/templates/partials/mobile_steps.tt
|
242
|
-
- lib/generators/cucumber/templates/partials/
|
245
|
+
- lib/generators/cucumber/templates/partials/selenium_env.tt
|
243
246
|
- lib/generators/cucumber/templates/partials/watir_env.tt
|
244
247
|
- lib/generators/cucumber/templates/partials/watir_world.tt
|
245
248
|
- lib/generators/cucumber/templates/partials/web_steps.tt
|
@@ -318,7 +321,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
318
321
|
- !ruby/object:Gem::Version
|
319
322
|
version: '0'
|
320
323
|
requirements: []
|
321
|
-
rubygems_version: 3.4.
|
324
|
+
rubygems_version: 3.4.13
|
322
325
|
signing_key:
|
323
326
|
specification_version: 4
|
324
327
|
summary: A gem to make setup and start of UI automation projects easier
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require_relative '../../helpers/driver_helper'
|
2
|
-
|
3
|
-
include Raider::DriverHelper
|
4
|
-
|
5
|
-
Before do
|
6
|
-
new_driver
|
7
|
-
end
|
8
|
-
|
9
|
-
After do |scenario|
|
10
|
-
driver.save_screenshot("allure-results/screenshots/#{scenario.name}.png")
|
11
|
-
Raider::AllureHelper.add_screenshot(scenario.name)
|
12
|
-
driver.quit
|
13
|
-
end
|