ruby_raider 0.1.7 → 0.2.0

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 (104) hide show
  1. checksums.yaml +4 -4
  2. data/.reek.yml +3 -0
  3. data/.rubocop.yml +6 -0
  4. data/Rakefile +2 -0
  5. data/bin/raider +1 -0
  6. data/lib/generators/automation_generator.rb +43 -0
  7. data/lib/generators/common_generator.rb +31 -0
  8. data/lib/generators/cucumber_generator.rb +19 -0
  9. data/lib/generators/generator.rb +16 -0
  10. data/lib/generators/helper_generator.rb +48 -0
  11. data/lib/generators/menu_generator.rb +59 -31
  12. data/lib/generators/rspec_generator.rb +16 -0
  13. data/lib/generators/templates/automation/abstract_component.tt +7 -0
  14. data/lib/generators/templates/automation/abstract_page.tt +10 -0
  15. data/lib/generators/templates/automation/appium_settings.tt +8 -0
  16. data/lib/generators/templates/automation/component.tt +9 -0
  17. data/lib/generators/templates/automation/confirmation_page.tt +19 -0
  18. data/lib/generators/templates/automation/home_page.tt +20 -0
  19. data/lib/generators/templates/automation/login_page.tt +8 -0
  20. data/lib/generators/templates/automation/partials/appium_login.tt +28 -0
  21. data/lib/generators/templates/automation/partials/driver_selector.tt +9 -0
  22. data/lib/generators/templates/automation/partials/element.tt +5 -0
  23. data/lib/generators/templates/automation/partials/require_raider.tt +5 -0
  24. data/lib/generators/templates/automation/partials/selenium_login.tt +40 -0
  25. data/lib/generators/templates/automation/partials/url_methods.tt +13 -0
  26. data/lib/generators/templates/automation/partials/visit_method.tt +9 -0
  27. data/lib/generators/templates/automation/partials/watir_login.tt +41 -0
  28. data/lib/generators/templates/common/config.tt +1 -0
  29. data/lib/generators/templates/common/gemfile.tt +21 -0
  30. data/lib/generators/templates/common/partials/automation_gems.tt +10 -0
  31. data/lib/generators/templates/common/rakefile.tt +10 -0
  32. data/lib/generators/templates/common/read_me.tt +99 -0
  33. data/lib/generators/templates/cucumber/env.tt +8 -0
  34. data/lib/generators/templates/cucumber/feature.tt +6 -0
  35. data/lib/generators/templates/cucumber/partials/appium_env.tt +13 -0
  36. data/lib/generators/templates/cucumber/partials/mobile_steps.tt +17 -0
  37. data/lib/generators/templates/cucumber/partials/selenium_appium_env.tt +13 -0
  38. data/lib/generators/templates/cucumber/partials/watir_env.tt +13 -0
  39. data/lib/generators/templates/cucumber/partials/web_steps.tt +15 -0
  40. data/lib/generators/templates/cucumber/steps.tt +5 -0
  41. data/lib/generators/templates/helpers/allure_helper.tt +32 -0
  42. data/lib/generators/templates/helpers/browser_helper.tt +19 -0
  43. data/lib/generators/templates/helpers/driver_helper.tt +18 -0
  44. data/lib/generators/templates/helpers/partials/allure_imports.tt +5 -0
  45. data/lib/generators/templates/helpers/partials/allure_requirements.tt +6 -0
  46. data/lib/generators/templates/helpers/partials/driver_requirements.tt +14 -0
  47. data/lib/generators/templates/helpers/partials/new_driver.tt +11 -0
  48. data/lib/generators/templates/helpers/partials/quit_driver.tt +8 -0
  49. data/lib/generators/templates/helpers/partials/require_automation.tt +5 -0
  50. data/lib/generators/templates/helpers/partials/screenshot.tt +8 -0
  51. data/lib/generators/templates/helpers/pom_helper.tt +19 -0
  52. data/lib/generators/templates/helpers/raider_helper.tt +15 -0
  53. data/lib/generators/templates/helpers/selenium_helper.tt +36 -0
  54. data/lib/generators/templates/helpers/spec_helper.tt +37 -0
  55. data/lib/generators/templates/helpers/watir_helper.tt +16 -0
  56. data/lib/generators/templates/rspec/base_spec.tt +5 -0
  57. data/lib/generators/templates/rspec/spec.tt +37 -0
  58. data/lib/ruby_raider.rb +5 -4
  59. data/ruby_raider.gemspec +7 -1
  60. data/spec/automation_generator_spec.rb +192 -0
  61. data/spec/common_generator_spec.rb +141 -0
  62. data/spec/cucumber_generator_spec.rb +71 -0
  63. data/spec/helpers_generator_spec.rb +133 -0
  64. data/spec/rspec_generator_spec.rb +63 -0
  65. data/spec/spec_helper.rb +3 -3
  66. metadata +117 -41
  67. data/lib/generators/files/automation_file_generator.rb +0 -38
  68. data/lib/generators/files/common_file_generator.rb +0 -34
  69. data/lib/generators/files/cucumber_file_generator.rb +0 -33
  70. data/lib/generators/files/file_generator.rb +0 -11
  71. data/lib/generators/files/helpers_file_generator.rb +0 -63
  72. data/lib/generators/files/rspec_file_generator.rb +0 -28
  73. data/lib/generators/projects/cucumber_project_generator.rb +0 -26
  74. data/lib/generators/projects/project_generator.rb +0 -13
  75. data/lib/generators/projects/rspec_project_generator.rb +0 -22
  76. data/lib/generators/templates/automation/abstract_component_template.rb +0 -22
  77. data/lib/generators/templates/automation/abstract_page_template.rb +0 -48
  78. data/lib/generators/templates/automation/component_template.rb +0 -16
  79. data/lib/generators/templates/automation/page_template.rb +0 -51
  80. data/lib/generators/templates/common/config_template.rb +0 -9
  81. data/lib/generators/templates/common/gemfile_template.rb +0 -29
  82. data/lib/generators/templates/common/rake_file_template.rb +0 -16
  83. data/lib/generators/templates/common/read_me_template.rb +0 -104
  84. data/lib/generators/templates/cucumber/env_template.rb +0 -38
  85. data/lib/generators/templates/cucumber/example_feature_template.rb +0 -15
  86. data/lib/generators/templates/cucumber/example_steps_template.rb +0 -21
  87. data/lib/generators/templates/helpers/allure_helper_template.rb +0 -47
  88. data/lib/generators/templates/helpers/browser_helper_template.rb +0 -26
  89. data/lib/generators/templates/helpers/driver_helper_template.rb +0 -24
  90. data/lib/generators/templates/helpers/pom_helper_template.rb +0 -25
  91. data/lib/generators/templates/helpers/raider_helper_template.rb +0 -15
  92. data/lib/generators/templates/helpers/selenium_helper_template.rb +0 -42
  93. data/lib/generators/templates/helpers/spec_helper_template.rb +0 -35
  94. data/lib/generators/templates/helpers/watir_helper_template.rb +0 -24
  95. data/lib/generators/templates/rspec/base_spec_template.rb +0 -13
  96. data/lib/generators/templates/rspec/example_spec_template.rb +0 -33
  97. data/lib/generators/templates/template.rb +0 -14
  98. data/spec/automation_file_generator_spec.rb +0 -34
  99. data/spec/common_file_generator_spec.rb +0 -27
  100. data/spec/cucumber_file_generator_spec.rb +0 -26
  101. data/spec/cucumber_project_generator_spec.rb +0 -60
  102. data/spec/helpers_file_generator_spec.rb +0 -73
  103. data/spec/rspec_file_generator_spec.rb +0 -21
  104. data/spec/rspec_project_generator_spec.rb +0 -48
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a9bd00a5bda20ac8d1d05adbe7fe90223dcdfe98f670b7a919a143d76cecbbea
4
- data.tar.gz: bacd7bb799e99f97b00b06176299859661da195a62c534dc388f7edc7159f948
3
+ metadata.gz: f8a66075dc98e049b9a8c541cb9b3c8a14ab15ca217f9bf1829b258ac5984a9f
4
+ data.tar.gz: 85f79fae82e57b2b583be0c0e7398143d56b5bd14bffea3a82f24476a7adf96c
5
5
  SHA512:
6
- metadata.gz: 27ffb1a238e188672c991e8cc23b67e89efbe0c6254edffdd05de8e5523e4e928fab1b403de3c258dd24e4385a7452ecd32892815604a4494ab219ddad6c1fac
7
- data.tar.gz: bc11ab83b8a776d9ccc49227dece33474039e1ef00636356d6d0224697a0bca7753f6b71e0a00d555c865d5d01c5b9504a81a1f0acfeaaf31f9092bef643dbd4
6
+ metadata.gz: e1855740986351c969430dbd7594ba98ab4315ee4eeb9b2ecce6de0f547972d0f841521c9aa0f677e628c6e445b84cd686220ce6c458346bc229f9fdde7f24c0
7
+ data.tar.gz: cb2e11948b28d6b87d013ff19c1c7c2a37f26cb799bcf19e0f1242d70b2c5ab2244f82d92a54ab9fba4b7af4cb4821c4651f69db0ac0a07b1e1feb8fee2c83ba
data/.reek.yml ADDED
@@ -0,0 +1,3 @@
1
+ detectors:
2
+ IrresponsibleModule:
3
+ enabled: false
data/.rubocop.yml ADDED
@@ -0,0 +1,6 @@
1
+ AllCops:
2
+ Exclude:
3
+ - './spec/*'
4
+
5
+ Style/Documentation:
6
+ Enabled: false
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'lib/ruby_raider'
2
4
 
3
5
  desc 'Create a new test projects'
data/bin/raider CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require_relative '../lib/ruby_raider'
4
5
 
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'generator'
4
+
5
+ module RubyRaider
6
+ class AutomationGenerator < Generator
7
+ def generate_login_page
8
+ template('automation/login_page.tt', "#{name}/page_objects/pages/login_page.rb")
9
+ end
10
+
11
+ def generate_abstract_page
12
+ template('automation/abstract_page.tt', "#{name}/page_objects/abstract/abstract_page.rb")
13
+ end
14
+
15
+ def generate_home_page
16
+ template('automation/home_page.tt', "#{name}/page_objects/pages/home_page.rb")
17
+ end
18
+
19
+ def generate_header_component
20
+ unless @_initializer.first.include?('appium_ios')
21
+ template('automation/component.tt', "#{name}/page_objects/components/header_component.rb")
22
+ end
23
+ end
24
+
25
+ def generate_abstract_component
26
+ unless @_initializer.first.include?('appium_ios')
27
+ template('automation/abstract_component.tt', "#{name}/page_objects/abstract/abstract_component.rb")
28
+ end
29
+ end
30
+
31
+ def generate_confirmation_page
32
+ if @_initializer.first.include?('appium_ios')
33
+ template('automation/confirmation_page.tt', "#{name}/page_objects/pages/confirmation_page.rb")
34
+ end
35
+ end
36
+
37
+ def generate_appium_settings
38
+ if @_initializer.first.include?('appium_ios')
39
+ template('automation/appium_settings.tt', "#{name}/appium.txt")
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'generator'
4
+
5
+ module RubyRaider
6
+ class CommonGenerator < Generator
7
+ def generate_readme_file
8
+ template('common/read_me.tt', "#{name}/Readme.md")
9
+ end
10
+
11
+ def generate_config_file
12
+ template('common/config.tt', "#{name}/config/config.yml")
13
+ end
14
+
15
+ def generate_rake_file
16
+ template('common/rakefile.tt', "#{name}/Rakefile")
17
+ end
18
+
19
+ def generate_gemfile
20
+ template('common/gemfile.tt', "#{name}/Gemfile")
21
+ end
22
+
23
+ def create_allure_folder
24
+ empty_directory "#{name}/allure-results"
25
+ end
26
+
27
+ def create_screenshots_folder
28
+ empty_directory "#{name}/allure-results/screenshots"
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'generator'
4
+
5
+ module RubyRaider
6
+ class CucumberGenerator < Generator
7
+ def generate_feature
8
+ template('cucumber/feature.tt', "#{name}/features/login.feature")
9
+ end
10
+
11
+ def generate_steps
12
+ template('cucumber/steps.tt', "#{name}/features/step_definitions/login_steps.rb")
13
+ end
14
+
15
+ def generate_env_file
16
+ template('cucumber/env.tt', "#{name}/features/support/env.rb")
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ require 'thor'
3
+
4
+ module RubyRaider
5
+ class Generator < Thor::Group
6
+ include Thor::Actions
7
+
8
+ argument :automation
9
+ argument :framework
10
+ argument :name
11
+
12
+ def self.source_root
13
+ File.dirname(__FILE__) + '/templates'
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'generator'
4
+
5
+ module RubyRaider
6
+ class HelpersGenerator < Generator
7
+
8
+ def generate_raider_helper
9
+ template('helpers/raider_helper.tt', "#{name}/helpers/raider.rb")
10
+ end
11
+
12
+ def generate_allure_helper
13
+ template('helpers/allure_helper.tt', "#{name}/helpers/allure_helper.rb")
14
+ end
15
+
16
+ def generate_browser_helper
17
+ if @_initializer.first.include?('watir')
18
+ template('helpers/browser_helper.tt', "#{name}/helpers/browser_helper.rb")
19
+ end
20
+ end
21
+
22
+ def generate_pom_helper
23
+ template('helpers/pom_helper.tt', "#{name}/helpers/pom_helper.rb")
24
+ end
25
+
26
+ def generate_spec_helper
27
+ template('helpers/spec_helper.tt', "#{name}/helpers/spec_helper.rb")
28
+ end
29
+
30
+ def generate_watir_helper
31
+ if @_initializer.first.include?('watir')
32
+ template('helpers/watir_helper.tt', "#{name}/helpers/watir_helper.rb")
33
+ end
34
+ end
35
+
36
+ def generate_selenium_helper
37
+ if @_initializer.first.include?('selenium')
38
+ template('helpers/selenium_helper.tt', "#{name}/helpers/selenium_helper.rb")
39
+ end
40
+ end
41
+
42
+ def generate_driver_helper
43
+ unless @_initializer.first.include?('watir')
44
+ template('helpers/driver_helper.tt', "#{name}/helpers/driver_helper.rb")
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,44 +1,72 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'highline'
2
- require_relative '../generators/projects/cucumber_project_generator'
3
- require_relative '../generators/projects/rspec_project_generator'
4
+ require_relative 'automation_generator'
5
+ require_relative 'common_generator'
6
+ require_relative 'cucumber_generator'
7
+ require_relative 'helper_generator'
8
+ require_relative 'rspec_generator'
4
9
 
5
10
  module RubyRaider
6
11
  class MenuGenerator
7
- def self.generate_choice_menu(project_name)
8
- cli = HighLine.new
9
- cli.choose do |menu|
10
- menu.prompt = 'Please select your automation framework'
11
- menu.choice(:Selenium) { choose_test_framework('selenium', project_name) }
12
- menu.choice(:Watir) { choose_test_framework('watir', project_name) }
13
- menu.choice(:Quit, 'Exit program.') { exit }
12
+ class << self
13
+ def generate_choice_menu(project_name)
14
+ @cli = HighLine.new
15
+ @cli.choose do |menu|
16
+ menu.prompt = 'Please select your automation framework'
17
+ menu.choice('Selenium') { choose_test_framework('selenium', project_name) }
18
+ menu.choice('Watir') { choose_test_framework('watir', project_name) }
19
+ menu.choice('Appium') { choose_test_framework('appium', project_name) }
20
+ menu.choice('Quit') { exit }
21
+ end
14
22
  end
15
- end
16
23
 
17
- def self.choose_test_framework(automation, project_name)
18
- system('clear') || system('cls')
19
- sleep 0.3
20
- cli = HighLine.new
21
- framework = ''
22
- cli.choose do |menu|
23
- menu.prompt = 'Please select your test framework'
24
- menu.choice(:Rspec) do
25
- framework = 'rspec'
26
- set_framework(automation, framework, project_name)
24
+ def choose_test_framework(automation, project_name)
25
+ system('clear') || system('cls')
26
+ sleep 0.3
27
+ automation = automation == 'appium' ? choose_mobile_platform : automation
28
+ framework = ''
29
+ @cli.choose do |menu|
30
+ menu.prompt = 'Please select your test framework'
31
+ menu.choice('Rspec') do
32
+ framework = 'rspec'
33
+ set_framework(automation, framework, project_name)
34
+ end
35
+ menu.choice('Cucumber') do
36
+ framework = 'cucumber'
37
+ set_framework(automation, framework, project_name)
38
+ end
39
+ menu.choice('Quit') { exit }
27
40
  end
28
- menu.choice(:Cucumber) do
29
- framework = 'cucumber'
30
- set_framework(automation, framework, project_name)
41
+ @cli.say("You have chosen to use #{framework} with #{automation}")
42
+ end
43
+
44
+ def set_framework(automation, framework, project_name)
45
+ if framework == 'rspec'
46
+ RspecGenerator.new([automation, framework, project_name]).invoke_all
47
+ else
48
+ CucumberGenerator.new([automation, framework, project_name]).invoke_all
31
49
  end
32
- menu.choice(:Quit, 'Exit program.') { exit }
50
+ AutomationGenerator.new([automation, framework, project_name]).invoke_all
51
+ CommonGenerator.new([automation, framework, project_name]).invoke_all
52
+ HelpersGenerator.new([automation, framework, project_name]).invoke_all
53
+ system "cd #{project_name} && gem install bundler && bundle install"
33
54
  end
34
- cli.say("You have chosen to use #{framework} with #{automation}")
35
- end
36
55
 
37
- def self.set_framework(automation, framework, project_name)
38
- if framework == 'rspec'
39
- RspecProjectGenerator.generate_rspec_project(project_name, automation: automation)
40
- else
41
- CucumberProjectGenerator.generate_cucumber_project(project_name, automation: automation)
56
+ def choose_mobile_platform
57
+ @cli.choose do |menu|
58
+ menu.prompt = 'Please select your mobile platform'
59
+ menu.choice('iOS') { 'appium_ios' }
60
+ menu.choice('Android') do
61
+ pp 'Android appium is coming soon. Thank you for the interest'
62
+ exit
63
+ end
64
+ menu.choice('Cross Platform') do
65
+ pp 'Cross platform appium is coming soon. Thank you for the interest'
66
+ exit
67
+ end
68
+ menu.choice('Quit') { exit }
69
+ end
42
70
  end
43
71
  end
44
72
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'generator'
4
+
5
+ module RubyRaider
6
+ class RspecGenerator < Generator
7
+
8
+ def generate_spec
9
+ template('rspec/spec.tt', "#{name}/spec/login_page_spec.rb")
10
+ end
11
+
12
+ def generate_base_spec
13
+ template('rspec/base_spec.tt', "#{name}/spec/base_spec.rb")
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AbstractComponent
4
+ def initialize(component)
5
+ @component = component
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ require 'rspec'
2
+ <%= ERB.new(File.read(File.expand_path('./partials/require_raider.tt', __dir__))).result(binding) %>
3
+
4
+ class AbstractPage
5
+ include RSpec::Matchers
6
+ extend Raider::PomHelper
7
+ <%= ERB.new(File.read(File.expand_path('./partials/driver_selector.tt', __dir__))).result(binding) %>
8
+ <%= ERB.new(File.read(File.expand_path('./partials/visit_method.tt', __dir__))).result(binding) %>
9
+ <%= ERB.new(File.read(File.expand_path('./partials/url_methods.tt', __dir__))).result(binding) %>
10
+ end
@@ -0,0 +1,8 @@
1
+ [caps]
2
+ platformName = "iOS"
3
+ platformVersion = "15.4"
4
+ deviceName = "iPhone SE (3rd generation)"
5
+ app = "TheApp.app"
6
+
7
+ [appium_lib]
8
+ server_url = "http://127.0.0.1:4723/wd/hub"
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../abstract/abstract_component'
4
+
5
+ class HeaderComponent < AbstractComponent
6
+ def customer_name
7
+ @component.text
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../abstract/abstract_page'
4
+
5
+ class ConfirmationPage < AbstractPage
6
+ #Values
7
+
8
+ def login_message
9
+ driver.wait { message_element }.text
10
+ end
11
+
12
+ private
13
+
14
+ # Elements
15
+
16
+ def message_element
17
+ driver.find_element(accessibility_id: 'You are logged in as alice')
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../abstract/abstract_page'
4
+
5
+ class HomePage < AbstractPage
6
+
7
+ #Actions
8
+
9
+ def go_to_login
10
+ driver.wait { login_button_navigator }.click
11
+ end
12
+
13
+ private
14
+
15
+ # Elements
16
+
17
+ def login_button_navigator
18
+ driver.find_element(accessibility_id: 'Login Screen')
19
+ end
20
+ end
@@ -0,0 +1,8 @@
1
+ <% case automation
2
+ when 'selenium' %>
3
+ <%= ERB.new(File.read(File.expand_path('./partials/selenium_login.tt', __dir__))).result(binding) %>
4
+ <% when 'watir' %>
5
+ <%= ERB.new(File.read(File.expand_path('./partials/watir_login.tt', __dir__))).result(binding) %>
6
+ <% else %>
7
+ <%= ERB.new(File.read(File.expand_path('./partials/appium_login.tt', __dir__))).result(binding) %>
8
+ <% end %>
@@ -0,0 +1,28 @@
1
+ require_relative '../abstract/abstract_page'
2
+
3
+ class LoginPage < AbstractPage
4
+
5
+ # Actions
6
+
7
+ def login(username, password)
8
+ username_field.send_keys username
9
+ password_field.send_keys password
10
+ login_button.click
11
+ end
12
+
13
+ private
14
+
15
+ # Elements
16
+
17
+ def username_field
18
+ driver.find_element(xpath: "//XCUIElementTypeTextField[@name=\"username\"]")
19
+ end
20
+
21
+ def password_field
22
+ driver.find_element(xpath: "//XCUIElementTypeSecureTextField[@name=\"password\"]")
23
+ end
24
+
25
+ def login_button
26
+ driver.find_elements(xpath: "//XCUIElementTypeOther[@name=\"loginBtn\"]").last
27
+ end
28
+ end
@@ -0,0 +1,9 @@
1
+ <% if automation == 'watir' %>
2
+ def browser
3
+ Raider::BrowserHelper.browser
4
+ end
5
+ <% else %>
6
+ def driver
7
+ Raider::DriverHelper.driver
8
+ end
9
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <% if %w[selenium appium_ios].include?(automation) %>
2
+ driver.find_element
3
+ <% else %>
4
+ browser.element
5
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <% if framework == 'rspec' %>
2
+ require_relative '../../helpers/raider'
3
+ <% else %>
4
+ require_relative '../../helpers/raider'
5
+ <% end %>
@@ -0,0 +1,40 @@
1
+ require_relative '../abstract/abstract_page'
2
+ require_relative '../components/header_component'
3
+
4
+ class LoginPage < AbstractPage
5
+ using Raider::SeleniumHelper
6
+
7
+ def url(_page)
8
+ 'index.php?rt=account/login'
9
+ end
10
+
11
+ # Actions
12
+
13
+ def login(username, password)
14
+ username_field.send_keys username
15
+ password_field.send_keys password
16
+ login_button.click_when_present
17
+ end
18
+
19
+ # Components
20
+
21
+ def header
22
+ HeaderComponent.new(driver.find_element(class: 'menu_text'))
23
+ end
24
+
25
+ private
26
+
27
+ # Elements
28
+
29
+ def username_field
30
+ driver.find_element(id: 'loginFrm_loginname')
31
+ end
32
+
33
+ def password_field
34
+ driver.find_element(id: 'loginFrm_password')
35
+ end
36
+
37
+ def login_button
38
+ driver.find_element(xpath: "//button[@title='Login']")
39
+ end
40
+ end
@@ -0,0 +1,13 @@
1
+ <% if %w[selenium watir].include?(automation) %>
2
+ def full_url(*page)
3
+ "#{base_url}#{url(*page)}"
4
+ end
5
+
6
+ def base_url
7
+ 'https://automationteststore.com/'
8
+ end
9
+
10
+ def url(_page)
11
+ raise 'Url must be defined on child pages'
12
+ end
13
+ <% end %>
@@ -0,0 +1,9 @@
1
+ <% if %w[selenium watir].include? automation %>
2
+ def visit(*page)
3
+ <% if automation == 'selenium' %>
4
+ driver.navigate.to full_url(page.first)
5
+ <% else %>
6
+ browser.goto full_url(page.first)
7
+ <% end %>
8
+ end
9
+ <% end %>
@@ -0,0 +1,41 @@
1
+ require_relative '../abstract/abstract_page'
2
+ require_relative '../components/header_component'
3
+
4
+ class LoginPage < AbstractPage
5
+ using Raider::WatirHelper
6
+
7
+ def url(_page)
8
+ 'index.php?rt=account/login'
9
+ end
10
+
11
+ # Actions
12
+
13
+ def login(username, password)
14
+ username_field.send_keys username
15
+ password_field.send_keys password
16
+ login_button.click_when_present
17
+ end
18
+
19
+ # Components
20
+
21
+
22
+ def header
23
+ HeaderComponent.new(browser.element(class: 'menu_text'))
24
+ end
25
+
26
+ private
27
+
28
+ # Elements
29
+
30
+ def username_field
31
+ browser.element(id: 'loginFrm_loginname')
32
+ end
33
+
34
+ def password_field
35
+ browser.element(id: 'loginFrm_password')
36
+ end
37
+
38
+ def login_button
39
+ browser.element(xpath: "//button[@title='Login']")
40
+ end
41
+ end
@@ -0,0 +1 @@
1
+ browser: :chrome
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'activesupport'
6
+ gem 'allure-rspec'
7
+ gem 'allure-ruby-commons'
8
+ <% if framework == 'cucumber' %>
9
+ gem 'allure-cucumber'
10
+ <% end %>
11
+ gem 'parallel_split_test'
12
+ gem 'parallel_tests'
13
+ gem 'rake'
14
+ gem '<%= framework %>'
15
+ <% if framework == 'cucumber' %>
16
+ gem 'rspec'
17
+ <% end %>
18
+ <%= ERB.new(File.read(File.expand_path('./partials/automation_gems.tt', __dir__))).result(binding).strip! %>
19
+ <% if %w[selenium watir].include? automation %>
20
+ gem 'webdrivers'
21
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <% case automation
2
+ when 'watir' %>
3
+ gem 'selenium-webdriver'
4
+ gem 'watir'
5
+ <% when 'selenium' %>
6
+ gem 'selenium-webdriver'
7
+ <% else %>
8
+ gem 'appium_lib'
9
+ gem 'appium_console'
10
+ <% end %>
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+
5
+ desc 'Selects browser for automation run'
6
+ task :select_browser, [:browser] do |_t, args|
7
+ config = YAML.load_file('config/config.yml')
8
+ config['browser'] = args.browser
9
+ File.write('config/config.yml', config.to_yaml)
10
+ end