ruby_raider 0.1.8 → 0.1.9

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 (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