ruby_raider 0.9.2 → 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -4
  3. data/lib/generators/automation/templates/account.tt +2 -2
  4. data/lib/generators/automation/templates/appium_caps.tt +2 -2
  5. data/lib/generators/automation/templates/home.tt +1 -19
  6. data/lib/generators/automation/templates/login.tt +2 -2
  7. data/lib/generators/automation/templates/page.tt +3 -20
  8. data/lib/generators/automation/templates/partials/element.tt +1 -1
  9. data/lib/generators/automation/templates/partials/home_page_selector.tt +2 -2
  10. data/lib/generators/automation/templates/partials/initialize_selector.tt +1 -1
  11. data/lib/generators/automation/templates/partials/pdp_page_selector.tt +2 -2
  12. data/lib/generators/automation/templates/partials/selenium_login.tt +1 -1
  13. data/lib/generators/automation/templates/partials/url_methods.tt +1 -1
  14. data/lib/generators/automation/templates/partials/visit_method.tt +2 -2
  15. data/lib/generators/automation/templates/pdp.tt +1 -20
  16. data/lib/generators/cucumber/templates/env.tt +6 -7
  17. data/lib/generators/cucumber/templates/feature.tt +7 -3
  18. data/lib/generators/cucumber/templates/partials/appium_env.tt +1 -25
  19. data/lib/generators/cucumber/templates/partials/driver_world.tt +4 -3
  20. data/lib/generators/cucumber/templates/partials/mobile_steps.tt +6 -26
  21. data/lib/generators/cucumber/templates/partials/selenium_env.tt +6 -6
  22. data/lib/generators/cucumber/templates/partials/watir_env.tt +1 -4
  23. data/lib/generators/cucumber/templates/partials/web_steps.tt +10 -3
  24. data/lib/generators/cucumber/templates/steps.tt +3 -3
  25. data/lib/generators/cucumber/templates/world.tt +1 -1
  26. data/lib/generators/generator.rb +17 -7
  27. data/lib/generators/helper_generator.rb +1 -1
  28. data/lib/generators/invoke_generators.rb +2 -6
  29. data/lib/generators/menu_generator.rb +7 -30
  30. data/lib/generators/rspec/rspec_generator.rb +1 -1
  31. data/lib/generators/rspec/templates/spec.tt +7 -24
  32. data/lib/generators/templates/common/config.tt +1 -1
  33. data/lib/generators/templates/common/gemfile.tt +13 -16
  34. data/lib/generators/templates/common/partials/automation_gems.tt +1 -1
  35. data/lib/generators/templates/common/partials/web_config.tt +1 -1
  36. data/lib/generators/templates/common/read_me.tt +0 -4
  37. data/lib/generators/templates/common/rubocop.tt +1 -1
  38. data/lib/generators/templates/helpers/allure_helper.tt +2 -2
  39. data/lib/generators/templates/helpers/driver_helper.tt +9 -30
  40. data/lib/generators/templates/helpers/partials/allure_imports.tt +1 -1
  41. data/lib/generators/templates/helpers/partials/allure_requirements.tt +1 -1
  42. data/lib/generators/templates/helpers/partials/driver_and_options.tt +3 -3
  43. data/lib/generators/templates/helpers/partials/quit_driver.tt +5 -6
  44. data/lib/generators/templates/helpers/partials/screenshot.tt +6 -7
  45. data/lib/generators/templates/helpers/spec_helper.tt +5 -36
  46. data/lib/version +1 -1
  47. metadata +2 -3
  48. data/spec/system/ruby_raider_spec.rb +0 -31
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a195c4ae16c35cc3fe907ad4d309449e4aa38753320ef06a882a4422fd54339
4
- data.tar.gz: 48cd2a4c47981ed649f42baa34502741c3bfda8f6cea9f6e2f0b1789ed59341d
3
+ metadata.gz: d8f98b7b75772a1d20015806b95e8194b357031dc4828181b0d3db2ed3bf9a65
4
+ data.tar.gz: 6ef9b9c02c12d85fc2da88706c92051fc19fd3da4788613038771b4ecbdbe5b6
5
5
  SHA512:
6
- metadata.gz: cbfcfdf432d0811a7609a951a289bbe29e107ecc9eeb21f6f8085f437452a42d8a7c9cdc4166c2de962c1fa23c50968f250176a4f5e49561b59d69e6bd037241
7
- data.tar.gz: 497eed25469773c0cd5345a068428ddf0a1cb5cdd34c952e6ae41f789da41f86e74ec789c31d6d3eadddf574769a655e555efcaa6f7e0ddd771b71ba468525f7
6
+ metadata.gz: 85ab371da3692e9559efaff063b8403716c8f947b93d9504c65cd9ae7531c791c7545c82473661879b35a5896de664d103ca0d41cf526408a66dfc6e18d52700
7
+ data.tar.gz: 417edbb4b68ab62d0eba0d8c6eea8e60ef6df077f168d2d2fafb7019cc7a50b5528c086256b3d3a03c01ccf20abcc0e6018c572cd019c99c964bb5205c5ab4fe
data/README.md CHANGED
@@ -41,10 +41,6 @@ Ruby Raider is a generator and scaffolding gem to make UI test automation easier
41
41
  | Rspec and Watir | | Rspec and Appium for Android |
42
42
  | | | Cucumber and Appium Cross-platform |
43
43
  | | | Rspec and Appium Cross-platform |
44
- | | | Cucumber and Sparkling Watir for IOS |
45
- | | | Rspec and Sparkling Watir for IOS |
46
-
47
-
48
44
 
49
45
  ***In order to run the Appium tests, download the example [app](https://github.com/saucelabs/my-demo-app-rn).***
50
46
  ***Remember to use the full path of the app that you download in the capabilities file and start the server using one of the commands below:***
@@ -1,5 +1,5 @@
1
- <%- if automation == 'selenium' -%>
1
+ <%- if selenium_based? -%>
2
2
  <%=- ERB.new(File.read(File.expand_path('./partials/selenium_account.tt', __dir__)), trim_mode: '-').result(binding) -%>
3
- <%- elsif automation == 'watir' -%>
3
+ <%- elsif watir? -%>
4
4
  <%=- ERB.new(File.read(File.expand_path('./partials/watir_account.tt', __dir__)), trim_mode: '-').result(binding) -%>
5
5
  <%- end -%>
@@ -1,6 +1,6 @@
1
- <% if automation.include?('ios') %>
1
+ <% if ios? %>
2
2
  <%= ERB.new(File.read(File.expand_path('./partials/ios_caps.tt', __dir__))).result(binding) -%>
3
- <% elsif automation == 'android' %>
3
+ <% elsif android? %>
4
4
  <%= ERB.new(File.read(File.expand_path('./partials/android_caps.tt', __dir__))).result(binding) -%>
5
5
  <% else %>
6
6
  <%= ERB.new(File.read(File.expand_path('./partials/cross_platform_caps.tt', __dir__))).result(binding) -%>
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../abstract/page'
4
- <%- if automation == 'sparkling_ios' -%>
5
- class Home < Page
6
-
7
- # Actions
8
4
 
9
- def go_to_backpack_pdp
10
- app.tap on: backpack_image.wait_until(&:present?)
11
- end
12
-
13
- private
14
-
15
- # Elements
16
-
17
- def backpack_image
18
- app.element(predicate: 'label == "Sauce Labs Backpack"')
19
- end
20
- end
21
- <%- else -%>
22
5
  class Home < Page
23
6
 
24
7
  # Actions
@@ -32,7 +15,6 @@ class Home < Page
32
15
  # Elements
33
16
 
34
17
  def backpack_image
35
- <%= ERB.new(File.read(File.expand_path('./partials/home_page_selector.tt', __dir__)), trim_mode: '-').result(binding) %>
18
+ <%= ERB.new(File.read(File.expand_path('./partials/home_page_selector.tt', __dir__)), trim_mode: '-').result(binding) -%>
36
19
  end
37
20
  end
38
- <%- end -%>
@@ -1,5 +1,5 @@
1
- <%- if automation == 'selenium' -%>
1
+ <%- if selenium_based? -%>
2
2
  <%=- ERB.new(File.read(File.expand_path('./partials/selenium_login.tt', __dir__)), trim_mode: '-').result(binding) -%>
3
- <%- elsif automation == 'watir' -%>
3
+ <%- elsif watir? -%>
4
4
  <%=- ERB.new(File.read(File.expand_path('./partials/watir_login.tt', __dir__)), trim_mode: '-').result(binding) -%>
5
5
  <%- end -%>
@@ -1,25 +1,9 @@
1
- <%- if automation == 'sparkling_ios' -%>
2
- require 'sparkling_watir/element'
3
-
4
- class Page
5
-
6
- attr_reader :app
7
-
8
- def initialize(app)
9
- @app = app
10
- end
11
-
12
- def to_s
13
- self.class.to_s.sub('Page', ' Page')
14
- end
15
- end
16
- <%- else -%>
17
1
  <%- if web? -%>
18
2
  require_relative '../components/header'
19
3
  <%- end -%>
20
4
 
21
5
  class Page
22
- <%- if automation == 'cross_platform' -%>
6
+ <%- if cross_platform? -%>
23
7
  include AppiumHelper
24
8
  <%- end -%>
25
9
  <%=- ERB.new(File.read(File.expand_path('./partials/initialize_selector.tt', __dir__))).result(binding) -%>
@@ -30,13 +14,13 @@ class Page
30
14
  self.class.to_s.sub('Page', ' Page')
31
15
  end
32
16
 
33
- <%- if automation == 'selenium' -%>
17
+ <%- if selenium_based? -%>
34
18
  # Components
35
19
 
36
20
  def header
37
21
  Header.new(driver.find_element(id: 'customer_menu_top'))
38
22
  end
39
- <%- elsif automation == 'watir' -%>
23
+ <%- elsif watir? -%>
40
24
  # Components
41
25
 
42
26
  def header
@@ -44,4 +28,3 @@ class Page
44
28
  end
45
29
  <%- end -%>
46
30
  end
47
- <%- end -%>
@@ -1,4 +1,4 @@
1
- <% if %w[selenium appium_ios appium_android].include?(automation) -%>
1
+ <% if %w[selenium axe applitools appium_ios appium_android].include?(automation) -%>
2
2
  driver.find_element
3
3
  <% else -%>
4
4
  browser.element
@@ -1,6 +1,6 @@
1
- <%- if automation == 'ios' -%>
1
+ <%- if ios? -%>
2
2
  driver.find_element(predicate: 'label == "Sauce Labs Backpack"')
3
- <%- elsif automation == 'android' -%>
3
+ <%- elsif android? -%>
4
4
  driver.find_element(xpath: '(//android.view.ViewGroup[@content-desc="store item"])[1]/android.view.ViewGroup[1]')
5
5
  <%- else -%>
6
6
  element(ios: { predicate: 'label == "Sauce Labs Backpack"' },
@@ -1,4 +1,4 @@
1
- <% if automation == 'watir' %>
1
+ <% if watir? %>
2
2
  attr_reader :browser
3
3
 
4
4
  def initialize(browser)
@@ -1,6 +1,6 @@
1
- <%- if automation == 'ios' -%>
1
+ <%- if ios? -%>
2
2
  driver.find_element(accessibility_id: 'Add To Cart button')
3
- <%- elsif automation == 'android' -%>
3
+ <%- elsif android? -%>
4
4
  driver.find_element(xpath: '//android.view.ViewGroup[@content-desc="Add To Cart button"]/android.widget.TextView')
5
5
  <%- else -%>
6
6
  element(ios: { accessibility_id: 'Add To Cart button' },
@@ -31,4 +31,4 @@ class Login < Page
31
31
  def login_button
32
32
  driver.find_element(xpath: "//button[@title='Login']")
33
33
  end
34
- end
34
+ end
@@ -1,4 +1,4 @@
1
- <% if %w[selenium watir].include?(automation) %>
1
+ <% if web? %>
2
2
  def full_url(*page)
3
3
  "#{base_url}#{url(*page)}"
4
4
  end
@@ -1,5 +1,5 @@
1
- <% if %w[selenium watir].include? automation %>
1
+ <% if web? %>
2
2
  def visit(*page)
3
- <% if automation == 'selenium' %>@driver.navigate.to full_url(page.first) <% else %>@browser.goto full_url(page.first)<% end %>
3
+ <% if selenium_based? %>@driver.navigate.to full_url(page.first) <% else %>@browser.goto full_url(page.first)<% end %>
4
4
  end
5
5
  <% end %>
@@ -1,22 +1,4 @@
1
1
  require_relative '../abstract/page'
2
- <%- if automation == 'sparkling_ios' -%>
3
- class Pdp < Page
4
-
5
- # Actions
6
-
7
- def add_to_cart_text
8
- add_to_cart_button.wait_until(&:present?).text
9
- end
10
-
11
- private
12
-
13
- # Elements
14
-
15
- def add_to_cart_button
16
- app.element(accessibility_id: 'Add To Cart button')
17
- end
18
- end
19
- <%- else -%>
20
2
 
21
3
  class Pdp < Page
22
4
 
@@ -31,7 +13,6 @@ class Pdp < Page
31
13
  # Elements
32
14
 
33
15
  def add_to_cart_button
34
- <%= ERB.new(File.read(File.expand_path('./partials/pdp_page_selector.tt', __dir__)), trim_mode: '-').result(binding) %>
16
+ <%= ERB.new(File.read(File.expand_path('./partials/pdp_page_selector.tt', __dir__)), trim_mode: '-').result(binding) -%>
35
17
  end
36
18
  end
37
- <%- end -%>
@@ -1,8 +1,7 @@
1
- <%- case automation
2
- when 'selenium' -%>
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) -%>
1
+ <%- if selenium_based? -%>
2
+ <%= ERB.new(File.read(File.expand_path('./partials/selenium_env.tt', __dir__)), trim_mode: '-').result(binding) -%>
3
+ <%- elsif mobile? -%>
4
+ <%= ERB.new(File.read(File.expand_path('./partials/appium_env.tt', __dir__)), trim_mode: '-').result(binding) -%>
6
5
  <%- else -%>
7
- <%=- ERB.new(File.read(File.expand_path('./partials/appium_env.tt', __dir__)), trim_mode: '-').result(binding) -%>
8
- <%- end -%>
6
+ <%= ERB.new(File.read(File.expand_path('./partials/watir_env.tt', __dir__)), trim_mode: '-').result(binding) -%>
7
+ <%- end -%>
@@ -1,16 +1,20 @@
1
- <% if %w[selenium watir].include? automation -%>
1
+ <%- if web? -%>
2
2
  Feature: Login Page
3
3
 
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
+ <%- if axe? -%>
8
+ Then the page should be axe clean
9
+ <%- else -%>
7
10
  Then I'm logged in
11
+ <% end -%>
8
12
 
9
- <% else -%>
13
+ <%- else -%>
10
14
  Feature: Home Page
11
15
 
12
16
  Scenario: A user can go to the product details page
13
17
  Given I'm an anonymous user on the home page
14
18
  When I select one of the products
15
19
  Then I'm redirected to the product details page
16
- <% end %>
20
+ <%- end %>
@@ -1,28 +1,5 @@
1
- <%- if automation == 'sparkling_ios' -%>
2
1
  require 'tmpdir'
3
2
  require_relative '../../helpers/allure_helper'
4
- require_relative '../../helpers/driver_helper'
5
-
6
- include DriverHelper
7
-
8
- Before do
9
- AllureHelper.configure
10
- app
11
- end
12
-
13
- After do |scenario|
14
- Dir.mktmpdir do |temp_folder|
15
- screenshot = app.screenshot.save("#{temp_folder}/#{scenario.name}.png")
16
- AllureHelper.add_screenshot(scenario.name, screenshot)
17
- end
18
- app.close
19
- end
20
- <%- else -%>
21
- require 'tmpdir'
22
- require_relative '../../helpers/allure_helper'
23
- require_relative '../../helpers/driver_helper'
24
-
25
- include DriverHelper
26
3
 
27
4
  Before do
28
5
  AllureHelper.configure
@@ -35,5 +12,4 @@ After do |scenario|
35
12
  AllureHelper.add_screenshot(scenario.name, screenshot)
36
13
  end
37
14
  driver.quit_driver
38
- end
39
- <%- end -%>
15
+ end
@@ -1,11 +1,12 @@
1
1
  require_relative '../../helpers/driver_helper'
2
- <%- if visual_automation -%>
2
+ <%- if visual? -%>
3
3
  require_relative '../../helpers/visual_helper'
4
4
  <%- end -%>
5
- <%- if automation == 'selenium' -%>
5
+ <%- if selenium_based? -%>
6
6
  require_relative '../../models/user_factory'
7
7
 
8
- World(DriverHelper<%- if visual_automation -%>, VisualHelper<%- end -%>)
8
+ World(DriverHelper<%- if visual? -%>, VisualHelper<%- end -%>)
9
9
  <%- else -%>
10
+
10
11
  World(DriverHelper)
11
12
  <%- end -%>
@@ -1,40 +1,20 @@
1
- <%- if automation == 'sparkling_ios' -%>
2
1
  # frozen_string_literal: true
3
2
 
4
- require_relative '../../page_objects/pages/home'
5
- require_relative '../../page_objects/pages/pdp'
6
-
7
- Given("I'm an anonymous user on the home page") do
8
- @home_page = Home.new(app)
9
- end
10
-
11
- When('I select one of the products') do
12
- @home_page.go_to_backpack_pdp
13
- end
14
-
15
- When("I'm redirected to the product details page") do
16
- pdp_page = Pdp.new(app)
17
- expect(pdp_page.add_to_cart_text).to eq 'Add To Cart'
18
- end
19
- <%- else -%>
20
- # frozen_string_literal: true
21
-
22
- <% if automation == 'cross_platform' -%>
3
+ <%- if cross_platform? -%>
23
4
  require_relative '../../helpers/appium_helper'
24
5
  <%- end -%>
25
6
  require_relative '../../page_objects/pages/home'
26
7
  require_relative '../../page_objects/pages/pdp'
27
8
 
28
9
  Given("I'm an anonymous user on the home page") do
29
- @home_page = Home.new(driver)
10
+ @home_page = Home.new(driver)
30
11
  end
31
12
 
32
13
  When('I select one of the products') do
33
- @home_page.go_to_backpack_pdp
14
+ @home_page.go_to_backpack_pdp
34
15
  end
35
16
 
36
- When("I'm redirected to the product details page") do
37
- pdp_page = Pdp.new(driver)
38
- expect(pdp_page.add_to_cart_text).to eq 'Add To Cart'
17
+ Then("I'm redirected to the product details page") do
18
+ pdp_page = Pdp.new(driver)
19
+ expect(pdp_page.add_to_cart_text).to eq 'Add To Cart'
39
20
  end
40
- <%- end -%>
@@ -1,5 +1,5 @@
1
- <%- if visual_automation -%>
2
1
  # frozen_string_literal: true
2
+ <%- if visual? -%>
3
3
 
4
4
  require 'tmpdir'
5
5
  require_relative '../../helpers/allure_helper'
@@ -30,14 +30,14 @@ After do |scenario|
30
30
  end
31
31
 
32
32
  <%- else -%>
33
- # frozen_string_literal: true
34
33
 
34
+ <%- if axe? && cucumber? -%>
35
+ require 'axe-rspec'
36
+ <%- end -%>
37
+ require 'rspec'
35
38
  require 'tmpdir'
36
- require_relative '../../helpers/driver_helper'
37
39
  require_relative '../../helpers/allure_helper'
38
40
 
39
- include DriverHelper
40
-
41
41
  Before do
42
42
  driver.manage.window.maximize
43
43
  end
@@ -49,4 +49,4 @@ After do |scenario|
49
49
  end
50
50
  driver.quit
51
51
  end
52
- <%- end -%>
52
+ <%- end -%>
@@ -2,9 +2,6 @@
2
2
 
3
3
  require 'tmpdir'
4
4
  require_relative '../../helpers/allure_helper'
5
- require_relative '../../helpers/browser_helper'
6
-
7
- include BrowserHelper
8
5
 
9
6
  Before do
10
7
  browser.window.maximize
@@ -16,4 +13,4 @@ After do |scenario|
16
13
  AllureHelper.add_screenshot(scenario.name, screenshot)
17
14
  end
18
15
  browser.quit
19
- end
16
+ end
@@ -5,7 +5,7 @@ require_relative '../../page_objects/pages/login'
5
5
 
6
6
  Given("I'm a {user} on the login page") do |user|
7
7
  @user = user
8
- @login_page = Login.new(<% if automation == 'watir' %>browser<% else %>driver<% end %>)
8
+ @login_page = Login.new(<% if watir? %>browser<% else %>driver<% end %>)
9
9
  @login_page.visit
10
10
  end
11
11
 
@@ -13,11 +13,18 @@ When('I login with my credentials') do
13
13
  @login_page.login(@user['username'], @user['password'])
14
14
  end
15
15
 
16
+ <%- if axe? -%>
17
+ Then('the page should be axe clean') do
18
+ account = Account.new(driver)
19
+ expect(account.page).to be_axe_clean
20
+ end
21
+ <%- else -%>
16
22
  Then("I'm logged in") do
17
- account_page = Account.new(<% if automation == 'watir' %>browser<% else %>driver<% end %>)
18
- <%- if visual_automation == true -%>
23
+ account_page = Account.new(<% if watir? %>browser<% else %>driver<% end %>)
24
+ <%- if visual? -%>
19
25
  check_page account_page
20
26
  <%- else -%>
21
27
  expect(account_page.header.customer_name).to eq "Welcome back #{@user['name']}"
22
28
  <%- end -%>
23
29
  end
30
+ <%- end -%>
@@ -1,5 +1,5 @@
1
- <% if %w[selenium watir].include? automation -%>
1
+ <%- if web? -%>
2
2
  <%= ERB.new(File.read(File.expand_path('./partials/web_steps.tt', __dir__)), trim_mode: '-').result(binding).strip! -%>
3
- <% else -%>
3
+ <%- else -%>
4
4
  <%= ERB.new(File.read(File.expand_path('./partials/mobile_steps.tt', __dir__)), trim_mode: '-').result(binding).strip! -%>
5
- <% end -%>
5
+ <%- end -%>
@@ -1,4 +1,4 @@
1
- <%- if automation == 'watir' -%>
1
+ <%- if watir? -%>
2
2
  <%=- ERB.new(File.read(File.expand_path('./partials/watir_world.tt', __dir__)), trim_mode: '-').result(binding).strip! -%>
3
3
  <%- else -%>
4
4
  <%=- ERB.new(File.read(File.expand_path('./partials/driver_world.tt', __dir__)), trim_mode: '-').result(binding).strip! -%>
@@ -8,8 +8,6 @@ class Generator < Thor::Group
8
8
  argument :automation
9
9
  argument :framework
10
10
  argument :name
11
- argument :visual_automation, optional: true
12
- argument :axe_support, optional: true
13
11
 
14
12
  def self.source_paths
15
13
  base_path = File.dirname(__FILE__)
@@ -31,11 +29,19 @@ class Generator < Thor::Group
31
29
  end
32
30
 
33
31
  def mobile?
34
- (args & %w[android ios cross_platform sparkling_ios]).count.positive?
32
+ (args & %w[android ios cross_platform]).count.positive?
35
33
  end
36
34
 
37
35
  def single_platform?
38
- (args & %w[android ios sparkling_ios]).count.positive?
36
+ (args & %w[android ios]).count.positive?
37
+ end
38
+
39
+ def ios?
40
+ args.include?('ios')
41
+ end
42
+
43
+ def android?
44
+ args.include?('android')
39
45
  end
40
46
 
41
47
  def rspec?
@@ -47,7 +53,7 @@ class Generator < Thor::Group
47
53
  end
48
54
 
49
55
  def visual?
50
- args[3]
56
+ args.include?('applitools')
51
57
  end
52
58
 
53
59
  def watir?
@@ -55,11 +61,15 @@ class Generator < Thor::Group
55
61
  end
56
62
 
57
63
  def web?
58
- (args & (%w[selenium watir])).count.positive?
64
+ (args & (%w[selenium watir axe applitools])).count.positive?
59
65
  end
60
66
 
61
67
  def axe?
62
- args.last
68
+ args.include?('axe')
69
+ end
70
+
71
+ def selenium_based?
72
+ (args & %w[selenium axe applitools]).count.positive?
63
73
  end
64
74
 
65
75
  private
@@ -24,7 +24,7 @@ class HelpersGenerator < Generator
24
24
  end
25
25
 
26
26
  def generate_browser_helper
27
- return if selenium? || mobile?
27
+ return if selenium_based? || mobile?
28
28
 
29
29
  template('helpers/browser_helper.tt', "#{name}/helpers/browser_helper.rb")
30
30
  end
@@ -19,9 +19,7 @@ module InvokeGenerators
19
19
  automation: structure[:automation],
20
20
  framework:,
21
21
  generator:,
22
- name: structure[:name],
23
- visual: to_bool(structure[:visual]),
24
- axe_support: to_bool(structure[:axe_support])
22
+ name: structure[:name]
25
23
  })
26
24
  end
27
25
  end
@@ -34,9 +32,7 @@ module InvokeGenerators
34
32
  Object.const_get("#{structure[:generator]}Generator")
35
33
  .new([structure[:automation],
36
34
  structure[:framework],
37
- structure[:name],
38
- structure[:visual],
39
- structure[:axe_support]]).invoke_all
35
+ structure[:name]]).invoke_all
40
36
  end
41
37
 
42
38
  def to_bool(string)
@@ -21,17 +21,8 @@ class MenuGenerator
21
21
  end
22
22
  end
23
23
 
24
- def choose_visual_automation
25
- prompt.select('Do you want to add visual automation with Applitools?', yes_no_menu_choices)
26
- end
27
-
28
- def choose_axe_support
29
- prompt.select('Do you want to add Axe accessibility testing tool?', yes_no_menu_choices)
30
- end
31
-
32
24
  def choose_test_framework(automation)
33
25
  return choose_mobile_platform if automation == 'appium'
34
- return choose_sparkling_platform if automation == 'sparkling'
35
26
 
36
27
  select_test_framework(automation)
37
28
  end
@@ -40,21 +31,12 @@ class MenuGenerator
40
31
  structure = {
41
32
  automation: options[:automation],
42
33
  framework: options[:framework],
43
- name: @name,
44
- visual: options[:visual_automation],
45
- axe_support: options[:axe_support]
34
+ name: @name
46
35
  }
47
36
  generate_framework(structure)
48
37
  system "cd #{name} && gem install bundler && bundle install"
49
38
  end
50
39
 
51
- def choose_sparkling_platform
52
- prompt.select('Please select your mobile platform') do |menu|
53
- menu.choice :iOS, -> { choose_test_framework 'sparkling_ios' }
54
- menu.choice :Quit, -> { exit }
55
- end
56
- end
57
-
58
40
  def choose_mobile_platform
59
41
  prompt.select('Please select your mobile platform') do |menu|
60
42
  menu.choice :iOS, -> { choose_test_framework 'ios' }
@@ -74,26 +56,20 @@ class MenuGenerator
74
56
  end
75
57
  end
76
58
 
77
- FrameworkOptions = Struct.new(:automation, :framework, :visual_automation, :axe_support)
59
+ FrameworkOptions = Struct.new(:automation, :framework)
78
60
 
79
61
  def create_framework_options(params)
80
- FrameworkOptions.new(params[:automation], params[:framework], params[:visual_automation], params[:axe_support])
62
+ FrameworkOptions.new(params[:automation], params[:framework])
81
63
  end
82
64
 
83
65
  def create_framework(framework, automation_type)
84
- visual_automation = choose_visual_automation if %w[selenium].include?(automation_type)
85
- axe = choose_axe_support if automation_type == 'selenium' && framework == 'Rspec' && visual_automation == false
86
66
  options = create_framework_options(automation: automation_type,
87
- framework: framework.downcase,
88
- visual_automation:,
89
- axe_support: axe)
67
+ framework: framework.downcase)
90
68
 
91
69
  # Print the chosen options
92
70
  puts 'Chosen Options:'
93
71
  puts " Automation Type: #{options[:automation]}"
94
72
  puts " Framework: #{options[:framework]}"
95
- puts " Visual Automation: #{options[:visual_automation]}"
96
- puts " Axe Support: #{options[:axe_support]}"
97
73
 
98
74
  set_up_framework(options)
99
75
  prompt.say("You have chosen to use #{framework} with #{automation_type}")
@@ -108,10 +84,11 @@ class MenuGenerator
108
84
  end
109
85
 
110
86
  def select_automation_framework(menu)
111
- menu.choice :Appium, -> { choose_test_framework('appium') }
112
87
  menu.choice :Selenium, -> { choose_test_framework('selenium') }
113
- menu.choice 'Sparkling Watir', -> { choose_test_framework('sparkling') }
88
+ menu.choice :Appium, -> { choose_test_framework('appium') }
114
89
  menu.choice :Watir, -> { choose_test_framework('watir') }
90
+ menu.choice :Applitools, -> { choose_test_framework('applitools') }
91
+ menu.choice :Axe, -> { choose_test_framework('axe') }
115
92
  menu.choice :Quit, -> { exit }
116
93
  end
117
94
  end
@@ -4,7 +4,7 @@ require_relative '../generator'
4
4
 
5
5
  class RspecGenerator < Generator
6
6
  def generate_login_spec
7
- return unless web?
7
+ return unless web? && !visual?
8
8
 
9
9
  template('spec.tt', "#{name}/spec/login_page_spec.rb")
10
10
  end
@@ -1,4 +1,4 @@
1
- <%- if %w[selenium watir].include? automation -%>
1
+ <%- if selenium_based? || watir? -%>
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require_relative '../helpers/spec_helper'
@@ -33,13 +33,13 @@ describe 'Login' do
33
33
  end
34
34
  end
35
35
  end
36
- <%- elsif %w[selenium watir].include? automation -%>
36
+ <%- elsif selenium_based? || watir? -%>
37
37
  describe 'Login' do
38
38
  subject(:header) { account_page.header.customer_name }
39
39
 
40
40
  let(:user) { ModelFactory.for('users')['registered user'] }
41
- let(:login_page) { Login.new(<% if automation == 'watir' -%>browser<% else -%>driver<% end -%>) }
42
- let(:account_page) { Account.new(<% if automation == 'watir' -%>browser<% else -%>driver<% end -%>) }
41
+ let(:login_page) { Login.new(<% if watir? -%>browser<% else -%>driver<% end -%>) }
42
+ let(:account_page) { Account.new(<% if watir? -%>browser<% else -%>driver<% end -%>) }
43
43
 
44
44
  before do
45
45
  login_page.visit
@@ -50,7 +50,7 @@ describe 'Login' do
50
50
  let(:password) { user['password'] }
51
51
 
52
52
  it 'can successfully log in' do
53
- <%- if visual_automation == true -%>
53
+ <%- if visual? -%>
54
54
  check_page account_page
55
55
  <%- else -%>
56
56
  expect(header).to eq "Welcome back #{user['name']}"
@@ -62,7 +62,7 @@ describe 'Login' do
62
62
  let(:password) { 'wrongPassword' }
63
63
 
64
64
  it 'cannot log in' do
65
- <%- if visual_automation == true -%>
65
+ <%- if visual? -%>
66
66
  check_page login_page
67
67
  <%- else -%>
68
68
  expect(header).to eq 'Login or register'
@@ -71,25 +71,8 @@ describe 'Login' do
71
71
  end
72
72
  end
73
73
  <%- end -%>
74
- <%- elsif automation == 'sparkling_ios' -%>
75
- require_relative '../helpers/spec_helper'
76
- require_relative '../page_objects/pages/home'
77
- require_relative '../page_objects/pages/pdp'
78
-
79
- class PdpSpec
80
- describe 'PDP page' do
81
-
82
- let(:home_page) { Home.new(app) }
83
- let(:pdp_page) { Pdp.new(app) }
84
-
85
- it 'shows add to cart button' do
86
- home_page.go_to_backpack_pdp
87
- expect(pdp_page.add_to_cart_text).to eq 'Add To Cart'
88
- end
89
- end
90
- end
91
74
  <%- else -%>
92
- <% if automation == 'cross_platform' -%>
75
+ <% if cross_platform? -%>
93
76
  require_relative '../helpers/appium_helper'
94
77
  <%- end -%>
95
78
  require_relative '../helpers/spec_helper'
@@ -1,4 +1,4 @@
1
- <% if %w[ios android cross_platform].include?(automation) -%>
1
+ <% if mobile? -%>
2
2
  <%= ERB.new(File.read(File.expand_path('./partials/mobile_config.tt', __dir__))).result(binding) %>
3
3
  <% else -%>
4
4
  <%= ERB.new(File.read(File.expand_path('./partials/web_config.tt', __dir__)), trim_mode: '-').result(binding) %>
@@ -1,36 +1,33 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'activesupport'
4
- <% if framework == 'cucumber' -%>
4
+ <%- if cucumber? -%>
5
5
  gem 'allure-cucumber'
6
- <% else -%>
6
+ <%- else -%>
7
7
  gem 'allure-rspec'
8
8
  gem 'allure-ruby-commons'
9
- <% end -%>
10
- <% if axe? -%>
9
+ <%- end -%>
10
+ <%- if axe? -%>
11
11
  gem 'axe-core-rspec'
12
12
  gem 'axe-core-selenium'
13
- <% end -%>
14
- <% if visual_automation -%>
13
+ <%- end -%>
14
+ <%- if visual? -%>
15
15
  gem 'eyes_selenium', '~> 4.6', '>= 4.6.1'
16
16
  gem 'eyes_universal', '~> 3.3', '>= 3.3.1'
17
- <% end -%>
18
- <% unless visual_automation -%>
17
+ <%- end -%>
18
+ <%- unless visual? -%>
19
19
  gem 'parallel_split_test'
20
20
  gem 'parallel_tests'
21
- <% end -%>
21
+ <%- end -%>
22
22
  gem 'rake'
23
23
  gem 'reek'
24
24
  gem '<%= framework %>'
25
- <% if framework == 'cucumber' -%>
25
+ <%- if cucumber? -%>
26
26
  gem 'rspec'
27
- <% end -%>
27
+ <%- end -%>
28
28
  gem 'rubocop'
29
- <% if framework == 'rspec' -%>
29
+ <%- if rspec? -%>
30
30
  gem 'rubocop-rspec'
31
- <% end -%>
31
+ <%- end -%>
32
32
  gem 'ruby_raider', '~> 0.9.0'
33
33
  <%= ERB.new(File.read(File.expand_path('./partials/automation_gems.tt', __dir__))).result(binding).strip! %>
34
- <% if automation == 'sparkling_ios' -%>
35
- gem 'sparkling_watir'
36
- <% end -%>
@@ -2,7 +2,7 @@
2
2
  when 'watir' %>
3
3
  gem 'selenium-webdriver'
4
4
  gem 'watir'
5
- <% when 'selenium' %>
5
+ <% when selenium_based? %>
6
6
  gem 'selenium-webdriver'
7
7
  <% else %>
8
8
  gem 'appium_lib'
@@ -1,7 +1,7 @@
1
1
  browser: :chrome
2
2
  url: 'https://automationteststore.com/'
3
3
 
4
- <%- if automation == 'selenium' -%>
4
+ <%- if selenium_based? -%>
5
5
  driver_options:
6
6
  :timeouts:
7
7
  :implicit: 10000 # 10 seconds
@@ -35,10 +35,6 @@ Ruby Raider is a generator and scaffolding gem to make UI test automation easier
35
35
  | Rspec and Watir | | Rspec and Appium for Android |
36
36
  | | | Cucumber and Appium Cross-platform |
37
37
  | | | Rspec and Appium Cross-platform |
38
- | | | Cucumber and Sparkling Watir for IOS |
39
- | | | Rspec and Sparkling Watir for IOS |
40
-
41
-
42
38
 
43
39
  ***In order to run the Appium tests, download the example [app](https://github.com/saucelabs/my-demo-app-rn).***
44
40
  ***Remember to use the full path of the app that you download in the capabilities file and start the server using one of the commands below:***
@@ -1,4 +1,4 @@
1
- <% if framework == 'rspec' -%>
1
+ <% if rspec? -%>
2
2
  require:
3
3
  - rubocop-rspec
4
4
  <% end -%>
@@ -21,11 +21,11 @@ module AllureHelper
21
21
  test_case: true
22
22
  )
23
23
  end
24
+ <%- if rspec? -%>
24
25
 
25
- <%- if framework == 'rspec' -%>
26
26
  def formatter
27
27
  AllureRspecFormatter
28
28
  end
29
- <%- end -%>
29
+ <%- end -%>
30
30
  end
31
31
  end
@@ -1,48 +1,28 @@
1
- <%- if automation == 'sparkling_ios' -%>
2
- # frozen_string_literal: true
3
- require 'yaml'
4
- require 'sparkling_watir'
5
-
6
- module DriverHelper
7
- def app
8
- @app ||= create_app
9
- end
10
-
11
- private
12
-
13
- def create_app
14
- @app = SparklingWatir::App.new(caps: caps)
15
- end
16
-
17
- # :reek:UtilityFunction
18
- def caps
19
- YAML.load_file('config/capabilities.yml')
20
- end
21
- end
22
- <%- else -%>
23
1
  # frozen_string_literal: true
24
2
  <% if axe? -%>
25
3
  require 'axe-selenium'
26
4
  <% end -%>
27
5
  require 'yaml'
28
- <% if automation == 'selenium' -%>
6
+ <%- unless axe? %>
7
+ <%- if selenium_based? -%>
29
8
  require 'active_support/inflector'
30
9
  require 'selenium-webdriver'
31
- <% else -%>
10
+ <%- else -%>
32
11
  require 'appium_lib'
33
- <% end -%>
12
+ <%- end -%>
13
+ <%- end -%>
34
14
 
35
15
  module DriverHelper
36
- <% if automation == 'selenium' && axe? == false -%>
16
+ <%- if selenium_based? && !axe? -%>
37
17
  def driver(*opts)
38
18
  @driver ||= create_driver(*opts)
39
19
  end
40
- <% elsif axe? == true -%>
20
+ <%- elsif axe? -%>
41
21
  def driver(browser = :chrome, js_path = nil, skip_iframes = nil)
42
22
  @driver ||= create_driver(browser, js_path, skip_iframes)
43
23
  end
44
- <% else -%>
45
- def driver
24
+ <%- else -%>
25
+ def driver
46
26
  @driver ||= create_driver
47
27
  end
48
28
  <%- end -%>
@@ -51,4 +31,3 @@ def driver
51
31
 
52
32
  <%= ERB.new(File.read(File.expand_path('./partials/driver_and_options.tt', __dir__)), trim_mode: '-').result(binding).strip! %>
53
33
  end
54
- <%- end -%>
@@ -1,4 +1,4 @@
1
- <% if framework == 'rspec' %>
1
+ <% if rspec? %>
2
2
  AllureRspec
3
3
  <% else %>
4
4
  AllureCucumber
@@ -1,4 +1,4 @@
1
- <% if framework == 'cucumber' %>
1
+ <% if cucumber? %>
2
2
  require 'allure-cucumber'
3
3
  <% else %>
4
4
  require 'allure-ruby-commons'
@@ -1,11 +1,11 @@
1
- <% if automation == 'selenium' && axe? == true -%>
1
+ <% if axe? -%>
2
2
  def create_driver(browser, js_path, skip_iframes)
3
3
  AxeSelenium.configure(browser) do |config|
4
4
  config.jslib_path = js_path if js_path
5
5
  config.skip_iframes = skip_iframes if skip_iframes
6
6
  end.page
7
7
  end
8
- <% elsif automation == 'selenium' -%>
8
+ <% elsif selenium_based? -%>
9
9
  def create_driver(*opts)
10
10
  @config = YAML.load_file('config/config.yml')
11
11
  browser = @config['browser'].to_sym
@@ -29,7 +29,7 @@
29
29
  driver_options.each { |opt| options.add_option(opt.first, opt.last) }
30
30
  options
31
31
  end
32
- <% elsif automation == 'cross_platform' -%>
32
+ <% elsif cross_platform? -%>
33
33
  def create_driver
34
34
  @driver = Appium::Driver.new({ caps: parsed_caps })
35
35
  end
@@ -1,8 +1,7 @@
1
- <% case automation
2
- when 'selenium' %>
3
- driver.quit
4
- <% when 'watir' %>
5
- browser.quit
1
+ <% if selenium_based? %>
2
+ driver.quit
3
+ <% elsif watir? %>
4
+ browser.quit
6
5
  <% else %>
7
- driver.quit_driver
6
+ driver.quit_driver
8
7
  <% end %>
@@ -1,8 +1,7 @@
1
- <% case automation
2
- when 'selenium' %>
3
- screenshot = driver.save_screenshot("#{temp_folder}/#{example_name}.png")
4
- <% when 'watir' %>
5
- screenshot = browser.screenshot.save("#{temp_folder}/#{example_name}.png")
1
+ <% if selenium_based? %>
2
+ screenshot = driver.save_screenshot("#{temp_folder}/#{example_name}.png")
3
+ <% elsif watir? %>
4
+ screenshot = browser.screenshot.save("#{temp_folder}/#{example_name}.png")
6
5
  <% else %>
7
- screenshot = driver.screenshot("#{temp_folder}/#{example_name}.png")
8
- <% end %>
6
+ screenshot = driver.screenshot("#{temp_folder}/#{example_name}.png")
7
+ <% end %>
@@ -1,33 +1,3 @@
1
- <%- if automation == 'sparkling_ios' -%>
2
- # frozen_string_literal: true
3
-
4
- require 'rspec'
5
- require 'tmpdir'
6
- require_relative 'allure_helper'
7
- require_relative 'driver_helper'
8
- require 'sparkling_watir'
9
-
10
- module SpecHelper
11
-
12
- AllureHelper.configure
13
- RSpec.configure do |config|
14
- config.formatter = AllureHelper.formatter
15
- config.include(DriverHelper)
16
- config.before(:each) do
17
- app
18
- end
19
-
20
- config.after(:each) do |example|
21
- example_name = example.description
22
- Dir.mktmpdir do |temp_folder|
23
- screenshot = app.screenshot.save("#{temp_folder}/#{example_name}.png")
24
- AllureHelper.add_screenshot(example_name, screenshot)
25
- end
26
- app.close
27
- end
28
- end
29
- end
30
- <%- else -%>
31
1
  # frozen_string_literal: true
32
2
 
33
3
  <%- if axe? %>
@@ -36,7 +6,7 @@ require 'axe-rspec'
36
6
  require 'rspec'
37
7
  require 'tmpdir'
38
8
  require_relative 'allure_helper'
39
- <%- if automation == 'watir' -%>
9
+ <%- if watir? -%>
40
10
  require_relative 'browser_helper'
41
11
  <%- else -%>
42
12
  require_relative 'driver_helper'
@@ -47,16 +17,16 @@ module SpecHelper
47
17
  AllureHelper.configure
48
18
  RSpec.configure do |config|
49
19
  config.formatter = AllureHelper.formatter
50
- <% if automation == 'watir' %>config.include(BrowserHelper)<% else %>config.include(DriverHelper)<% end %>
51
- <%- if %w[android ios cross_platform].include? automation -%>
20
+ <% if watir? %>config.include(BrowserHelper)<% else %>config.include(DriverHelper)<% end %>
21
+ <%- if mobile? -%>
52
22
  config.before(:each) do
53
23
  driver.start_driver
54
24
  end
55
- <%- elsif automation == 'selenium' -%>
25
+ <%- elsif selenium_based? -%>
56
26
  config.before(:each) do
57
27
  driver.manage.window.maximize
58
28
  end
59
- <%- elsif automation == 'watir' -%>
29
+ <%- elsif watir? -%>
60
30
  config.before(:each) do
61
31
  browser.window.maximize
62
32
  end
@@ -72,4 +42,3 @@ module SpecHelper
72
42
  end
73
43
  end
74
44
  end
75
- <%- end -%>
data/lib/version CHANGED
@@ -1 +1 @@
1
- 0.9.2
1
+ 0.9.4
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.9.2
4
+ version: 0.9.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: 2024-07-14 00:00:00.000000000 Z
11
+ date: 2024-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -242,7 +242,6 @@ files:
242
242
  - spec/integration/generators/rspec_generator_spec.rb
243
243
  - spec/spec_helper.rb
244
244
  - spec/support/settings_helper.rb
245
- - spec/system/ruby_raider_spec.rb
246
245
  homepage: https://github.com/RubyRaider/ruby_raider
247
246
  licenses:
248
247
  - MIT
@@ -1,31 +0,0 @@
1
- require 'fileutils'
2
- require_relative '../spec_helper'
3
- require_relative '../../lib/ruby_raider'
4
-
5
- describe RubyRaider do
6
- shared_examples 'execute web frameworks' do |name|
7
- it 'runs the tests' do
8
- if ENV['CI']
9
- Dir.chdir(name) { system('gem install bundler && bundle install && raider u raid') }
10
- else
11
- Bundler.with_unbundled_env { Dir.chdir(name) { system('bundle exec raider u raid') } }
12
- end
13
- end
14
- end
15
-
16
- context 'with a Rspec and Selenium project' do
17
- include_examples 'execute web frameworks', "#{FRAMEWORKS.last}_#{AUTOMATION_TYPES[2]}"
18
- end
19
-
20
- context 'with a Rspec and Watir project' do
21
- include_examples 'execute web frameworks', "#{FRAMEWORKS.last}_#{AUTOMATION_TYPES[3]}"
22
- end
23
-
24
- context 'with a Cucumber and Selenium project' do
25
- include_examples 'execute web frameworks', "#{FRAMEWORKS.first}_#{AUTOMATION_TYPES[2]}"
26
- end
27
-
28
- context 'with a Cucumber and Watir project' do
29
- include_examples 'execute web frameworks', "#{FRAMEWORKS.first}_#{AUTOMATION_TYPES[3]}"
30
- end
31
- end