ruby_raider 0.4.3 → 0.4.5
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.
- checksums.yaml +4 -4
- data/lib/commands/utility_commands.rb +19 -1
- data/lib/generators/automation_generator.rb +14 -0
- data/lib/generators/common_generator.rb +2 -2
- data/lib/generators/generator.rb +1 -0
- data/lib/generators/helper_generator.rb +18 -2
- data/lib/generators/menu_generator.rb +19 -7
- data/lib/generators/templates/automation/abstract_page.tt +9 -6
- data/lib/generators/templates/automation/app_page.tt +11 -0
- data/lib/generators/templates/automation/home_page.tt +1 -1
- data/lib/generators/templates/automation/login_page.tt +5 -4
- data/lib/generators/templates/automation/partials/home_page_selector.tt +8 -8
- data/lib/generators/templates/automation/partials/pdp_page_selector.tt +8 -8
- data/lib/generators/templates/automation/partials/require_raider.tt +3 -3
- data/lib/generators/templates/automation/partials/visual_login.tt +25 -0
- data/lib/generators/templates/automation/pdp_page.tt +1 -1
- data/lib/generators/templates/automation/visual_options.tt +16 -0
- data/lib/generators/templates/common/gemfile.tt +7 -0
- data/lib/generators/templates/common/partials/web_config.tt +5 -1
- data/lib/generators/templates/helpers/appium_helper.tt +1 -1
- data/lib/generators/templates/helpers/driver_helper.tt +4 -3
- data/lib/generators/templates/helpers/partials/driver_and_options.tt +25 -25
- data/lib/generators/templates/helpers/raider_helper.tt +5 -0
- data/lib/generators/templates/helpers/visual_helper.tt +66 -0
- data/lib/generators/templates/helpers/visual_spec_helper.tt +30 -0
- data/lib/generators/templates/rspec/spec.tt +23 -1
- data/lib/utilities/utilities.rb +36 -1
- data/ruby_raider.gemspec +1 -1
- data/spec/automation_generator_spec.rb +0 -4
- data/spec/common_generator_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7b2c000c852222f35914766b001264de3988fc1d4c2baa7b28504c885dad43a
|
4
|
+
data.tar.gz: d791271be3eb3118dfde048a732a672f5c5a65b80975ce7ea9f061504ca7b594
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 162584ae4fed3dacba0ee826fd707243d4150f1cfbabf00a40d1de0dd1433ac52e38157a9d553fef2d192ff31e7c8203b89d77cbfe8ea1bd709a479e4082d51c
|
7
|
+
data.tar.gz: 328caadb18a48ae8f103b79e91cf12b365139d5854e3f4e1a28bd27436de8bf04f5270e51a6aeddc9c4c19df1c55c97251e3bc2f20e5f5fdc8f7f24798502463
|
@@ -55,7 +55,7 @@ class UtilityCommands < Thor
|
|
55
55
|
option :parallel,
|
56
56
|
type: :boolean, required: false, desc: 'It runs the tests in parallel', aliases: '-p'
|
57
57
|
option :opts,
|
58
|
-
type: :array, required: false, desc: 'The options
|
58
|
+
type: :array, required: false, desc: 'The options that your run will run with', aliases: '-o'
|
59
59
|
|
60
60
|
def raid
|
61
61
|
if options[:parallel]
|
@@ -80,4 +80,22 @@ class UtilityCommands < Thor
|
|
80
80
|
end
|
81
81
|
|
82
82
|
map '-pl' => 'platform'
|
83
|
+
|
84
|
+
desc 'download_builds [build_type]', 'It downloads the example builds for appium projects'
|
85
|
+
def download_builds(build_type)
|
86
|
+
if %w[android, ios, both].include?(build_type)
|
87
|
+
raise 'Please select one of the following build types: android, ios, both'
|
88
|
+
end
|
89
|
+
|
90
|
+
Utilities.new.download_builds build_type
|
91
|
+
end
|
92
|
+
|
93
|
+
map '-d' => 'download_builds'
|
94
|
+
|
95
|
+
desc 'version', 'It shows the version of Ruby Raider you are currently using'
|
96
|
+
def version
|
97
|
+
Utilities.new.version
|
98
|
+
end
|
99
|
+
|
100
|
+
map '-v' => 'version'
|
83
101
|
end
|
@@ -27,12 +27,14 @@ class AutomationGenerator < Generator
|
|
27
27
|
|
28
28
|
def generate_header_component
|
29
29
|
return unless (@_initializer.first & %w[android ios cross_platform]).empty?
|
30
|
+
return if @_initializer.first.last
|
30
31
|
|
31
32
|
template('automation/component.tt', "#{name}/page_objects/components/header_component.rb")
|
32
33
|
end
|
33
34
|
|
34
35
|
def generate_abstract_component
|
35
36
|
return unless (@_initializer.first & %w[android ios cross_platform]).empty?
|
37
|
+
return if @_initializer.first.last
|
36
38
|
|
37
39
|
template('automation/abstract_component.tt', "#{name}/page_objects/abstract/abstract_component.rb")
|
38
40
|
end
|
@@ -42,4 +44,16 @@ class AutomationGenerator < Generator
|
|
42
44
|
|
43
45
|
template('automation/appium_caps.tt', "#{name}/config/capabilities.yml")
|
44
46
|
end
|
47
|
+
|
48
|
+
def generate_app_page
|
49
|
+
return unless @_initializer.first.last
|
50
|
+
|
51
|
+
template('automation/app_page.tt', "#{name}/page_objects/pages/app_page.rb")
|
52
|
+
end
|
53
|
+
|
54
|
+
def generate_visual_options
|
55
|
+
return unless @_initializer.first.last
|
56
|
+
|
57
|
+
template('automation/visual_options.tt', "#{name}/config/options.yml")
|
58
|
+
end
|
45
59
|
end
|
@@ -22,10 +22,10 @@ class CommonGenerator < Generator
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def create_allure_folder
|
25
|
-
empty_directory "#{name}/allure-results"
|
25
|
+
empty_directory "#{name}/allure-results" unless @_initializer.first.last
|
26
26
|
end
|
27
27
|
|
28
28
|
def create_screenshots_folder
|
29
|
-
empty_directory "#{name}/allure-results/screenshots"
|
29
|
+
empty_directory "#{name}/allure-results/screenshots" unless @_initializer.first.last
|
30
30
|
end
|
31
31
|
end
|
data/lib/generators/generator.rb
CHANGED
@@ -8,6 +8,8 @@ class HelpersGenerator < Generator
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def generate_allure_helper
|
11
|
+
return if @_initializer.first.last
|
12
|
+
|
11
13
|
template('helpers/allure_helper.tt', "#{name}/helpers/allure_helper.rb")
|
12
14
|
end
|
13
15
|
|
@@ -16,6 +18,8 @@ class HelpersGenerator < Generator
|
|
16
18
|
end
|
17
19
|
|
18
20
|
def generate_spec_helper
|
21
|
+
return if @_initializer.first.last
|
22
|
+
|
19
23
|
template('helpers/spec_helper.tt', "#{name}/helpers/spec_helper.rb") if @_initializer.first.include?('rspec')
|
20
24
|
end
|
21
25
|
|
@@ -31,9 +35,21 @@ class HelpersGenerator < Generator
|
|
31
35
|
template('helpers/driver_helper.tt', "#{name}/helpers/driver_helper.rb")
|
32
36
|
end
|
33
37
|
|
34
|
-
def
|
35
|
-
return unless
|
38
|
+
def generate_appium_helper
|
39
|
+
return unless @_initializer.first.include?('cross_platform')
|
36
40
|
|
37
41
|
template('helpers/appium_helper.tt', "#{name}/helpers/appium_helper.rb")
|
38
42
|
end
|
43
|
+
|
44
|
+
def generate_visual_helper
|
45
|
+
return unless @_initializer.first.last
|
46
|
+
|
47
|
+
template('helpers/visual_helper.tt', "#{name}/helpers/visual_helper.rb")
|
48
|
+
end
|
49
|
+
|
50
|
+
def generate_visual_spec_helper
|
51
|
+
return unless @_initializer.first.last
|
52
|
+
|
53
|
+
template('helpers/visual_spec_helper.tt', "#{name}/helpers/spec_helper.rb")
|
54
|
+
end
|
39
55
|
end
|
@@ -25,14 +25,22 @@ class MenuGenerator
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
def choose_visual_automation
|
29
|
+
prompt.select('Do you want to add visual automation with applitools?') do |menu|
|
30
|
+
menu.choice :Yes, -> { true }
|
31
|
+
menu.choice :No, -> { false }
|
32
|
+
menu.choice :Quit, -> { exit }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
28
36
|
def choose_test_framework(automation)
|
29
37
|
return choose_mobile_platform if automation == 'appium'
|
30
38
|
|
31
39
|
select_test_framework(automation)
|
32
40
|
end
|
33
41
|
|
34
|
-
def set_up_framework(automation, framework)
|
35
|
-
generate_framework(automation, framework)
|
42
|
+
def set_up_framework(automation, framework, visual_automation)
|
43
|
+
generate_framework(automation, framework, visual_automation)
|
36
44
|
system "cd #{name} && gem install bundler && bundle install"
|
37
45
|
end
|
38
46
|
|
@@ -45,9 +53,9 @@ class MenuGenerator
|
|
45
53
|
end
|
46
54
|
end
|
47
55
|
|
48
|
-
def generate_framework(automation, framework)
|
56
|
+
def generate_framework(automation, framework, visual_automation)
|
49
57
|
add_generator framework.capitalize
|
50
|
-
generators.each { |generator| invoke_generator(automation, framework, generator) }
|
58
|
+
generators.each { |generator| invoke_generator(automation, framework, generator, visual_automation) }
|
51
59
|
end
|
52
60
|
|
53
61
|
protected
|
@@ -59,7 +67,11 @@ class MenuGenerator
|
|
59
67
|
private
|
60
68
|
|
61
69
|
def framework_choice(framework, automation_type)
|
62
|
-
|
70
|
+
visual_automation = if automation_type == 'selenium' && framework == 'Rspec'
|
71
|
+
choose_visual_automation
|
72
|
+
end
|
73
|
+
|
74
|
+
set_up_framework(automation_type, framework.downcase, visual_automation)
|
63
75
|
prompt.say("You have chosen to use #{framework} with #{automation_type}")
|
64
76
|
end
|
65
77
|
|
@@ -75,7 +87,7 @@ class MenuGenerator
|
|
75
87
|
end
|
76
88
|
end
|
77
89
|
|
78
|
-
def invoke_generator(automation, framework, generator)
|
79
|
-
Object.const_get("#{generator}Generator").new([automation, framework, name]).invoke_all
|
90
|
+
def invoke_generator(automation, framework, generator, visual_automation)
|
91
|
+
Object.const_get("#{generator}Generator").new([automation, framework, name, visual_automation]).invoke_all
|
80
92
|
end
|
81
93
|
end
|
@@ -1,11 +1,14 @@
|
|
1
|
-
<%= ERB.new(File.read(File.expand_path('./partials/require_raider.tt', __dir__)),
|
1
|
+
<%= ERB.new(File.read(File.expand_path('./partials/require_raider.tt', __dir__)), trim_mode: '-').result(binding) -%>
|
2
2
|
|
3
3
|
class AbstractPage
|
4
|
-
<% if automation == 'cross_platform'
|
4
|
+
<% if automation == 'cross_platform' -%>
|
5
5
|
include Raider::AppiumHelper
|
6
|
-
<% end
|
6
|
+
<% end -%>
|
7
|
+
<%= ERB.new(File.read(File.expand_path('./partials/initialize_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) -%>
|
7
10
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
+
def to_s
|
12
|
+
self.class.to_s.sub('Page', ' Page')
|
13
|
+
end
|
11
14
|
end
|
@@ -15,6 +15,6 @@ class HomePage < AbstractPage
|
|
15
15
|
# Elements
|
16
16
|
|
17
17
|
def backpack_image
|
18
|
-
<%= ERB.new(File.read(File.expand_path('./partials/home_page_selector.tt', __dir__))).result(binding) %>
|
18
|
+
<%= ERB.new(File.read(File.expand_path('./partials/home_page_selector.tt', __dir__)), trim_mode: '-').result(binding) %>
|
19
19
|
end
|
20
20
|
end
|
@@ -1,6 +1,7 @@
|
|
1
|
-
<%
|
2
|
-
|
1
|
+
<% if automation == 'selenium' && visual_automation == true %>
|
2
|
+
<%= ERB.new(File.read(File.expand_path('./partials/visual_login.tt', __dir__))).result(binding) %>
|
3
|
+
<% elsif automation == 'selenium' %>
|
3
4
|
<%= ERB.new(File.read(File.expand_path('./partials/selenium_login.tt', __dir__))).result(binding) %>
|
4
|
-
<%
|
5
|
+
<% elsif automation == 'watir' %>
|
5
6
|
<%= ERB.new(File.read(File.expand_path('./partials/watir_login.tt', __dir__))).result(binding) %>
|
6
|
-
<% end
|
7
|
+
<% end %>
|
@@ -1,8 +1,8 @@
|
|
1
|
-
<% if automation == 'ios'
|
2
|
-
|
3
|
-
<% elsif automation == 'android'
|
4
|
-
|
5
|
-
<% else
|
6
|
-
|
7
|
-
|
8
|
-
<% end
|
1
|
+
<% if automation == 'ios' -%>
|
2
|
+
driver.find_element(predicate: 'label == "Sauce Labs Backpack"')
|
3
|
+
<% elsif automation == 'android' -%>
|
4
|
+
driver.find_element(xpath: '(//android.view.ViewGroup[@content-desc="store item"])[1]/android.view.ViewGroup[1]')
|
5
|
+
<% else -%>
|
6
|
+
element(ios: { predicate: 'label == "Sauce Labs Backpack"' },
|
7
|
+
android: { xpath: '(//android.view.ViewGroup[@content-desc="store item"])[1]/android.view.ViewGroup[1]' })
|
8
|
+
<% end -%>
|
@@ -1,8 +1,8 @@
|
|
1
|
-
<% if automation == 'ios'
|
2
|
-
|
3
|
-
<% elsif automation == 'android'
|
4
|
-
|
5
|
-
<% else
|
6
|
-
|
7
|
-
|
8
|
-
<% end
|
1
|
+
<% if automation == 'ios' -%>
|
2
|
+
driver.find_element(accessibility_id: 'Add To Cart button')
|
3
|
+
<% elsif automation == 'android' -%>
|
4
|
+
driver.find_element(xpath: '//android.view.ViewGroup[@content-desc="Add To Cart button"]/android.widget.TextView')
|
5
|
+
<% else -%>
|
6
|
+
element(ios: { accessibility_id: 'Add To Cart button' },
|
7
|
+
android: { xpath: '//android.view.ViewGroup[@content-desc="Add To Cart button"]/android.widget.TextView' })
|
8
|
+
<% end -%>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../abstract/abstract_page'
|
4
|
+
|
5
|
+
class LoginPage < AbstractPage
|
6
|
+
using Raider::SeleniumHelper
|
7
|
+
|
8
|
+
def url(_page)
|
9
|
+
'index.html'
|
10
|
+
end
|
11
|
+
|
12
|
+
# Actions
|
13
|
+
|
14
|
+
def login
|
15
|
+
login_button.click_when_present
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# Elements
|
21
|
+
|
22
|
+
def login_button
|
23
|
+
driver.find_element(:id, 'log-in')
|
24
|
+
end
|
25
|
+
end
|
@@ -13,6 +13,6 @@ class PdpPage < AbstractPage
|
|
13
13
|
# Elements
|
14
14
|
|
15
15
|
def add_to_cart_button
|
16
|
-
<%= ERB.new(File.read(File.expand_path('./partials/pdp_page_selector.tt', __dir__))).result(binding) %>
|
16
|
+
<%= ERB.new(File.read(File.expand_path('./partials/pdp_page_selector.tt', __dir__)), trim_mode: '-').result(binding) %>
|
17
17
|
end
|
18
18
|
end
|
@@ -1,13 +1,20 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
3
|
gem 'activesupport'
|
4
|
+
<% unless visual_automation -%>
|
4
5
|
gem 'allure-rspec'
|
5
6
|
gem 'allure-ruby-commons'
|
7
|
+
<% end -%>
|
6
8
|
<% if framework == 'cucumber' -%>
|
7
9
|
gem 'allure-cucumber'
|
8
10
|
<% end -%>
|
11
|
+
<% if visual_automation -%>
|
12
|
+
gem 'eyes_selenium'
|
13
|
+
<% end -%>
|
14
|
+
<% unless visual_automation -%>
|
9
15
|
gem 'parallel_split_test'
|
10
16
|
gem 'parallel_tests'
|
17
|
+
<% end -%>
|
11
18
|
gem 'rake'
|
12
19
|
gem '<%= framework %>'
|
13
20
|
<% if framework == 'cucumber' -%>
|
@@ -11,7 +11,7 @@ module Raider
|
|
11
11
|
module DriverHelper
|
12
12
|
attr_reader :driver
|
13
13
|
|
14
|
-
|
14
|
+
<%= ERB.new(File.read(File.expand_path('./partials/driver_and_options.tt', __dir__)), trim_mode: '-').result(binding).strip! %>
|
15
15
|
|
16
16
|
<% if automation == 'cross_platform' -%>
|
17
17
|
private
|
@@ -21,9 +21,10 @@ module Raider
|
|
21
21
|
end
|
22
22
|
<% end -%>
|
23
23
|
<% if automation != 'selenium' -%>
|
24
|
+
|
24
25
|
def caps
|
25
26
|
YAML.load_file('config/capabilities.yml')
|
26
27
|
end
|
27
|
-
|
28
|
-
|
28
|
+
<% end -%>
|
29
|
+
end
|
29
30
|
end
|
@@ -1,28 +1,28 @@
|
|
1
|
-
<% if automation == 'selenium'
|
1
|
+
<% if automation == 'selenium' -%>
|
2
2
|
def new_driver(*opts)
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
@config = YAML.load_file('config/config.yml')
|
4
|
+
browser = @config['browser'].to_sym
|
5
|
+
@driver = Selenium::WebDriver.for(browser, capabilities: browser_options(*opts))
|
6
|
+
end
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
def browser_options(*opts)
|
9
|
+
opts = opts.empty? ? @config['browser_options'] : opts
|
10
|
+
create_options(*opts)
|
11
|
+
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
<% elsif automation == 'cross_platform'
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
<% else
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
<% end
|
13
|
+
def create_options(*opts)
|
14
|
+
browser = @config['browser'] == :ie ? @config['browser'].to_s.upcase : @config['browser'].to_s.capitalize
|
15
|
+
caps = "Selenium::WebDriver::#{browser}::Options".constantize.new
|
16
|
+
opts.each { |option| caps.add_argument(option) }
|
17
|
+
caps
|
18
|
+
end
|
19
|
+
<% elsif automation == 'cross_platform' -%>
|
20
|
+
def new_driver
|
21
|
+
platform = config['platform'].to_s
|
22
|
+
@driver = Appium::Driver.new({ caps: caps[platform] })
|
23
|
+
end
|
24
|
+
<% else -%>
|
25
|
+
def new_driver
|
26
|
+
@driver = Appium::Driver.new({ caps: caps })
|
27
|
+
end
|
28
|
+
<% end -%>
|
@@ -10,8 +10,13 @@ module Raider
|
|
10
10
|
<% else -%>
|
11
11
|
require_relative 'driver_helper'
|
12
12
|
<% end -%>
|
13
|
+
<% unless visual_automation -%>
|
13
14
|
require_relative 'allure_helper'
|
15
|
+
<% end -%>
|
14
16
|
<% if automation == 'cross_platform' -%>
|
15
17
|
require_relative 'appium_helper'
|
16
18
|
<% end -%>
|
19
|
+
<% if visual_automation -%>
|
20
|
+
require_relative 'visual_helper'
|
21
|
+
<% end -%>
|
17
22
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eyes_selenium'
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
module Raider
|
7
|
+
module VisualHelper
|
8
|
+
attr_reader :eyes
|
9
|
+
|
10
|
+
SELENIUM = Applitools::Selenium
|
11
|
+
VISUAL_GRID = SELENIUM::VisualGridRunner
|
12
|
+
EYES = SELENIUM::Eyes
|
13
|
+
TARGET = SELENIUM::Target
|
14
|
+
BATCHINFO = Applitools::BatchInfo
|
15
|
+
REGTANGLE_SIZE = Applitools::RectangleSize
|
16
|
+
|
17
|
+
def create_grid_runner(concurrency = 1)
|
18
|
+
VISUAL_GRID.new(concurrency)
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_eyes(grid_runner)
|
22
|
+
EYES.new(runner: grid_runner)
|
23
|
+
end
|
24
|
+
|
25
|
+
def check_page(page)
|
26
|
+
page = format_page(page)
|
27
|
+
@eyes.check(page, TARGET.window.fully)
|
28
|
+
end
|
29
|
+
|
30
|
+
def configure_eyes(eyes, options = nil)
|
31
|
+
options ||= YAML.load_file('config/options.yml')
|
32
|
+
|
33
|
+
eyes.configure do |conf|
|
34
|
+
# You can get your api key from the Applitools dashboard
|
35
|
+
general_config(options, conf)
|
36
|
+
add_browsers(options[:browsers], conf)
|
37
|
+
add_devices(options[:devices], conf)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def format_page(page)
|
42
|
+
page.instance_of?(String) ? page : page.to_s
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_browsers(browsers, conf)
|
46
|
+
browsers.each do |browser|
|
47
|
+
conf.add_browser(browser[:height], browser[:width], "BrowserType::#{browser[:name].upcase}".constantize)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def add_devices(devices, conf)
|
52
|
+
devices.each do |device|
|
53
|
+
conf.add_device_emulation("Devices::#{device[:name]}".constantize,
|
54
|
+
"Orientation::#{device[:orientation]}".constantize)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def general_config(options, conf)
|
59
|
+
conf.api_key = ENV['APPLITOOLS_API_KEY']
|
60
|
+
conf.batch = BATCHINFO.new(options[:batch_name])
|
61
|
+
conf.app_name = options[:app_name]
|
62
|
+
conf.test_name = options[:test_name]
|
63
|
+
conf.viewport_size = REGTANGLE_SIZE.new(options[:viewport_size][:height], options[:viewport_size][:width])
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
require 'eyes_selenium'
|
5
|
+
require_relative 'driver_helper'
|
6
|
+
require_relative 'visual_helper'
|
7
|
+
|
8
|
+
module Raider
|
9
|
+
module SpecHelper
|
10
|
+
RSpec.configure do |config|
|
11
|
+
config.include(DriverHelper)
|
12
|
+
config.include(VisualHelper)
|
13
|
+
config.before(:each) do
|
14
|
+
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
|
15
|
+
@grid_runner = create_grid_runner
|
16
|
+
@eyes = create_eyes(@grid_runner)
|
17
|
+
configure_eyes @eyes
|
18
|
+
@driver = @eyes.open(driver: new_driver)
|
19
|
+
end
|
20
|
+
|
21
|
+
config.after(:each) do
|
22
|
+
@eyes.close
|
23
|
+
@driver.quit
|
24
|
+
@eyes.abort_async
|
25
|
+
results = @grid_runner.get_all_test_results
|
26
|
+
puts results
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,4 +1,26 @@
|
|
1
|
-
<% if
|
1
|
+
<% if automation == 'selenium' && visual_automation == true %>
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require_relative 'base_spec'
|
5
|
+
require_relative '../page_objects/pages/login_page'
|
6
|
+
require_relative '../page_objects/pages/app_page'
|
7
|
+
|
8
|
+
describe 'Login Page' do
|
9
|
+
let(:app_page) { AppPage.new(@driver) }
|
10
|
+
let(:login_page) { LoginPage.new(@driver) }
|
11
|
+
|
12
|
+
before(:example) do
|
13
|
+
login_page.visit
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'looks as expected' do
|
17
|
+
check_page login_page
|
18
|
+
login_page.login
|
19
|
+
check_page app_page
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
<% elsif %w[selenium watir].include? automation -%>
|
2
24
|
require_relative 'base_spec'
|
3
25
|
require_relative '../page_objects/pages/login_page'
|
4
26
|
|
data/lib/utilities/utilities.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'yaml'
|
4
|
+
require 'open-uri'
|
4
5
|
|
5
6
|
class Utilities
|
6
7
|
def initialize
|
@@ -58,7 +59,7 @@ class Utilities
|
|
58
59
|
system "#{command} #{opts}"
|
59
60
|
end
|
60
61
|
|
61
|
-
def parallel_run(opts = nil)
|
62
|
+
def parallel_run(opts = nil, _settings = nil)
|
62
63
|
command = File.directory?('spec') ? 'parallel_rspec spec/' : 'parallel_cucumber features'
|
63
64
|
system "#{command} #{opts}"
|
64
65
|
end
|
@@ -66,4 +67,38 @@ class Utilities
|
|
66
67
|
def overwrite_yaml
|
67
68
|
File.open(@path, 'w') { |file| YAML.dump(@config, file) }
|
68
69
|
end
|
70
|
+
|
71
|
+
def version
|
72
|
+
spec_version = Gem::Specification.load('ruby_raider.gemspec').version
|
73
|
+
puts "The Ruby Raider version is #{spec_version}, Happy testing!"
|
74
|
+
end
|
75
|
+
|
76
|
+
def download_builds(build_type)
|
77
|
+
case build_type
|
78
|
+
when 'android'
|
79
|
+
download_android_build
|
80
|
+
when 'ios'
|
81
|
+
download_ios_build
|
82
|
+
else
|
83
|
+
download_android_build
|
84
|
+
download_ios_build
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def download_android_build
|
91
|
+
download_build('Android-MyDemoAppRN.1.3.0.build-244.apk',
|
92
|
+
'https://github.com/saucelabs/my-demo-app-rn/releases/download/v1.3.0/Android-MyDemoAppRN.1.3.0.build-244.apk')
|
93
|
+
end
|
94
|
+
|
95
|
+
def download_ios_build
|
96
|
+
download_build('iOS-Simulator-MyRNDemoApp.1.3.0-162.zip',
|
97
|
+
'https://github.com/saucelabs/my-demo-app-rn/releases/download/v1.3.0/iOS-Simulator-MyRNDemoApp.1.3.0-162.zip')
|
98
|
+
end
|
99
|
+
def download_build(name, url)
|
100
|
+
open(name, 'wb') do |file|
|
101
|
+
file << open(url).read
|
102
|
+
end
|
103
|
+
end
|
69
104
|
end
|
data/ruby_raider.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'ruby_raider'
|
5
|
-
s.version = '0.4.
|
5
|
+
s.version = '0.4.5'
|
6
6
|
s.summary = 'A gem to make setup and start of UI automation projects easier'
|
7
7
|
s.description = 'This gem has everything you need to start working with test automation'
|
8
8
|
s.authors = ['Agustin Pequeno']
|
@@ -71,8 +71,4 @@ describe AutomationGenerator do
|
|
71
71
|
context 'with cucumber and appium cross platform' do
|
72
72
|
include_examples 'creates mobile automation files', "#{FRAMEWORKS.first}_#{AUTOMATION_TYPES.last}"
|
73
73
|
end
|
74
|
-
|
75
|
-
context 'with cucumber and appium cross platform' do
|
76
|
-
include_examples 'creates mobile automation files', "#{FRAMEWORKS.first}_#{AUTOMATION_TYPES.last}"
|
77
|
-
end
|
78
74
|
end
|
@@ -32,7 +32,7 @@ describe CommonGenerator do
|
|
32
32
|
|
33
33
|
shared_examples "doesn't create a config file" do |name|
|
34
34
|
it "doesn't create a config file" do
|
35
|
-
expect(File).
|
35
|
+
expect(File).not_to exist("#{name}/config/config.yml")
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
data/spec/spec_helper.rb
CHANGED
@@ -11,7 +11,7 @@ RSpec.configure do |config|
|
|
11
11
|
config.before(:all) do
|
12
12
|
FRAMEWORKS.each do |framework|
|
13
13
|
AUTOMATION_TYPES.each do |automation|
|
14
|
-
MenuGenerator.new("#{framework}_#{automation}").generate_framework(automation, framework)
|
14
|
+
MenuGenerator.new("#{framework}_#{automation}").generate_framework(automation, framework, false)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_raider
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Agustin Pequeno
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -155,6 +155,7 @@ files:
|
|
155
155
|
- lib/generators/rspec_generator.rb
|
156
156
|
- lib/generators/templates/automation/abstract_component.tt
|
157
157
|
- lib/generators/templates/automation/abstract_page.tt
|
158
|
+
- lib/generators/templates/automation/app_page.tt
|
158
159
|
- lib/generators/templates/automation/appium_caps.tt
|
159
160
|
- lib/generators/templates/automation/component.tt
|
160
161
|
- lib/generators/templates/automation/home_page.tt
|
@@ -170,8 +171,10 @@ files:
|
|
170
171
|
- lib/generators/templates/automation/partials/selenium_login.tt
|
171
172
|
- lib/generators/templates/automation/partials/url_methods.tt
|
172
173
|
- lib/generators/templates/automation/partials/visit_method.tt
|
174
|
+
- lib/generators/templates/automation/partials/visual_login.tt
|
173
175
|
- lib/generators/templates/automation/partials/watir_login.tt
|
174
176
|
- lib/generators/templates/automation/pdp_page.tt
|
177
|
+
- lib/generators/templates/automation/visual_options.tt
|
175
178
|
- lib/generators/templates/common/config.tt
|
176
179
|
- lib/generators/templates/common/gemfile.tt
|
177
180
|
- lib/generators/templates/common/partials/automation_gems.tt
|
@@ -204,6 +207,8 @@ files:
|
|
204
207
|
- lib/generators/templates/helpers/raider_helper.tt
|
205
208
|
- lib/generators/templates/helpers/selenium_helper.tt
|
206
209
|
- lib/generators/templates/helpers/spec_helper.tt
|
210
|
+
- lib/generators/templates/helpers/visual_helper.tt
|
211
|
+
- lib/generators/templates/helpers/visual_spec_helper.tt
|
207
212
|
- lib/generators/templates/rspec/base_spec.tt
|
208
213
|
- lib/generators/templates/rspec/spec.tt
|
209
214
|
- lib/ruby_raider.rb
|
@@ -240,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
240
245
|
- !ruby/object:Gem::Version
|
241
246
|
version: '0'
|
242
247
|
requirements: []
|
243
|
-
rubygems_version: 3.3.
|
248
|
+
rubygems_version: 3.3.3
|
244
249
|
signing_key:
|
245
250
|
specification_version: 4
|
246
251
|
summary: A gem to make setup and start of UI automation projects easier
|