ruby_raider 0.1.8 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/.reek.yml +3 -0
  3. data/.rubocop.yml +6 -0
  4. data/README.md +5 -6
  5. data/Rakefile +2 -0
  6. data/bin/raider +1 -0
  7. data/lib/generators/automation_generator.rb +43 -0
  8. data/lib/generators/common_generator.rb +31 -0
  9. data/lib/generators/cucumber_generator.rb +19 -0
  10. data/lib/generators/generator.rb +16 -0
  11. data/lib/generators/helper_generator.rb +48 -0
  12. data/lib/generators/menu_generator.rb +59 -31
  13. data/lib/generators/rspec_generator.rb +16 -0
  14. data/lib/generators/templates/automation/abstract_component.tt +7 -0
  15. data/lib/generators/templates/automation/abstract_page.tt +10 -0
  16. data/lib/generators/templates/automation/appium_settings.tt +8 -0
  17. data/lib/generators/templates/automation/component.tt +9 -0
  18. data/lib/generators/templates/automation/confirmation_page.tt +19 -0
  19. data/lib/generators/templates/automation/home_page.tt +20 -0
  20. data/lib/generators/templates/automation/login_page.tt +8 -0
  21. data/lib/generators/templates/automation/partials/appium_login.tt +28 -0
  22. data/lib/generators/templates/automation/partials/driver_selector.tt +9 -0
  23. data/lib/generators/templates/automation/partials/element.tt +5 -0
  24. data/lib/generators/templates/automation/partials/require_raider.tt +5 -0
  25. data/lib/generators/templates/automation/partials/selenium_login.tt +40 -0
  26. data/lib/generators/templates/automation/partials/url_methods.tt +13 -0
  27. data/lib/generators/templates/automation/partials/visit_method.tt +9 -0
  28. data/lib/generators/templates/automation/partials/watir_login.tt +41 -0
  29. data/lib/generators/templates/common/config.tt +1 -0
  30. data/lib/generators/templates/common/gemfile.tt +19 -0
  31. data/lib/generators/templates/common/partials/automation_gems.tt +10 -0
  32. data/lib/generators/templates/common/rakefile.tt +8 -0
  33. data/lib/generators/templates/common/read_me.tt +97 -0
  34. data/lib/generators/templates/cucumber/env.tt +8 -0
  35. data/lib/generators/templates/cucumber/feature.tt +6 -0
  36. data/lib/generators/templates/cucumber/partials/appium_env.tt +13 -0
  37. data/lib/generators/templates/cucumber/partials/mobile_steps.tt +17 -0
  38. data/lib/generators/templates/cucumber/partials/selenium_appium_env.tt +13 -0
  39. data/lib/generators/templates/cucumber/partials/watir_env.tt +13 -0
  40. data/lib/generators/templates/cucumber/partials/web_steps.tt +15 -0
  41. data/lib/generators/templates/cucumber/steps.tt +5 -0
  42. data/lib/generators/templates/helpers/allure_helper.tt +32 -0
  43. data/lib/generators/templates/helpers/browser_helper.tt +19 -0
  44. data/lib/generators/templates/helpers/driver_helper.tt +18 -0
  45. data/lib/generators/templates/helpers/partials/allure_imports.tt +5 -0
  46. data/lib/generators/templates/helpers/partials/allure_requirements.tt +6 -0
  47. data/lib/generators/templates/helpers/partials/driver_requirements.tt +14 -0
  48. data/lib/generators/templates/helpers/partials/new_driver.tt +11 -0
  49. data/lib/generators/templates/helpers/partials/quit_driver.tt +8 -0
  50. data/lib/generators/templates/helpers/partials/require_automation.tt +5 -0
  51. data/lib/generators/templates/helpers/partials/screenshot.tt +8 -0
  52. data/lib/generators/templates/helpers/pom_helper.tt +19 -0
  53. data/lib/generators/templates/helpers/raider_helper.tt +15 -0
  54. data/lib/generators/templates/helpers/selenium_helper.tt +36 -0
  55. data/lib/generators/templates/helpers/spec_helper.tt +37 -0
  56. data/lib/generators/templates/helpers/watir_helper.tt +16 -0
  57. data/lib/generators/templates/rspec/base_spec.tt +5 -0
  58. data/lib/generators/templates/rspec/spec.tt +37 -0
  59. data/lib/ruby_raider.rb +5 -4
  60. data/ruby_raider.gemspec +7 -1
  61. data/spec/automation_generator_spec.rb +192 -0
  62. data/spec/common_generator_spec.rb +141 -0
  63. data/spec/cucumber_generator_spec.rb +71 -0
  64. data/spec/helpers_generator_spec.rb +133 -0
  65. data/spec/rspec_generator_spec.rb +63 -0
  66. data/spec/spec_helper.rb +3 -3
  67. metadata +116 -40
  68. data/lib/generators/files/automation_file_generator.rb +0 -38
  69. data/lib/generators/files/common_file_generator.rb +0 -34
  70. data/lib/generators/files/cucumber_file_generator.rb +0 -33
  71. data/lib/generators/files/file_generator.rb +0 -11
  72. data/lib/generators/files/helpers_file_generator.rb +0 -63
  73. data/lib/generators/files/rspec_file_generator.rb +0 -28
  74. data/lib/generators/projects/cucumber_project_generator.rb +0 -26
  75. data/lib/generators/projects/project_generator.rb +0 -13
  76. data/lib/generators/projects/rspec_project_generator.rb +0 -22
  77. data/lib/generators/templates/automation/abstract_component_template.rb +0 -22
  78. data/lib/generators/templates/automation/abstract_page_template.rb +0 -48
  79. data/lib/generators/templates/automation/component_template.rb +0 -16
  80. data/lib/generators/templates/automation/page_template.rb +0 -51
  81. data/lib/generators/templates/common/config_template.rb +0 -9
  82. data/lib/generators/templates/common/gemfile_template.rb +0 -29
  83. data/lib/generators/templates/common/rake_file_template.rb +0 -16
  84. data/lib/generators/templates/common/read_me_template.rb +0 -104
  85. data/lib/generators/templates/cucumber/env_template.rb +0 -38
  86. data/lib/generators/templates/cucumber/example_feature_template.rb +0 -15
  87. data/lib/generators/templates/cucumber/example_steps_template.rb +0 -21
  88. data/lib/generators/templates/helpers/allure_helper_template.rb +0 -47
  89. data/lib/generators/templates/helpers/browser_helper_template.rb +0 -26
  90. data/lib/generators/templates/helpers/driver_helper_template.rb +0 -24
  91. data/lib/generators/templates/helpers/pom_helper_template.rb +0 -25
  92. data/lib/generators/templates/helpers/raider_helper_template.rb +0 -15
  93. data/lib/generators/templates/helpers/selenium_helper_template.rb +0 -42
  94. data/lib/generators/templates/helpers/spec_helper_template.rb +0 -35
  95. data/lib/generators/templates/helpers/watir_helper_template.rb +0 -24
  96. data/lib/generators/templates/rspec/base_spec_template.rb +0 -13
  97. data/lib/generators/templates/rspec/example_spec_template.rb +0 -33
  98. data/lib/generators/templates/template.rb +0 -14
  99. data/spec/automation_file_generator_spec.rb +0 -34
  100. data/spec/common_file_generator_spec.rb +0 -27
  101. data/spec/cucumber_file_generator_spec.rb +0 -26
  102. data/spec/cucumber_project_generator_spec.rb +0 -60
  103. data/spec/helpers_file_generator_spec.rb +0 -73
  104. data/spec/rspec_file_generator_spec.rb +0 -21
  105. data/spec/rspec_project_generator_spec.rb +0 -48
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aed816df5e1abdc73f27322835a3ca84a2f5238a0a7d6c0a9905fe766fe8a78f
4
- data.tar.gz: 041d4cac7ed5dbffa13369b65fa59b275ceaddbdae7b75149e2780eb2befc6e4
3
+ metadata.gz: 0b04a44917cee86583a600c29b50bba9214fe5b9a34681d067fb55aa93ae13bd
4
+ data.tar.gz: ad70c90273a5325f1802aea66fc86341482b1f150085d995477c4f509632eecf
5
5
  SHA512:
6
- metadata.gz: 15f03089c0d4b633e647c802baaa93777eb9bfcc259023b63adb81ab6415b89e5488a5d043aa1234957e9570d22f3f82870d5e4d563ade1577d5a82b12eba2b5
7
- data.tar.gz: 2a133387a4d7533f9b654aded174b64c56feb19a6ee2e860953d5c8dbac4c781ff0f86d798db03e31add9ab6eb9abc97a95e3c2c436197d1f6fdcbbf078737e4
6
+ metadata.gz: 27bf3532138c0968c054168bb6ae882d2bdb83d8e9e1f532e8812d976f4d374eeba3c922c417b7a22ce7d2e3ba7e07669752dc70a5a6abeafc8e0fa49ed8ab3e
7
+ data.tar.gz: 5b5d47f815aac25972ee74389c295eaa8033ff972a1d829ce4be3e7f54c7bdbd531e1dd6a0e7a9d02a9c69a119d3d8b4af148e6a39231f51e9fc3c7a3b6e399d
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/README.md CHANGED
@@ -13,11 +13,10 @@ and you will have a new project in the folder you are in
13
13
 
14
14
  Currently we only support:
15
15
 
16
- * Gerating a Selenium with Rspec framework
17
- * Gerating a Watir with Rspec framework
16
+ * Gerating a Selenium with both Cucumber and Rspec framework
17
+ * Gerating a Watir with both Cucumber and Rspec framework
18
+ * Generating an Appium project with Rspec and Cucumber on IOS
18
19
 
19
- We have only tested this in mac and linux, so it works in both platforms.
20
+ In order to run the appium tests, download the example [app](https://github.com/cloudgrey-io/the-app/releases/tag/v1.10.0)
20
21
 
21
- If you wanna follow the development progress
22
-
23
- https://trello.com/b/Nj7UPy0w/ruby-raider
22
+ This works in all the platforms (Tested on Mac OS, Linux and Windows)
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,19 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'activesupport'
4
+ gem 'allure-rspec'
5
+ gem 'allure-ruby-commons'
6
+ <% if framework == 'cucumber' %>
7
+ gem 'allure-cucumber'
8
+ <% end %>
9
+ gem 'parallel_split_test'
10
+ gem 'parallel_tests'
11
+ gem 'rake'
12
+ gem '<%= framework %>'
13
+ <% if framework == 'cucumber' %>
14
+ gem 'rspec'
15
+ <% end %>
16
+ <%= ERB.new(File.read(File.expand_path('./partials/automation_gems.tt', __dir__))).result(binding).strip! %>
17
+ <% if %w[selenium watir].include? automation %>
18
+ gem 'webdrivers'
19
+ <% 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,8 @@
1
+ require 'yaml'
2
+
3
+ desc 'Selects browser for automation run'
4
+ task :select_browser, [:browser] do |_t, args|
5
+ config = YAML.load_file('config/config.yml')
6
+ config['browser'] = args.browser
7
+ File.write('config/config.yml', config.to_yaml)
8
+ end