ruby_raider 0.1.9 → 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 (107) 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 +27 -14
  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 +116 -43
  67. data/lib/generators/files/automation_file_generator.rb +0 -61
  68. data/lib/generators/files/common_file_generator.rb +0 -38
  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 -70
  72. data/lib/generators/files/rspec_file_generator.rb +0 -29
  73. data/lib/generators/projects/cucumber_project_generator.rb +0 -34
  74. data/lib/generators/projects/project_generator.rb +0 -27
  75. data/lib/generators/projects/rspec_project_generator.rb +0 -26
  76. data/lib/generators/templates/automation/abstract_component_template.rb +0 -22
  77. data/lib/generators/templates/automation/abstract_page_template.rb +0 -82
  78. data/lib/generators/templates/automation/appium_settings_template.rb +0 -16
  79. data/lib/generators/templates/automation/component_template.rb +0 -16
  80. data/lib/generators/templates/automation/confirmation_page_template.rb +0 -26
  81. data/lib/generators/templates/automation/home_page_template.rb +0 -26
  82. data/lib/generators/templates/automation/login_page_template.rb +0 -113
  83. data/lib/generators/templates/common/config_template.rb +0 -9
  84. data/lib/generators/templates/common/gemfile_template.rb +0 -52
  85. data/lib/generators/templates/common/rake_file_template.rb +0 -16
  86. data/lib/generators/templates/common/read_me_template.rb +0 -104
  87. data/lib/generators/templates/cucumber/env_template.rb +0 -38
  88. data/lib/generators/templates/cucumber/example_feature_template.rb +0 -15
  89. data/lib/generators/templates/cucumber/example_steps_template.rb +0 -21
  90. data/lib/generators/templates/helpers/allure_helper_template.rb +0 -47
  91. data/lib/generators/templates/helpers/browser_helper_template.rb +0 -26
  92. data/lib/generators/templates/helpers/driver_helper_template.rb +0 -54
  93. data/lib/generators/templates/helpers/pom_helper_template.rb +0 -25
  94. data/lib/generators/templates/helpers/raider_helper_template.rb +0 -27
  95. data/lib/generators/templates/helpers/selenium_helper_template.rb +0 -42
  96. data/lib/generators/templates/helpers/spec_helper_template.rb +0 -74
  97. data/lib/generators/templates/helpers/watir_helper_template.rb +0 -24
  98. data/lib/generators/templates/rspec/base_spec_template.rb +0 -13
  99. data/lib/generators/templates/rspec/example_spec_template.rb +0 -56
  100. data/lib/generators/templates/template.rb +0 -14
  101. data/spec/automation_file_generator_spec.rb +0 -59
  102. data/spec/common_file_generator_spec.rb +0 -27
  103. data/spec/cucumber_file_generator_spec.rb +0 -26
  104. data/spec/cucumber_project_generator_spec.rb +0 -60
  105. data/spec/helpers_file_generator_spec.rb +0 -73
  106. data/spec/rspec_file_generator_spec.rb +0 -21
  107. data/spec/rspec_project_generator_spec.rb +0 -69
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4dcbe671c993c24b4869fb0243906a8cd5d4614d7ea4690e0292cdb8c67a0b58
4
- data.tar.gz: 39018ac4bf1d1148ad6a5308ca251d54de216154f774955c9c0c5c966b836019
3
+ metadata.gz: f8a66075dc98e049b9a8c541cb9b3c8a14ab15ca217f9bf1829b258ac5984a9f
4
+ data.tar.gz: 85f79fae82e57b2b583be0c0e7398143d56b5bd14bffea3a82f24476a7adf96c
5
5
  SHA512:
6
- metadata.gz: 0c9ae7dce2543807cf14ed1e51f0d81e015ef40b0e9d791209432cc954d55bb3fe39fe297fb43c4a7a07381431bd069ed4b33de98b30328f161ef25538d5ee6d
7
- data.tar.gz: caefa842f497505b6dcfc64e1e35cd27ba4f31f41ec11ac635359acae7540296251b9523054e01fe75d3c247373707a8f669b39eaa2fff3130fc2a8a9e5eef15
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,6 +1,11 @@
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
@@ -23,15 +28,13 @@ module RubyRaider
23
28
  framework = ''
24
29
  @cli.choose do |menu|
25
30
  menu.prompt = 'Please select your test framework'
26
- menu.choice('Rspec') { framework = 'rspec'; set_framework(automation, framework, project_name) }
31
+ menu.choice('Rspec') do
32
+ framework = 'rspec'
33
+ set_framework(automation, framework, project_name)
34
+ end
27
35
  menu.choice('Cucumber') do
28
- if %w[selenium watir].include? automation
29
- framework = 'cucumber'
30
- set_framework(automation, framework, project_name)
31
- else
32
- pp 'We will support iOS with cucumber on the next release'
33
- exit
34
- end
36
+ framework = 'cucumber'
37
+ set_framework(automation, framework, project_name)
35
38
  end
36
39
  menu.choice('Quit') { exit }
37
40
  end
@@ -40,18 +43,28 @@ module RubyRaider
40
43
 
41
44
  def set_framework(automation, framework, project_name)
42
45
  if framework == 'rspec'
43
- RspecProjectGenerator.generate_rspec_project(automation, project_name)
46
+ RspecGenerator.new([automation, framework, project_name]).invoke_all
44
47
  else
45
- CucumberProjectGenerator.generate_cucumber_project(automation, project_name)
48
+ CucumberGenerator.new([automation, framework, project_name]).invoke_all
46
49
  end
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"
47
54
  end
48
55
 
49
56
  def choose_mobile_platform
50
57
  @cli.choose do |menu|
51
58
  menu.prompt = 'Please select your mobile platform'
52
59
  menu.choice('iOS') { 'appium_ios' }
53
- menu.choice('Android') { pp 'Android appium is coming soon. Thank you for the interest'; exit }
54
- menu.choice('Cross Platform') { pp 'Cross platform appium is coming soon. Thank you for the interest'; exit }
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
55
68
  menu.choice('Quit') { exit }
56
69
  end
57
70
  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