ruby_raider 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/files/automation_file_generator.rb +33 -10
  3. data/lib/generators/files/common_file_generator.rb +10 -6
  4. data/lib/generators/files/cucumber_file_generator.rb +4 -4
  5. data/lib/generators/files/helpers_file_generator.rb +17 -10
  6. data/lib/generators/files/rspec_file_generator.rb +8 -7
  7. data/lib/generators/menu_generator.rb +44 -29
  8. data/lib/generators/projects/cucumber_project_generator.rb +18 -10
  9. data/lib/generators/projects/project_generator.rb +14 -0
  10. data/lib/generators/projects/rspec_project_generator.rb +12 -8
  11. data/lib/generators/templates/automation/abstract_page_template.rb +66 -32
  12. data/lib/generators/templates/automation/appium_settings_template.rb +16 -0
  13. data/lib/generators/templates/automation/confirmation_page_template.rb +26 -0
  14. data/lib/generators/templates/automation/home_page_template.rb +26 -0
  15. data/lib/generators/templates/automation/login_page_template.rb +113 -0
  16. data/lib/generators/templates/common/gemfile_template.rb +41 -18
  17. data/lib/generators/templates/helpers/driver_helper_template.rb +37 -7
  18. data/lib/generators/templates/helpers/raider_helper_template.rb +15 -3
  19. data/lib/generators/templates/helpers/spec_helper_template.rb +46 -7
  20. data/lib/generators/templates/rspec/example_spec_template.rb +44 -21
  21. data/ruby_raider.gemspec +1 -1
  22. data/spec/automation_file_generator_spec.rb +52 -27
  23. data/spec/common_file_generator_spec.rb +1 -1
  24. data/spec/cucumber_file_generator_spec.rb +1 -1
  25. data/spec/cucumber_project_generator_spec.rb +1 -1
  26. data/spec/helpers_file_generator_spec.rb +2 -2
  27. data/spec/rspec_file_generator_spec.rb +1 -1
  28. data/spec/rspec_project_generator_spec.rb +53 -32
  29. metadata +6 -3
  30. data/lib/generators/templates/automation/page_template.rb +0 -51
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aed816df5e1abdc73f27322835a3ca84a2f5238a0a7d6c0a9905fe766fe8a78f
4
- data.tar.gz: 041d4cac7ed5dbffa13369b65fa59b275ceaddbdae7b75149e2780eb2befc6e4
3
+ metadata.gz: 4dcbe671c993c24b4869fb0243906a8cd5d4614d7ea4690e0292cdb8c67a0b58
4
+ data.tar.gz: 39018ac4bf1d1148ad6a5308ca251d54de216154f774955c9c0c5c966b836019
5
5
  SHA512:
6
- metadata.gz: 15f03089c0d4b633e647c802baaa93777eb9bfcc259023b63adb81ab6415b89e5488a5d043aa1234957e9570d22f3f82870d5e4d563ade1577d5a82b12eba2b5
7
- data.tar.gz: 2a133387a4d7533f9b654aded174b64c56feb19a6ee2e860953d5c8dbac4c781ff0f86d798db03e31add9ab6eb9abc97a95e3c2c436197d1f6fdcbbf078737e4
6
+ metadata.gz: 0c9ae7dce2543807cf14ed1e51f0d81e015ef40b0e9d791209432cc954d55bb3fe39fe297fb43c4a7a07381431bd069ed4b33de98b30328f161ef25538d5ee6d
7
+ data.tar.gz: caefa842f497505b6dcfc64e1e35cd27ba4f31f41ec11ac635359acae7540296251b9523054e01fe75d3c247373707a8f669b39eaa2fff3130fc2a8a9e5eef15
@@ -1,22 +1,31 @@
1
1
  require_relative 'file_generator'
2
2
  require_relative '../templates/automation/abstract_page_template'
3
3
  require_relative '../templates/automation/abstract_component_template'
4
+ require_relative '../templates/automation/appium_settings_template'
4
5
  require_relative '../templates/automation/component_template'
5
- require_relative '../templates/automation/page_template'
6
+ require_relative '../templates/automation/confirmation_page_template'
7
+ require_relative '../templates/automation/login_page_template'
8
+ require_relative '../templates/automation/home_page_template'
6
9
 
7
10
  module RubyRaider
8
11
  class AutomationFileGenerator < FileGenerator
9
12
  class << self
10
- def generate_automation_files(name, automation, framework)
11
- generate_example_page(automation, name)
13
+ def generate_automation_files(automation, name, framework)
14
+ generate_login_page(automation, name)
12
15
  generate_abstract_page(automation, framework, name)
13
- generate_example_component(name)
14
- generate_abstract_component(framework, name)
16
+ if %w[selenium watir].include?(automation)
17
+ generate_example_component(name)
18
+ generate_abstract_component(framework, name)
19
+ else
20
+ generate_home_page(name)
21
+ generate_confirmation_page(name)
22
+ generate_appium_settings(name)
23
+ end
15
24
  end
16
25
 
17
- def generate_example_page(automation, name)
26
+ def generate_login_page(automation, name)
18
27
  generate_file('login_page.rb', "#{name}/page_objects/pages",
19
- PageTemplate.new(automation: automation, name: name).parsed_body)
28
+ LoginPageTemplate.new(automation: automation, name: name).parsed_body)
20
29
  end
21
30
 
22
31
  def generate_abstract_page(automation, framework, name)
@@ -24,15 +33,29 @@ module RubyRaider
24
33
  AbstractPageTemplate.new(automation: automation, framework: framework, name: name).parsed_body)
25
34
  end
26
35
 
36
+ def generate_home_page(name)
37
+ generate_file('home_page.rb', "#{name}/page_objects/pages",
38
+ HomePageTemplate.new.parsed_body)
39
+ end
40
+
41
+ def generate_confirmation_page(name)
42
+ generate_file('confirmation_page.rb', "#{name}/page_objects/pages",
43
+ ConfirmationPageTemplate.new.parsed_body)
44
+ end
45
+
27
46
  def generate_example_component(name)
28
- generate_file('header_component.rb',"#{name}/page_objects/components",
29
- ComponentTemplate.new.parsed_body)
47
+ generate_file('header_component.rb', "#{name}/page_objects/components",
48
+ ComponentTemplate.new.parsed_body)
30
49
  end
31
50
 
32
51
  def generate_abstract_component(framework, name)
33
- generate_file('abstract_component.rb',"#{name}/page_objects/abstract",
52
+ generate_file('abstract_component.rb', "#{name}/page_objects/abstract",
34
53
  AbstractComponentTemplate.new(framework: framework).parsed_body)
35
54
  end
55
+
56
+ def generate_appium_settings(name)
57
+ generate_file('appium.txt', name.to_s, AppiumSettingsTemplate.new.parsed_body)
58
+ end
36
59
  end
37
60
  end
38
61
  end
@@ -7,11 +7,14 @@ require_relative 'file_generator'
7
7
  module RubyRaider
8
8
  class CommonFileGenerator < FileGenerator
9
9
  class << self
10
- def generate_common_files(name, framework)
11
- generate_config_file(name)
12
- generate_rake_file(name)
10
+ def generate_common_files(automation, name, framework)
11
+ if %w[selenium watir].include?(automation)
12
+ generate_config_file(name)
13
+ generate_rake_file(name)
14
+ end
15
+
13
16
  generate_readme_file(name)
14
- generate_gemfile(framework, name)
17
+ generate_gemfile(automation, framework, name)
15
18
  end
16
19
 
17
20
  def generate_readme_file(name)
@@ -26,8 +29,9 @@ module RubyRaider
26
29
  generate_file('Rakefile', name.to_s, RakeFileTemplate.new.parsed_body)
27
30
  end
28
31
 
29
- def generate_gemfile(framework, name)
30
- generate_file('Gemfile',name.to_s, GemfileTemplate.new(framework: framework).parsed_body)
32
+ def generate_gemfile(automation, framework, name)
33
+ generate_file('Gemfile',name.to_s,
34
+ GemfileTemplate.new(automation: automation, framework: framework).parsed_body)
31
35
  end
32
36
  end
33
37
  end
@@ -6,10 +6,10 @@ require_relative 'file_generator'
6
6
  module RubyRaider
7
7
  class CucumberFileGenerator < FileGenerator
8
8
  class << self
9
- def generate_cucumber_files(name, automation)
10
- AutomationFileGenerator.generate_automation_files(name, automation, 'framework')
11
- CommonFileGenerator.generate_common_files(name, 'cucumber')
12
- HelpersFileGenerator.generate_helper_files(name, automation, 'cucumber')
9
+ def generate_cucumber_files(automation, name)
10
+ AutomationFileGenerator.generate_automation_files(automation, name, 'framework')
11
+ CommonFileGenerator.generate_common_files(automation, name, 'cucumber')
12
+ HelpersFileGenerator.generate_helper_files(automation, name, 'cucumber')
13
13
  generate_env_file(automation, name)
14
14
  generate_example_feature(name)
15
15
  generate_example_steps(name)
@@ -11,19 +11,13 @@ require_relative 'file_generator'
11
11
  module RubyRaider
12
12
  class HelpersFileGenerator < FileGenerator
13
13
  class << self
14
- def generate_helper_files(name, automation, framework)
14
+ def generate_helper_files(automation, name, framework)
15
15
  path = framework == 'rspec' ? "#{name}/helpers" : "#{name}/features/support/helpers"
16
16
  generate_raider_helper(automation, framework, path)
17
17
  generate_allure_helper(framework, path)
18
18
  generate_pom_helper(path)
19
19
  generate_spec_helper(automation, path) if framework == 'rspec'
20
- if automation == 'watir'
21
- generate_watir_helper(path)
22
- generate_browser_helper(path)
23
- else
24
- generate_selenium_helper(path)
25
- generate_driver_helper(path)
26
- end
20
+ select_helpers(automation, path)
27
21
  end
28
22
 
29
23
  def generate_raider_helper(automation, framework, path)
@@ -55,8 +49,21 @@ module RubyRaider
55
49
  generate_file('selenium_helper.rb', path, SeleniumHelperTemplate.new.parsed_body)
56
50
  end
57
51
 
58
- def generate_driver_helper(path)
59
- generate_file('driver_helper.rb', path, DriverHelperTemplate.new.parsed_body)
52
+ def generate_driver_helper(automation, path)
53
+ generate_file('driver_helper.rb', path, DriverHelperTemplate.new(automation: automation).parsed_body)
54
+ end
55
+
56
+ def select_helpers(automation, path)
57
+ case automation
58
+ when 'watir'
59
+ generate_watir_helper(path)
60
+ generate_browser_helper(path)
61
+ when 'selenium'
62
+ generate_selenium_helper(path)
63
+ generate_driver_helper(automation, path)
64
+ else
65
+ generate_driver_helper(automation, path)
66
+ end
60
67
  end
61
68
  end
62
69
  end
@@ -8,16 +8,17 @@ require_relative 'helpers_file_generator'
8
8
  module RubyRaider
9
9
  class RspecFileGenerator < FileGenerator
10
10
  class << self
11
- def generate_rspec_files(name, automation)
12
- AutomationFileGenerator.generate_automation_files(name, automation, 'rspec')
13
- CommonFileGenerator.generate_common_files(name, 'rspec')
14
- HelpersFileGenerator.generate_helper_files(name, automation, 'rspec')
11
+ def generate_rspec_files(automation, name)
12
+ AutomationFileGenerator.generate_automation_files(automation, name,'rspec')
13
+ CommonFileGenerator.generate_common_files(automation, name, 'rspec')
14
+ HelpersFileGenerator.generate_helper_files(automation, name, 'rspec')
15
15
  generate_base_spec(name)
16
- generate_example_spec(name)
16
+ generate_example_spec(automation, name)
17
17
  end
18
18
 
19
- def generate_example_spec(name)
20
- generate_file('login_page_spec.rb', "#{name}/spec", ExampleSpecTemplate.new.parsed_body)
19
+ def generate_example_spec(automation, name)
20
+ generate_file('login_page_spec.rb', "#{name}/spec",
21
+ ExampleSpecTemplate.new(automation: automation).parsed_body)
21
22
  end
22
23
 
23
24
  def generate_base_spec(name)
@@ -4,41 +4,56 @@ require_relative '../generators/projects/rspec_project_generator'
4
4
 
5
5
  module RubyRaider
6
6
  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 }
7
+ class << self
8
+ def generate_choice_menu(project_name)
9
+ @cli = HighLine.new
10
+ @cli.choose do |menu|
11
+ menu.prompt = 'Please select your automation framework'
12
+ menu.choice('Selenium') { choose_test_framework('selenium', project_name) }
13
+ menu.choice('Watir') { choose_test_framework('watir', project_name) }
14
+ menu.choice('Appium') { choose_test_framework('appium', project_name) }
15
+ menu.choice('Quit') { exit }
16
+ end
14
17
  end
15
- end
16
18
 
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)
19
+ def choose_test_framework(automation, project_name)
20
+ system('clear') || system('cls')
21
+ sleep 0.3
22
+ automation = automation == 'appium' ? choose_mobile_platform : automation
23
+ framework = ''
24
+ @cli.choose do |menu|
25
+ menu.prompt = 'Please select your test framework'
26
+ menu.choice('Rspec') { framework = 'rspec'; set_framework(automation, framework, project_name) }
27
+ 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
35
+ end
36
+ menu.choice('Quit') { exit }
27
37
  end
28
- menu.choice(:Cucumber) do
29
- framework = 'cucumber'
30
- set_framework(automation, framework, project_name)
38
+ @cli.say("You have chosen to use #{framework} with #{automation}")
39
+ end
40
+
41
+ def set_framework(automation, framework, project_name)
42
+ if framework == 'rspec'
43
+ RspecProjectGenerator.generate_rspec_project(automation, project_name)
44
+ else
45
+ CucumberProjectGenerator.generate_cucumber_project(automation, project_name)
31
46
  end
32
- menu.choice(:Quit, 'Exit program.') { exit }
33
47
  end
34
- cli.say("You have chosen to use #{framework} with #{automation}")
35
- end
36
48
 
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)
49
+ def choose_mobile_platform
50
+ @cli.choose do |menu|
51
+ menu.prompt = 'Please select your mobile platform'
52
+ 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 }
55
+ menu.choice('Quit') { exit }
56
+ end
42
57
  end
43
58
  end
44
59
  end
@@ -4,22 +4,30 @@ require_relative 'project_generator'
4
4
  module RubyRaider
5
5
  class CucumberProjectGenerator < ProjectGenerator
6
6
  class << self
7
- def generate_cucumber_project(name, automation: 'watir')
8
- cucumber_folder_structure(name)
9
- CucumberFileGenerator.generate_cucumber_files(name, automation)
7
+ def generate_cucumber_project(automation, name)
8
+ cucumber_folder_structure(automation, name)
9
+ CucumberFileGenerator.generate_cucumber_files(automation, name)
10
10
  ProjectGenerator.install_gems(name)
11
11
  end
12
12
 
13
- def cucumber_folder_structure(name)
14
- Dir.mkdir name.to_s
15
- folders = %w[features config page_objects allure-results]
13
+ def cucumber_folder_structure(automation, name)
14
+ create_project_folder(name)
15
+ create_base_folders(automation, name)
16
+ create_features_child_folders(name)
17
+ Dir.mkdir "#{name}/features/support/helpers"
18
+ create_po_child_folders(automation, name)
19
+ Dir.mkdir "#{name}/allure-results/screenshots"
20
+ end
21
+
22
+ def create_base_folders(automation, name)
23
+ folders = %w[features page_objects allure-results]
16
24
  create_children_folders("#{name}", folders)
25
+ Dir.mkdir "#{name}/config" if %w[selenium watir].include?(automation)
26
+ end
27
+
28
+ def create_features_child_folders(name)
17
29
  folders = %w[step_definitions support]
18
30
  create_children_folders("#{name}/features", folders)
19
- Dir.mkdir "#{name}/features/support/helpers"
20
- folders = %w[abstract pages components]
21
- create_children_folders("#{name}/page_objects", folders)
22
- Dir.mkdir "#{name}/allure-results/screenshots"
23
31
  end
24
32
  end
25
33
  end
@@ -8,6 +8,20 @@ module RubyRaider
8
8
  def install_gems(name)
9
9
  system "cd #{name} && gem install bundler && bundle install"
10
10
  end
11
+
12
+ def create_project_folder(name)
13
+ Dir.mkdir name.to_s
14
+ end
15
+
16
+ def create_base_folders
17
+ raise 'Please specify the base folders for the projects'
18
+ end
19
+
20
+ def create_po_child_folders(automation, name)
21
+ folders = %w[pages abstract]
22
+ create_children_folders("#{name}/page_objects", folders)
23
+ Dir.mkdir "#{name}/page_objects/components" if %w[selenium watir].include?(automation)
24
+ end
11
25
  end
12
26
  end
13
27
  end
@@ -4,18 +4,22 @@ require_relative '../files/rspec_file_generator'
4
4
  module RubyRaider
5
5
  class RspecProjectGenerator < ProjectGenerator
6
6
  class << self
7
- def generate_rspec_project(name, automation: 'watir')
8
- rspec_folder_structure(name)
9
- RspecFileGenerator.generate_rspec_files(name, automation)
7
+ def generate_rspec_project(automation, name)
8
+ rspec_folder_structure(automation, name)
9
+ RspecFileGenerator.generate_rspec_files(automation, name)
10
10
  ProjectGenerator.install_gems(name)
11
11
  end
12
12
 
13
- def rspec_folder_structure(name)
14
- Dir.mkdir name.to_s
15
- folders = %w[config data page_objects helpers spec]
13
+ def rspec_folder_structure(automation, name)
14
+ create_project_folder(name)
15
+ create_base_folders(automation, name)
16
+ create_po_child_folders(automation, name)
17
+ end
18
+
19
+ def create_base_folders(automation, name)
20
+ folders = %w[data page_objects helpers spec]
16
21
  create_children_folders(name, folders)
17
- pages = %w[pages components abstract]
18
- create_children_folders("#{name}/page_objects", pages)
22
+ Dir.mkdir "#{name}/config" if %w[selenium watir].include?(automation)
19
23
  end
20
24
  end
21
25
  end
@@ -1,48 +1,82 @@
1
1
  require_relative '../template'
2
2
 
3
3
  class AbstractPageTemplate < Template
4
- def body
5
- browser = "def browser
6
- Raider::BrowserHelper.browser
7
- end"
8
- driver = "def driver
4
+
5
+ def raider
6
+ if @framework == 'rspec'
7
+ "require_relative '../../helpers/raider'\n"
8
+ else
9
+ "require_relative '../../features/support/helpers/raider'\n"
10
+ end
11
+ end
12
+
13
+ def helper_selector
14
+ if @automation == 'watir'
15
+ <<~EOF
16
+
17
+ def browser
18
+ Raider::BrowserHelper.browser
19
+ end
20
+
21
+ EOF
22
+ else
23
+ <<-EOF
24
+
25
+ def driver
9
26
  Raider::DriverHelper.driver
10
- end"
27
+ end
28
+
29
+
30
+ EOF
31
+ end
32
+ end
11
33
 
12
- visit = @automation == 'watir' ? 'browser.goto full_url(page.first)' : 'driver.navigate.to full_url(page.first)'
13
- raider = if @framework == 'rspec'
14
- "require_relative '../../helpers/raider'"
15
- else
16
- "require_relative '../../features/support/helpers/raider'"
17
- end
34
+ def visit
35
+ if %w[selenium watir].include?(@automation)
36
+ <<-EOF
18
37
 
19
- <<~EOF
20
- require 'rspec'
21
- #{raider}
22
38
 
23
- class AbstractPage
39
+ def visit(*page)
40
+ #{@automation == 'selenium' ? 'driver.navigate.to full_url(page.first)' : 'browser.goto full_url(page.first)'}
41
+ end
24
42
 
25
- include RSpec::Matchers
26
- extend Raider::PomHelper
43
+ EOF
44
+ end
45
+ end
27
46
 
28
- #{@automation == 'watir' ? browser : driver}
47
+ def url_methods
48
+ methods = <<-EOF
49
+
29
50
 
30
- def visit(*page)
31
- #{visit}
32
- end
51
+ def full_url(*page)
52
+ "#\{base_url}#\{url(*page)}"
53
+ end
33
54
 
34
- def full_url(*page)
35
- "#\{base_url}#\{url(*page)}"
36
- end
55
+ def base_url
56
+ 'https://automationteststore.com/'
57
+ end
37
58
 
38
- def base_url
39
- 'https://automationteststore.com/'
40
- end
59
+ def url(_page)
60
+ raise 'Url must be defined on child pages'
61
+ end
62
+ EOF
63
+
64
+
65
+ methods if %w[selenium watir].include?(@automation)
66
+ end
67
+
68
+ def body
69
+ <<~EOF.gsub(/\n{2}\s{4}/, '')
70
+ require 'rspec'
71
+ #{raider}
72
+ class AbstractPage
41
73
 
42
- def url(_page)
43
- raise 'Url must be defined on child pages'
44
- end
45
- end
74
+ include RSpec::Matchers
75
+ extend Raider::PomHelper
76
+ #{helper_selector}
77
+ #{visit}
78
+ #{url_methods}
79
+ end
46
80
  EOF
47
81
  end
48
82
  end
@@ -0,0 +1,16 @@
1
+ require_relative '../template'
2
+
3
+ class AppiumSettingsTemplate < Template
4
+ def body
5
+ <<~EOF
6
+ [caps]
7
+ platformName = "iOS"
8
+ platformVersion = "15.4"
9
+ deviceName = "iPhone SE (3rd generation)"
10
+ app = "TheApp.app"
11
+
12
+ [appium_lib]
13
+ server_url = "http://127.0.0.1:4723/wd/hub"
14
+ EOF
15
+ end
16
+ end
@@ -0,0 +1,26 @@
1
+ require_relative '../template'
2
+
3
+ class ConfirmationPageTemplate < Template
4
+ def body
5
+ <<~EOF
6
+ require_relative '../abstract/abstract_page'
7
+
8
+ class ConfirmationPage < AbstractPage
9
+
10
+ #Values
11
+
12
+ def login_message
13
+ driver.wait { message_element }.text
14
+ end
15
+
16
+ private
17
+
18
+ # Elements
19
+
20
+ def message_element
21
+ driver.find_element(accessibility_id: 'You are logged in as alice')
22
+ end
23
+ end
24
+ EOF
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ require_relative '../template'
2
+
3
+ class HomePageTemplate < Template
4
+ def body
5
+ <<~EOF
6
+ require_relative '../abstract/abstract_page'
7
+
8
+ class HomePage < AbstractPage
9
+
10
+ #Actions
11
+
12
+ def go_to_login
13
+ driver.wait { login_button_navigator }.click
14
+ end
15
+
16
+ private
17
+
18
+ # Elements
19
+
20
+ def login_button_navigator
21
+ driver.find_element(accessibility_id: 'Login Screen')
22
+ end
23
+ end
24
+ EOF
25
+ end
26
+ end