ruby_raider 0.9.2 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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