ruby_raider 0.7.1 → 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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/generators/automation/automation_examples_generator.rb +6 -1
  4. data/lib/generators/automation/automation_generator.rb +14 -5
  5. data/lib/generators/automation/templates/account_page.tt +5 -0
  6. data/lib/generators/automation/templates/login_page.tt +5 -5
  7. data/lib/generators/automation/templates/partials/selenium_account.tt +17 -0
  8. data/lib/generators/automation/templates/partials/watir_account.tt +15 -0
  9. data/lib/generators/common_generator.rb +3 -3
  10. data/lib/generators/cucumber/cucumber_generator.rb +1 -1
  11. data/lib/generators/cucumber/templates/env.tt +7 -7
  12. data/lib/generators/cucumber/templates/feature.tt +1 -1
  13. data/lib/generators/cucumber/templates/partials/driver_world.tt +10 -6
  14. data/lib/generators/cucumber/templates/partials/selenium_env.tt +44 -0
  15. data/lib/generators/cucumber/templates/partials/watir_env.tt +32 -1
  16. data/lib/generators/cucumber/templates/partials/watir_world.tt +3 -2
  17. data/lib/generators/cucumber/templates/partials/web_steps.tt +8 -3
  18. data/lib/generators/cucumber/templates/steps.tt +3 -3
  19. data/lib/generators/cucumber/templates/world.tt +5 -5
  20. data/lib/generators/generator.rb +25 -4
  21. data/lib/generators/helper_generator.rb +12 -6
  22. data/lib/generators/menu_generator.rb +2 -2
  23. data/lib/generators/rspec/rspec_examples_generator.rb +2 -2
  24. data/lib/generators/rspec/templates/spec.tt +13 -28
  25. data/lib/generators/templates/common/gemfile.tt +3 -4
  26. data/lib/generators/templates/common/read_me.tt +1 -1
  27. data/lib/generators/templates/helpers/allure_helper.tt +5 -4
  28. data/lib/generators/templates/helpers/driver_helper.tt +4 -4
  29. data/lib/generators/templates/helpers/partials/driver_and_options.tt +1 -1
  30. data/lib/generators/templates/helpers/partials/screenshot.tt +3 -6
  31. data/lib/generators/templates/helpers/raider_helper.tt +0 -2
  32. data/lib/generators/templates/helpers/spec_helper.tt +2 -2
  33. data/lib/generators/templates/helpers/visual_spec_helper.tt +5 -9
  34. data/ruby_raider.gemspec +1 -2
  35. data/spec/helpers_generator_spec.rb +0 -10
  36. metadata +7 -18
  37. 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: 3992e1eb1ed53ed3caaf0a9f2b6ce196c7f7cf7a279961df3f7d2e0c281b7016
4
- data.tar.gz: 9d111c46bd5679b1c76460ee52061c6b3cec6241a8db7ca9d71495e84ca5d28a
3
+ metadata.gz: 8710aab0ae8636ca5829f35c5a5d5076002b02caf918284b161816eeda0b6dca
4
+ data.tar.gz: b69e53e10c6bfa0a8132e8975b8ce54cd412bfde5b88d465d244d9241005b4c0
5
5
  SHA512:
6
- metadata.gz: 8dd58f57dda3d02ce6d59e69f6146433822d419b6b7aa5bdeb515bbff2ecbd4eabafd152d2797f6f1ebc660998d31b77545ebc1b7cff98dcf2070e08b36872b3
7
- data.tar.gz: 3e45113f0fe55eb666243220a954aab7e4c1631900c8790a20eaba10c15a590a11f408cb33e4aab29bdbea64ec372df36b0a21c19b8f64d491a284e62cbec1b4
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 Rspec, Applitools and Watir
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 mobile_platform?
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 visual_selected?
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
- <% 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 %>
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 mobile_platform?
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" unless visual_selected?
33
+ empty_directory "#{name}/allure-results"
34
34
  end
35
35
 
36
36
  def create_screenshots_folder
37
- empty_directory "#{name}/allure-results/screenshots" unless visual_selected?
37
+ empty_directory "#{name}/allure-results/screenshots"
38
38
  end
39
39
  end
@@ -8,7 +8,7 @@ class CucumberGenerator < Generator
8
8
  end
9
9
 
10
10
  def generate_world
11
- template('world.tt', "#{name}/world.rb")
11
+ template('world.tt', "#{name}/features/support/world.rb")
12
12
  end
13
13
 
14
14
  def generate_cucumber_file
@@ -1,8 +1,8 @@
1
- <% case automation
1
+ <%- case automation
2
2
  when 'selenium' -%>
3
- <%= ERB.new(File.read(File.expand_path('./partials/selenium_appium_env.tt', __dir__))).result(binding) %>
4
- <% when 'watir' -%>
5
- <%= ERB.new(File.read(File.expand_path('./partials/watir_env.tt', __dir__))).result(binding) %>
6
- <% else -%>
7
- <%= ERB.new(File.read(File.expand_path('./partials/appium_env.tt', __dir__))).result(binding) %>
8
- <% end -%>
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 -%>
@@ -4,7 +4,7 @@ Feature: Login Page
4
4
  Scenario: A user can login
5
5
  Given I'm a registered user on the login page
6
6
  When I login with my credentials
7
- Then I can see the main page
7
+ Then I'm logged in
8
8
 
9
9
  <% else -%>
10
10
  Feature: Home Page
@@ -1,7 +1,11 @@
1
- <% if automation == 'selenium' %>
2
- require_relative 'models/user_factory'
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, UserFactory)
5
- <% else %>
6
- World(DriverHelper)
7
- <% end %>
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,3 +1,4 @@
1
- require_relative 'models/user_factory'
1
+ require_relative '../../helpers/browser_helper'
2
+ require_relative '../../models/user_factory'
2
3
 
3
- World(BrowserHelper, UserFactory)
4
+ World(Raider::BrowserHelper)
@@ -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
- When('I can see the main page') do
17
- expect(@login_page.header.customer_name).to eq "Welcome back #{@user['name']}"
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
- <% if automation == 'watir' %>
2
- <%= ERB.new(File.read(File.expand_path('./partials/watir_world.tt', __dir__))).result(binding).strip! %>
3
- <% else %>
4
- <%= ERB.new(File.read(File.expand_path('./partials/driver_world.tt', __dir__))).result(binding).strip! %>
5
- <% end %>
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 -%>
@@ -19,15 +19,36 @@ class Generator < Thor::Group
19
19
  initializer.first
20
20
  end
21
21
 
22
- def visual_selected?
23
- initializer.first.last
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 mobile_platform?
31
+ def mobile?
27
32
  (args & %w[android ios cross_platform]).count.positive?
28
33
  end
29
34
 
30
- def web_platform?
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 visual_selected?
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
- template('helpers/browser_helper.tt', "#{name}/helpers/browser_helper.rb") if args.include?('watir')
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
- template('helpers/spec_helper.tt', "#{name}/helpers/spec_helper.rb") if args.include?('rspec')
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 args.include?('watir')
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 args.include?('cross_platform')
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 watir].include?(automation_type) && framework == 'Rspec'
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 watir].include?(automation_type) && framework == 'Rspec'
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 mobile_platform?
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 mobile_platform?
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
- <% if %w[selenium watir].include?(automation) && visual_automation == true %>
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) { login_page.header.customer_name }
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 login in' do
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 Rspec, Applitools and Watir
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
- <%= 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! %>
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
- <% if framework == 'rspec' %>
26
+ <%- if framework == 'rspec' -%>
26
27
  def formatter
27
28
  AllureRspecFormatter
28
29
  end
29
- <% end %>
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
- <%= ERB.new(File.read(File.expand_path('./partials/driver_and_options.tt', __dir__)), trim_mode: '-').result(binding).strip! %>
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
- <% if automation != 'selenium' -%>
23
+ <%- if automation != 'selenium' -%>
24
24
  # :reek:UtilityFunction
25
25
  def caps
26
26
  YAML.load_file('config/capabilities.yml')
27
27
  end
28
- <% end -%>
29
- end
28
+ <%- end -%>
29
+ end
30
30
  end
@@ -1,5 +1,5 @@
1
1
  <% if automation == 'selenium' -%>
2
- def new_driver(*opts)
2
+ def new_driver(*opts)
3
3
  @config = YAML.load_file('config/config.yml')
4
4
  browser = @config['browser'].to_sym
5
5
  @driver = Selenium::WebDriver.for(browser, capabilities: browser_options(*opts))
@@ -1,8 +1,5 @@
1
- <% case automation
2
- when 'selenium' %>
1
+ <%- if automation == 'selenium' -%>
3
2
  driver.save_screenshot("allure-results/screenshots/#{example_name}.png")
4
- <% when 'watir' %>
3
+ <%- else -%>
5
4
  browser.screenshot.save("allure-results/screenshots/#{example_name}.png")
6
- <% else %>
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
- <%- if automation == 'selenium' -%>
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(<%- if automation == 'watir' -%>BrowserHelper<% else -%>DriverHelper<%- end -%>)
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/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.1'
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']
@@ -22,7 +22,6 @@ Gem::Specification.new do |s|
22
22
  s.add_development_dependency 'rubocop-rspec', '~> 2.9.0'
23
23
 
24
24
  s.add_runtime_dependency 'faraday', '~> 1.2.0'
25
- s.add_runtime_dependency 'faraday-multipart', '~> 1.0.4'
26
25
  s.add_runtime_dependency 'glimmer-dsl-libui', '~> 0.7.3'
27
26
  s.add_runtime_dependency 'ruby-openai', '~> 3.5'
28
27
  s.add_runtime_dependency 'thor', '~> 1.2.1'
@@ -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.1
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-05 00:00:00.000000000 Z
11
+ date: 2023-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -122,20 +122,6 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 1.2.0
125
- - !ruby/object:Gem::Dependency
126
- name: faraday-multipart
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: 1.0.4
132
- type: :runtime
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 1.0.4
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: glimmer-dsl-libui
141
127
  requirement: !ruby/object:Gem::Requirement
@@ -226,6 +212,7 @@ files:
226
212
  - lib/generators/automation/automation_generator.rb
227
213
  - lib/generators/automation/templates/abstract_component.tt
228
214
  - lib/generators/automation/templates/abstract_page.tt
215
+ - lib/generators/automation/templates/account_page.tt
229
216
  - lib/generators/automation/templates/appium_caps.tt
230
217
  - lib/generators/automation/templates/component.tt
231
218
  - lib/generators/automation/templates/home_page.tt
@@ -238,9 +225,11 @@ files:
238
225
  - lib/generators/automation/templates/partials/ios_caps.tt
239
226
  - lib/generators/automation/templates/partials/pdp_page_selector.tt
240
227
  - lib/generators/automation/templates/partials/require_raider.tt
228
+ - lib/generators/automation/templates/partials/selenium_account.tt
241
229
  - lib/generators/automation/templates/partials/selenium_login.tt
242
230
  - lib/generators/automation/templates/partials/url_methods.tt
243
231
  - lib/generators/automation/templates/partials/visit_method.tt
232
+ - lib/generators/automation/templates/partials/watir_account.tt
244
233
  - lib/generators/automation/templates/partials/watir_login.tt
245
234
  - lib/generators/automation/templates/pdp_page.tt
246
235
  - lib/generators/automation/templates/visual_options.tt
@@ -253,7 +242,7 @@ files:
253
242
  - lib/generators/cucumber/templates/partials/appium_env.tt
254
243
  - lib/generators/cucumber/templates/partials/driver_world.tt
255
244
  - lib/generators/cucumber/templates/partials/mobile_steps.tt
256
- - lib/generators/cucumber/templates/partials/selenium_appium_env.tt
245
+ - lib/generators/cucumber/templates/partials/selenium_env.tt
257
246
  - lib/generators/cucumber/templates/partials/watir_env.tt
258
247
  - lib/generators/cucumber/templates/partials/watir_world.tt
259
248
  - lib/generators/cucumber/templates/partials/web_steps.tt
@@ -332,7 +321,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
332
321
  - !ruby/object:Gem::Version
333
322
  version: '0'
334
323
  requirements: []
335
- rubygems_version: 3.4.8
324
+ rubygems_version: 3.4.13
336
325
  signing_key:
337
326
  specification_version: 4
338
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