ruby_raider 0.1.9 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,16 +0,0 @@
1
- require_relative '../template'
2
-
3
- class ComponentTemplate < Template
4
- def body
5
- <<~EOF
6
- require_relative '../abstract/abstract_component'
7
-
8
- class HeaderComponent < AbstractComponent
9
-
10
- def customer_name
11
- @component.text
12
- end
13
- end
14
- EOF
15
- end
16
- end
@@ -1,26 +0,0 @@
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
@@ -1,26 +0,0 @@
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
@@ -1,113 +0,0 @@
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,9 +0,0 @@
1
- require_relative '../template'
2
-
3
- class ConfigTemplate < Template
4
- def body
5
- <<~EOF
6
- browser: :chrome
7
- EOF
8
- end
9
- end
@@ -1,52 +0,0 @@
1
- require_relative '../template'
2
-
3
- class GemfileTemplate < Template
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
18
- end
19
- end
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
34
- <<~EOF
35
- # frozen_string_literal: true
36
-
37
- source 'https://rubygems.org'
38
-
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}
50
- EOF
51
- end
52
- end
@@ -1,16 +0,0 @@
1
- require_relative '../template'
2
-
3
- class RakeFileTemplate < Template
4
- def body
5
- <<~EOF
6
- require 'yaml'
7
-
8
- desc 'Selects browser for automation run'
9
- task :select_browser, [:browser] do |_t, args|
10
- config = YAML.load_file('config/config.yml')
11
- config['browser'] = args.browser
12
- File.write('config/config.yml', config.to_yaml)
13
- end
14
- EOF
15
- end
16
- end
@@ -1,104 +0,0 @@
1
- require_relative '../template'
2
-
3
- class ReadMeTemplate < Template
4
- def body
5
- <<~EOF
6
- What is Raider?
7
- ===========
8
-
9
- Raider is a tool to make the setup and start of automation projects in ruby easier, with one command you are
10
- ready to go
11
-
12
- # Pre-requisites:
13
-
14
- Install RVM:
15
- https://rvm.io/rvm/install
16
-
17
- # How to use the framework:
18
-
19
- If you want to run all the tests from your terminal do:
20
- *rspec spec/*
21
-
22
- If you want to run all the tests in parallel do:
23
- *parallel_rspec spec/*
24
-
25
- # How are specs organized:
26
-
27
- We use 'context' as the highest grouping level to indicate in which part of the application we are as an example:
28
-
29
- *context 'On the login page'/*
30
-
31
- We use 'describe' from the user perspective to describe an action that the user can or cannot take:
32
-
33
- *describe 'A user can'/*
34
-
35
- or
36
-
37
- *describe 'A user cannot'/*
38
-
39
- This saves us repetition and forces us into an structure
40
-
41
- At last we use 'it' for the specific action the user can or cannot perform:
42
-
43
- it 'login with right credentials'
44
-
45
- If we group all of this together it will look like
46
-
47
- ```ruby
48
- context 'On the login page' do
49
- describe 'A user can' do
50
- it 'login with the right credentials' do
51
- end
52
- #{' '}
53
- end
54
- #{' '}
55
- describe 'A user cannot' do
56
- it 'login with the wrong credentials' do
57
- end
58
- end
59
- end
60
- ```
61
- #{' '}
62
- This is readed as 'On the login page a user can login with the right credentials' and 'On the login page a user cannot login with the wrong credentials'
63
-
64
- # How pages are organized:
65
-
66
- ```ruby#{' '}
67
- require_relative '../abstract/base_page'
68
-
69
- class MainPage < BasePage
70
-
71
- using Raider::WatirHelper
72
-
73
- def url(_page)
74
- '/'
75
- end
76
-
77
- # Actions
78
-
79
- def change_currency(currency)
80
- currency_dropdown.select currency
81
- end
82
-
83
- # Validations
84
-
85
- def validate_currency(currency)
86
- expect(currency_dropdown.include?(currency)).to be true
87
- end
88
-
89
- private
90
-
91
- # Elements
92
-
93
- def currency_dropdown
94
- browser.select(class: %w[dropdown-menu currency])
95
- end
96
- end
97
- ```
98
-
99
- Pages are organized in Actions (things a user can perform on the page), Validations (assertions), and Elements.
100
- Each page has to have a url define, and each page is using the module WatirHelper to add methods on runtime to the Watir elements
101
-
102
- EOF
103
- end
104
- end
@@ -1,38 +0,0 @@
1
- require_relative '../template'
2
-
3
- class EnvTemplate < Template
4
- def body
5
-
6
- if @automation == 'watir'
7
- helper = 'helpers/browser_helper'
8
- browser = 'Raider::BrowserHelper.new_browser'
9
- get_browser = 'browser = Raider::BrowserHelper.new_browser'
10
- screenshot = 'browser.screenshot.save("allure-results/screenshots/#{scenario.name}.png")'
11
- quit = 'browser.quit'
12
- else
13
- helper = 'helpers/driver_helper'
14
- browser = 'Raider::DriverHelper.new_driver'
15
- get_browser = 'driver = Raider::DriverHelper.driver'
16
- screenshot = 'driver.save_screenshot("allure-results/screenshots/#{scenario.name}.png")'
17
- quit = 'driver.quit'
18
- end
19
-
20
- <<~EOF
21
- require 'active_support/all'
22
- require_relative 'helpers/allure_helper'
23
- require_relative '#{helper}'
24
-
25
- Before do
26
- Raider::AllureHelper.configure
27
- #{browser}
28
- end
29
-
30
- After do |scenario|
31
- #{get_browser}
32
- #{screenshot}
33
- Raider::AllureHelper.add_screenshot(scenario.name)
34
- #{quit}
35
- end
36
- EOF
37
- end
38
- end
@@ -1,15 +0,0 @@
1
- require_relative '../template'
2
-
3
- class ExampleFeatureTemplate < Template
4
- def body
5
- <<~EOF
6
- Feature: Login Page
7
-
8
- Scenario: A user can login
9
- Given I'm a registered user on the login page
10
- When I login with my credentials
11
- Then I can see the main page
12
-
13
- EOF
14
- end
15
- end
@@ -1,21 +0,0 @@
1
- require_relative '../template'
2
-
3
- class ExampleStepsTemplate < Template
4
- def body
5
- <<~EOF
6
- require_relative '../../page_objects/pages/login_page'
7
-
8
- Given("I'm a registered user on the login page") do
9
- LoginPage.visit
10
- end
11
-
12
- When('I login with my credentials') do
13
- LoginPage.login('aguspe', '12341234')
14
- end
15
-
16
- When('I can see the main page') do
17
- expect(LoginPage.header.customer_name).to eq 'Welcome back Agustin'
18
- end
19
- EOF
20
- end
21
- end
@@ -1,47 +0,0 @@
1
- require_relative '../template'
2
-
3
- class AllureHelperTemplate < Template
4
- def body
5
- if @framework == 'cucumber'
6
- gems = "require 'allure-cucumber'"
7
- allure = 'AllureCucumber'
8
- else
9
- gems = "require 'allure-ruby-commons'
10
- require 'allure-rspec'"
11
- allure = 'AllureRspec'
12
- end
13
- <<~EOF
14
- #{gems}
15
-
16
- module Raider
17
- module AllureHelper
18
- class << self
19
-
20
- def configure
21
- #{allure}.configure do |config|
22
- config.results_directory = 'allure-results'
23
- config.clean_results_directory = true
24
- end
25
- end
26
-
27
- def add_screenshot(screenshot_name)
28
- Allure.add_attachment(
29
- name: name,
30
- source: "File.open(allure-results/screenshots/\#{screenshot_name}.png)",
31
- type: Allure::ContentType::PNG,
32
- test_case: true
33
- )
34
- end
35
-
36
- #{
37
- if @framework == 'rspec'
38
- 'def formatter
39
- AllureRspecFormatter
40
- end'
41
- end }
42
- end
43
- end
44
- end
45
- EOF
46
- end
47
- end
@@ -1,26 +0,0 @@
1
- require_relative '../template'
2
-
3
- class BrowserHelperTemplate < Template
4
- def body
5
- <<~EOF
6
- require 'yaml'
7
- require 'selenium-webdriver'
8
- require 'watir'
9
- require 'webdrivers'
10
-
11
- module Raider
12
- module BrowserHelper
13
- class << self
14
- attr_reader :browser
15
-
16
- def new_browser
17
- config = YAML.load_file('config/config.yml')
18
- @browser = Watir::Browser.new config['browser']
19
- end
20
- end
21
- end
22
- end
23
-
24
- EOF
25
- end
26
- end
@@ -1,54 +0,0 @@
1
- require_relative '../template'
2
-
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
-
39
- def body
40
- <<~EOF
41
- #{requirements}
42
-
43
- module Raider
44
- module DriverHelper
45
- class << self
46
- attr_reader :driver
47
-
48
- #{new_driver}
49
- end
50
- end
51
- end
52
- EOF
53
- end
54
- end
@@ -1,25 +0,0 @@
1
- require_relative '../template'
2
-
3
- class PomHelperTemplate < Template
4
- def body
5
- <<~EOF
6
- module Raider
7
- module PomHelper
8
- def instance
9
- @instance ||= new
10
- end
11
-
12
- def method_missing(message, *args, &block)
13
- return super unless instance.respond_to?(message)
14
-
15
- instance.public_send(message, *args, &block)
16
- end
17
-
18
- def respond_to_missing?(method, *_args, &block)
19
- instance.respond_to?(method) || super
20
- end
21
- end
22
- end
23
- EOF
24
- end
25
- end
@@ -1,27 +0,0 @@
1
- require_relative '../template'
2
-
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
-
16
- def body
17
- <<~EOF
18
- module Raider
19
- #{require_spec_helper}
20
- #{require_automation_helper}
21
- require_relative 'pom_helper'
22
- #{require_driver_helper}
23
- require_relative 'allure_helper'
24
- end
25
- EOF
26
- end
27
- end
@@ -1,42 +0,0 @@
1
- require_relative '../template'
2
-
3
- class SeleniumHelperTemplate < Template
4
- def body
5
- <<~EOF
6
- require 'selenium-webdriver'
7
- require_relative 'driver_helper'
8
-
9
- module Raider
10
- module SeleniumHelper
11
- def click_when_present
12
- # This is an example of an implicit wait in selenium
13
- wait = Selenium::WebDriver::Wait.new(timeout: 15)
14
- wait.until { present? }
15
- click
16
- end
17
-
18
- def select_by(key, value)
19
- # Creates new Select object to use the select by method
20
- dropdown = Selenium::WebDriver::Support::Select.new self
21
- dropdown.select_by(key, value)
22
- end
23
-
24
- def hover
25
- # Using actions to move the mouse over an element
26
- DriverHelper.driver.action.move_to(self).perform
27
- end
28
-
29
- # How to perform right click through the context click method
30
- def right_click
31
- DriverHelper.driver.action.context_click(self).perform
32
- end
33
- end
34
-
35
- # Here we are opening the selenium class and adding our custom method
36
- class Selenium::WebDriver::Element
37
- include SeleniumHelper
38
- end
39
- end
40
- EOF
41
- end
42
- end