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
@@ -0,0 +1,113 @@
1
+ require_relative '../template'
2
+
3
+ class LoginPageTemplate < Template
4
+ def element
5
+ case @automation
6
+ when 'watir' then 'browser.element'
7
+ when 'selenium', 'appium_ios' then 'driver.find_element'
8
+ end
9
+ end
10
+
11
+ def helper
12
+ case @automation
13
+ when 'watir' then 'using Raider::WatirHelper'
14
+ when 'selenium' then 'using Raider::SeleniumHelper'
15
+ else nil
16
+ end
17
+ end
18
+
19
+ def require_header
20
+ "require_relative '../components/header_component'" if %w[selenium watir].include?(@automation)
21
+ end
22
+
23
+ def url
24
+ if %w[selenium watir].include?(@automation)
25
+ <<~EOF
26
+ def url(_page)
27
+ 'index.php?rt=account/login'
28
+ end
29
+ EOF
30
+ end
31
+ end
32
+
33
+ def header
34
+ if %w[selenium watir].include?(@automation)
35
+ <<~EOF
36
+ # Components
37
+
38
+ def header
39
+ HeaderComponent.new(#{element}(class: 'menu_text'))
40
+ end
41
+ EOF
42
+ end
43
+ end
44
+
45
+ def username_element
46
+ selector = if %w[selenium watir].include?(@automation)
47
+ "(id: 'loginFrm_loginname')"
48
+ else
49
+ "(xpath: \"//XCUIElementTypeTextField[@name=\\\"username\\\"]\")"
50
+ end
51
+ "#{element}#{selector}"
52
+ end
53
+
54
+ def password_element
55
+ selector = if %w[selenium watir].include?(@automation)
56
+ "(id: 'loginFrm_password')"
57
+ else
58
+ "(xpath: \"//XCUIElementTypeSecureTextField[@name=\\\"password\\\"]\")"
59
+ end
60
+ "#{element}#{selector}"
61
+ end
62
+
63
+ def button
64
+ if %w[selenium watir].include?(@automation)
65
+ "#{element}(xpath: \"//button[@title='Login']\")"
66
+ else
67
+ "driver.find_elements(xpath: \"//XCUIElementTypeOther[@name=\\\"loginBtn\\\"]\").last"
68
+ end
69
+ end
70
+
71
+ def click
72
+ %w[selenium watir].include?(@automation) ? 'click_when_present' : 'click'
73
+ end
74
+
75
+ def body
76
+ <<~EOF.gsub(/\n{2}\s{2}\n/, '')
77
+ require_relative '../abstract/abstract_page'
78
+ #{require_header}
79
+
80
+ class LoginPage < AbstractPage
81
+ #{helper}
82
+
83
+ #{url}
84
+
85
+ # Actions
86
+
87
+ def login(username, password)
88
+ username_field.send_keys username
89
+ password_field.send_keys password
90
+ login_button.#{click}
91
+ end
92
+
93
+ #{header}
94
+
95
+ private
96
+
97
+ # Elements
98
+
99
+ def username_field
100
+ #{username_element}
101
+ end
102
+
103
+ def password_field
104
+ #{password_element}
105
+ end
106
+
107
+ def login_button
108
+ #{button}
109
+ end
110
+ end
111
+ EOF
112
+ end
113
+ end
@@ -1,29 +1,52 @@
1
1
  require_relative '../template'
2
2
 
3
3
  class GemfileTemplate < Template
4
- def body
5
- if @framework == 'cucumber'
6
- allure_cucumber = "gem 'allure-cucumber'"
7
- rspec = "gem 'rspec'"
4
+ def automation_gems
5
+ case @automation
6
+ when 'watir'
7
+ <<~EOF
8
+ gem 'selenium-webdriver'
9
+ gem 'watir'
10
+ EOF
11
+ when 'selenium'
12
+ "gem 'selenium-webdriver'"
13
+ else
14
+ <<~EOF
15
+ gem 'appium_lib'
16
+ gem 'appium_console'
17
+ EOF
8
18
  end
19
+ end
9
20
 
21
+ def webdrivers
22
+ "gem 'webdrivers'" if %w[selenium watir].include?(@automation)
23
+ end
24
+
25
+ def allure_cucumber
26
+ "gem 'allure-cucumber'" if @framework == 'cucumber'
27
+ end
28
+
29
+ def rspec_gem
30
+ "gem 'rspec'" if @framework == 'cucumber'
31
+ end
32
+
33
+ def body
10
34
  <<~EOF
11
- # frozen_string_literal: true
35
+ # frozen_string_literal: true
12
36
 
13
- source 'https://rubygems.org'
37
+ source 'https://rubygems.org'
14
38
 
15
- gem 'activesupport'
16
- gem 'allure-rspec'
17
- gem 'allure-ruby-commons'
18
- #{allure_cucumber}
19
- gem 'parallel_split_test'
20
- gem 'parallel_tests'
21
- gem 'rake'
22
- gem '#{@framework}'
23
- #{rspec}
24
- gem 'selenium-webdriver'
25
- gem 'watir'
26
- gem 'webdrivers'
39
+ gem 'activesupport'
40
+ gem 'allure-rspec'
41
+ gem 'allure-ruby-commons'
42
+ #{allure_cucumber}
43
+ gem 'parallel_split_test'
44
+ gem 'parallel_tests'
45
+ gem 'rake'
46
+ gem '#{@framework}'
47
+ #{rspec_gem}
48
+ #{automation_gems}
49
+ #{webdrivers}
27
50
  EOF
28
51
  end
29
52
  end
@@ -1,21 +1,51 @@
1
1
  require_relative '../template'
2
2
 
3
3
  class DriverHelperTemplate < Template
4
+ def new_driver
5
+ if @automation == 'selenium'
6
+ <<-EOF.chomp
7
+ def new_driver
8
+ @driver = Selenium::WebDriver.for :chrome
9
+ end
10
+ EOF
11
+ else
12
+ <<-EOF.chomp
13
+ def new_driver
14
+ appium_file = File.join(Dir.pwd, 'appium.txt')
15
+ caps = Appium.load_appium_txt(file: appium_file)
16
+ @driver = Appium::Driver.new(caps)
17
+ end
18
+ EOF
19
+ end
20
+ end
21
+
22
+ def requirements
23
+ case @automation
24
+ when 'selenium'
25
+ <<~EOF
26
+ require 'selenium-webdriver'
27
+ require 'webdrivers'
28
+ EOF
29
+ when 'watir'
30
+ <<~EOF
31
+ require 'watir'
32
+ require 'webdrivers'
33
+ EOF
34
+ else
35
+ "require 'appium_lib'"
36
+ end
37
+ end
38
+
4
39
  def body
5
40
  <<~EOF
6
- require 'selenium-webdriver'
7
- require 'watir'
8
- require 'webdrivers'
9
- require 'yaml'
41
+ #{requirements}
10
42
 
11
43
  module Raider
12
44
  module DriverHelper
13
45
  class << self
14
46
  attr_reader :driver
15
47
 
16
- def new_driver
17
- @driver = Selenium::WebDriver.for :chrome
18
- end
48
+ #{new_driver}
19
49
  end
20
50
  end
21
51
  end
@@ -1,13 +1,25 @@
1
1
  require_relative '../template'
2
2
 
3
3
  class RaiderHelperTemplate < Template
4
+ def require_spec_helper
5
+ "require_relative 'spec_helper'" if @framework == 'rspec'
6
+ end
7
+
8
+ def require_automation_helper
9
+ "require_relative '#{@automation}_helper'" if %w[selenium watir].include?(@automation)
10
+ end
11
+
12
+ def require_driver_helper
13
+ "require_relative '#{@automation == 'watir' ? 'browser_helper' : 'driver_helper'}'"
14
+ end
15
+
4
16
  def body
5
17
  <<~EOF
6
18
  module Raider
7
- #{"require_relative 'spec_helper'" if @framework == 'rspec'}
8
- require_relative '#{@automation}_helper'
19
+ #{require_spec_helper}
20
+ #{require_automation_helper}
9
21
  require_relative 'pom_helper'
10
- require_relative '#{@automation == 'watir' ? 'browser_helper' : 'driver_helper'}'
22
+ #{require_driver_helper}
11
23
  require_relative 'allure_helper'
12
24
  end
13
25
  EOF
@@ -1,12 +1,54 @@
1
1
  require_relative '../template'
2
2
 
3
3
  class SpecHelperTemplate < Template
4
+ def require_driver
5
+ "require_relative '#{@automation == 'watir' ? 'browser_helper' : 'driver_helper'}'"
6
+ end
7
+
8
+ def select_helper
9
+ @automation == 'watir' ? 'BrowserHelper.new_browser' : 'DriverHelper.new_driver'
10
+ end
11
+
12
+ def before_configuration
13
+ driver_setup = if %w[selenium watir].include?(@automation)
14
+ select_helper
15
+ else
16
+ <<-EOF.chomp
17
+ #{select_helper}
18
+ DriverHelper.driver.start_driver
19
+ EOF
20
+ end
21
+
22
+ <<-EOF.chomp
23
+
24
+ config.before(:each) do
25
+ #{driver_setup}
26
+ end
27
+ EOF
28
+ end
29
+
30
+ def quit_driver
31
+ case @automation
32
+ when 'selenium'
33
+ 'DriverHelper.driver.quit'
34
+ when 'watir'
35
+ 'BrowserHelper.browser.quit'
36
+ else
37
+ 'DriverHelper.driver.quit_driver'
38
+ end
39
+ end
40
+
41
+ def save_screenshot
42
+ driver = @automation == 'watir' ? 'browser' : 'driver'
43
+ "#{driver}.save_screenshot(\"allure-results/screenshots/\#{example_name}.png\") if status == :failed"
44
+ end
45
+
4
46
  def body
5
47
  <<~EOF
6
48
  require 'active_support/all'
7
49
  require 'rspec'
8
50
  require_relative 'allure_helper'
9
- require_relative '#{@automation == 'watir' ? 'browser_helper' : 'driver_helper'}'
51
+ #{require_driver}
10
52
 
11
53
  module Raider
12
54
  module SpecHelper
@@ -15,17 +57,14 @@ class SpecHelperTemplate < Template
15
57
 
16
58
  RSpec.configure do |config|
17
59
  config.formatter = AllureHelper.formatter
18
- config.before(:each) do
19
- #{@automation == 'watir' ? 'BrowserHelper.new_browser' : 'DriverHelper.new_driver'}
20
- end
60
+ #{before_configuration}
21
61
 
22
62
  config.after(:each) do
23
- #{@automation == 'watir' ? 'browser = BrowserHelper.browser' : 'driver = DriverHelper.driver'}
24
63
  example_name = self.class.descendant_filtered_examples.first.description
25
64
  status = self.class.descendant_filtered_examples.first.execution_result.status
26
- #{@automation == 'watir' ? 'browser' : 'driver'}.save_screenshot("allure-results/screenshots/#\{example_name}.png") if status == :failed
65
+ #{save_screenshot}
27
66
  AllureHelper.add_screenshot example_name if status == :failed
28
- #{@automation == 'watir' ? 'browser.quit' : 'driver.quit'}
67
+ #{quit_driver}
29
68
  end
30
69
  end
31
70
  end
@@ -1,32 +1,55 @@
1
1
  require_relative '../template'
2
2
 
3
3
  class ExampleSpecTemplate < Template
4
+ def examples
5
+ if %w[selenium watir].include? @automation
6
+ <<-EOF.chomp
7
+ describe 'Login' do
8
+ before(:each) do
9
+ LoginPage.visit
10
+ end
11
+
12
+ it 'can login with valid credentials' do
13
+ LoginPage.login('aguspe', '12341234')
14
+ expect(LoginPage.header.customer_name).to eq 'Welcome back Agustin'
15
+ end
16
+
17
+ it 'cannot login with wrong credentials' do
18
+ LoginPage.login('aguspe', 'wrongPassword')
19
+ expect(LoginPage.header.customer_name).to be_empty
20
+ end
21
+ end
22
+ EOF
23
+ else
24
+ <<-EOF.chomp
25
+ describe 'Login' do
26
+ it 'Login with valid credentials' do
27
+ HomePage.go_to_login
28
+ LoginPage.login('alice', 'mypassword')
29
+ expect(ConfirmationPage.login_message).to eq 'You are logged in as alice'
30
+ end
31
+ end
32
+ EOF
33
+ end
34
+ end
35
+
36
+ def requirements
37
+ unless %w[selenium watir].include? @automation
38
+ <<~EOF.chomp
39
+ require_relative '../page_objects/pages/confirmation_page'
40
+ require_relative '../page_objects/pages/home_page'
41
+ EOF
42
+ end
43
+ end
44
+
4
45
  def body
5
46
  <<~EOF
47
+ #{requirements}
6
48
  require_relative 'base_spec'
7
49
  require_relative '../page_objects/pages/login_page'
8
-
50
+
9
51
  class LoginSpec < BaseSpec
10
- context 'On the Login Page' do
11
-
12
- before(:each) do
13
- LoginPage.visit
14
- end
15
-
16
- describe 'A user can' do
17
- it 'login with the right credentials', :JIRA_123 do
18
- LoginPage.login('aguspe', '12341234')
19
- expect(LoginPage.header.customer_name).to eq 'Welcome back Agustin'
20
- end
21
- end
22
-
23
- describe 'A user cannot' do
24
- it 'login with the wrong credentials', :JIRA_123 do
25
- LoginPage.login('aguspe', 'wrongPassword')
26
- expect(LoginPage.header.customer_name).to be_empty
27
- end
28
- end
29
- end
52
+ #{examples}
30
53
  end
31
54
  EOF
32
55
  end
data/ruby_raider.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'ruby_raider'
3
- s.version = '0.1.8'
3
+ s.version = '0.1.9'
4
4
  s.summary = 'A gem to make setup and start of UI automation projects easier'
5
5
  s.description = 'This gem contents everything you need to start doing web automation in one simple package'
6
6
  s.authors = ['Agustin Pequeno']
@@ -2,33 +2,58 @@ require_relative '../lib/generators/files/automation_file_generator'
2
2
  require_relative 'spec_helper'
3
3
 
4
4
  describe RubyRaider::AutomationFileGenerator do
5
- before(:all) do
6
- @name = 'Rspec-watir-1'
7
- RubyRaider::RspecProjectGenerator.generate_rspec_project(@name, automation: 'watir')
8
- end
9
-
10
- it 'creates a login page file' do
11
- expect(File.exist?("#{@name}/page_objects/pages/login_page.rb")).to be_truthy
12
- end
13
-
14
- it 'creates an abstract page file' do
15
- expect(File.exist?("#{@name}/page_objects/abstract/abstract_page.rb")).to be_truthy
16
- end
17
-
18
- it 'creates an abstract component file' do
19
- expect(File.exist?("#{@name}/page_objects/abstract/abstract_component.rb")).to be_truthy
20
- end
21
-
22
- it 'creates a component file' do
23
- expect(File.exist?("#{@name}/page_objects/components/header_component.rb")).to be_truthy
24
- end
25
-
26
- it 'creates a gemfile file' do
27
- expect(File.exist?("#{@name}/Gemfile")).to be_truthy
28
- end
29
-
30
- after(:all) do
31
- FileUtils.rm_rf(@name)
5
+ context 'On a web project' do
6
+ before(:all) do
7
+ @name = 'Rspec-watir-1'
8
+ RubyRaider::RspecProjectGenerator.generate_rspec_project('watir', @name)
9
+ end
10
+
11
+ it 'creates a login page file' do
12
+ expect(File.exist?("#{@name}/page_objects/pages/login_page.rb")).to be_truthy
13
+ end
14
+
15
+ it 'creates an abstract page file' do
16
+ expect(File.exist?("#{@name}/page_objects/abstract/abstract_page.rb")).to be_truthy
17
+ end
18
+
19
+ it 'creates an abstract component file' do
20
+ expect(File.exist?("#{@name}/page_objects/abstract/abstract_component.rb")).to be_truthy
21
+ end
22
+
23
+ it 'creates a component file' do
24
+ expect(File.exist?("#{@name}/page_objects/components/header_component.rb")).to be_truthy
25
+ end
26
+
27
+ it 'creates a gemfile file' do
28
+ expect(File.exist?("#{@name}/Gemfile")).to be_truthy
29
+ end
30
+
31
+ after(:all) do
32
+ FileUtils.rm_rf(@name)
33
+ end
34
+
35
+ context 'On a mobile project' do
36
+ before(:all) do
37
+ @name = 'Rspec-appium-ios'
38
+ RubyRaider::RspecProjectGenerator.generate_rspec_project('appium_ios', @name)
39
+ end
40
+
41
+ it 'creates a login page file' do
42
+ expect(File.exist?("#{@name}/page_objects/pages/home_page.rb")).to be_truthy
43
+ end
44
+
45
+ it 'creates a login page file' do
46
+ expect(File.exist?("#{@name}/page_objects/pages/confirmation_page.rb")).to be_truthy
47
+ end
48
+
49
+ it 'creates a login page file' do
50
+ expect(File.exist?("#{@name}/appium.txt")).to be_truthy
51
+ end
52
+
53
+ after(:all) do
54
+ FileUtils.rm_rf(@name)
55
+ end
56
+ end
32
57
  end
33
58
  end
34
59
 
@@ -4,7 +4,7 @@ require_relative 'spec_helper'
4
4
  describe RubyRaider::CommonFileGenerator do
5
5
  before(:all) do
6
6
  @name = 'Cucumber-watir-1'
7
- RubyRaider::CucumberProjectGenerator.generate_cucumber_project(@name, automation: 'watir')
7
+ RubyRaider::CucumberProjectGenerator.generate_cucumber_project('watir', @name)
8
8
  end
9
9
 
10
10
  it 'creates a config file' do
@@ -4,7 +4,7 @@ require_relative 'spec_helper'
4
4
  describe RubyRaider::RspecFileGenerator do
5
5
  before(:all) do
6
6
  @name = 'Cucumber-watir-2'
7
- RubyRaider::CucumberProjectGenerator.generate_cucumber_project(@name, automation: 'watir')
7
+ RubyRaider::CucumberProjectGenerator.generate_cucumber_project('watir', @name)
8
8
  end
9
9
 
10
10
  it 'creates a feature file' do
@@ -3,7 +3,7 @@ require_relative 'spec_helper'
3
3
  describe RubyRaider::CucumberProjectGenerator do
4
4
  before(:all) do
5
5
  @name = 'Cucumber'
6
- RubyRaider::CucumberProjectGenerator.generate_cucumber_project(@name, automation: 'selenium')
6
+ RubyRaider::CucumberProjectGenerator.generate_cucumber_project('selenium', @name)
7
7
  end
8
8
 
9
9
  it 'creates a project folder' do
@@ -5,7 +5,7 @@ describe RubyRaider::HelpersFileGenerator do
5
5
  context 'When the users selects rspec' do
6
6
  before(:all) do
7
7
  @name = 'Rspec-watir-2'
8
- RubyRaider::RspecProjectGenerator.generate_rspec_project(@name, automation: 'selenium')
8
+ RubyRaider::RspecProjectGenerator.generate_rspec_project('selenium', @name)
9
9
  end
10
10
 
11
11
  it 'creates a raider file' do
@@ -40,7 +40,7 @@ describe RubyRaider::HelpersFileGenerator do
40
40
  context 'when the user selects cucumber' do
41
41
  before(:all) do
42
42
  @name = 'Cucumber-watir-3'
43
- RubyRaider::CucumberProjectGenerator.generate_cucumber_project(@name, automation: 'watir')
43
+ RubyRaider::CucumberProjectGenerator.generate_cucumber_project('watir', @name)
44
44
  end
45
45
 
46
46
  it 'creates a raider file' do
@@ -4,7 +4,7 @@ require_relative 'spec_helper'
4
4
  describe RubyRaider::RspecFileGenerator do
5
5
  before(:all) do
6
6
  @name = 'Rspec-watir-3'
7
- RubyRaider::RspecProjectGenerator.generate_rspec_project(@name, automation: 'watir')
7
+ RubyRaider::RspecProjectGenerator.generate_rspec_project('watir', @name)
8
8
  end
9
9
 
10
10
  it 'creates a spec file' do