automation_helpers 4.1.1 → 5.0
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/automation_helpers/drivers/v4/capabilities.rb +3 -11
- data/lib/automation_helpers/drivers/v4/local.rb +4 -32
- data/lib/automation_helpers/drivers/v4/options.rb +23 -11
- data/lib/automation_helpers/drivers/v4/remote.rb +3 -3
- data/lib/automation_helpers/patches/base.rb +1 -1
- data/lib/automation_helpers/patches.rb +0 -3
- data/lib/automation_helpers/version.rb +1 -1
- data/lib/automation_helpers.rb +0 -26
- metadata +12 -55
- data/lib/automation_helpers/patches/parallel_cucumber.rb +0 -89
- data/lib/automation_helpers/patches/selenium_manager.rb +0 -50
- data/lib/automation_helpers/patches/selenium_options.rb +0 -77
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ac74d1da46721b813cf048c83f2c12393132af015ac62fbb38830f8c828550fb
|
|
4
|
+
data.tar.gz: 35342f56615fd96850664dd2c7fd1f6f662e88cf5c5c830ead0ade741fe3632e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ed219f7a15fdafda73b3fa56950fac854347ecb5f672e4e28475828d45c847c777d8c5534cecf5e6ee12ea168bdc6dfb96114ef386367298a4be8d5b700eb47a
|
|
7
|
+
data.tar.gz: 15874df9f590c88fa7981405f1618abedb3110dcb9ba52749835c993033ae8bb1b792e7be6afdf6efef751c87d37952bf6d5c3a0abae9ea1fb293513d9780be6
|
|
@@ -26,7 +26,6 @@ module AutomationHelpers
|
|
|
26
26
|
when :firefox; then firefox_capabilities
|
|
27
27
|
when :internet_explorer; then internet_explorer_capabilities
|
|
28
28
|
when :ios; then ios_capabilities(device_options)
|
|
29
|
-
when :safari; then safari_capabilities
|
|
30
29
|
else {}
|
|
31
30
|
end
|
|
32
31
|
end
|
|
@@ -83,6 +82,7 @@ module AutomationHelpers
|
|
|
83
82
|
|
|
84
83
|
def android_appium_version(android_version)
|
|
85
84
|
case android_version.to_f
|
|
85
|
+
when 12..; then '1.22.0'
|
|
86
86
|
when 10..; then '1.21.0'
|
|
87
87
|
when 9..; then '1.20.2'
|
|
88
88
|
else raise ArgumentError, "Your Android Version is too low. Please don't use lower than Android Pie (9)."
|
|
@@ -91,20 +91,12 @@ module AutomationHelpers
|
|
|
91
91
|
|
|
92
92
|
def ios_appium_version(ios_version)
|
|
93
93
|
case ios_version.to_f
|
|
94
|
+
when 14..; then '1.22.0'
|
|
94
95
|
when 13..; then '1.21.0'
|
|
95
96
|
when 12..; then '1.20.2'
|
|
96
|
-
|
|
97
|
-
else raise ArgumentError, "Your iOS Version is too low. Please don't use lower than iOS 11."
|
|
97
|
+
else raise ArgumentError, "Your iOS Version is too low. Please don't use lower than iOS 12."
|
|
98
98
|
end
|
|
99
99
|
end
|
|
100
|
-
|
|
101
|
-
def safari_capabilities
|
|
102
|
-
AutomationHelpers.logger.warn('Altering Browser Name request to alleviate Capybara failure with STP.')
|
|
103
|
-
|
|
104
|
-
{
|
|
105
|
-
'browserName' => 'Safari Technology Preview'
|
|
106
|
-
}
|
|
107
|
-
end
|
|
108
100
|
end
|
|
109
101
|
end
|
|
110
102
|
end
|
|
@@ -31,31 +31,16 @@ module AutomationHelpers
|
|
|
31
31
|
app,
|
|
32
32
|
browser: browser,
|
|
33
33
|
service: service,
|
|
34
|
-
|
|
34
|
+
options: options
|
|
35
35
|
)
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
# @return [Array]
|
|
40
|
-
#
|
|
41
|
-
# The order of these capabilities is important because in the internal configuration
|
|
42
|
-
# for the driver; these 2 objects are merged (And both will contain a browserName)
|
|
43
|
-
# as such we need to ensure the browserName we manually set in `desired_capabilities`
|
|
44
|
-
# is retained as this is the one required by safari
|
|
45
|
-
def capabilities
|
|
46
|
-
if safari?
|
|
47
|
-
[options, desired_capabilities]
|
|
48
|
-
else
|
|
49
|
-
[desired_capabilities, options]
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
39
|
private
|
|
54
40
|
|
|
55
|
-
# This is required to make local drivers work
|
|
56
|
-
# This is required in V13 of Safari as the driver there is notoriously flaky
|
|
57
|
-
#
|
|
58
|
-
# Safari V11 is unsupported.
|
|
41
|
+
# This is required to make local drivers work with Safari TP
|
|
42
|
+
# This is required in V13+ of Safari as the driver there is notoriously flaky
|
|
43
|
+
# Safari V11/V12 is unsupported
|
|
59
44
|
def service
|
|
60
45
|
return unless safari?
|
|
61
46
|
|
|
@@ -63,19 +48,6 @@ module AutomationHelpers
|
|
|
63
48
|
::Selenium::WebDriver::Service.safari(args: ['--diagnose'])
|
|
64
49
|
end
|
|
65
50
|
|
|
66
|
-
# This is required because Capybara and Safari aren't quite sure what the difference
|
|
67
|
-
# is between the two browsers. So to compensate an illegal browserName value is
|
|
68
|
-
# set that allows easy distinction between the two browsers
|
|
69
|
-
#
|
|
70
|
-
# NB: Whilst using Safari TP this is required.
|
|
71
|
-
def desired_capabilities
|
|
72
|
-
if safari?
|
|
73
|
-
Capabilities.for(:safari)
|
|
74
|
-
else
|
|
75
|
-
::Selenium::WebDriver::Remote::Capabilities.new
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
51
|
def options
|
|
80
52
|
Options.for(browser)
|
|
81
53
|
end
|
|
@@ -11,29 +11,41 @@ module AutomationHelpers
|
|
|
11
11
|
#
|
|
12
12
|
# #### Initial setup options
|
|
13
13
|
#
|
|
14
|
-
# - **ENV["HEADLESS"]** (optional) - Whether you want your browser to run headless or not
|
|
14
|
+
# - **ENV["HEADLESS"]** (optional) - Whether you want your browser (only applicable ones) to run headless or not
|
|
15
15
|
class Options
|
|
16
16
|
class << self
|
|
17
17
|
# @return [Selenium::Webdriver::Options]
|
|
18
18
|
#
|
|
19
19
|
# Returns the Options payload relevant to the browser specified to be passed to the driver instantiation
|
|
20
20
|
def for(browser)
|
|
21
|
-
initial_options(browser).tap { |opts| opts.headless! if headless? }
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
def initial_options(browser)
|
|
27
21
|
case browser
|
|
28
|
-
when :chrome; then
|
|
29
|
-
when :firefox; then
|
|
30
|
-
when :edge; then
|
|
31
|
-
when :safari; then
|
|
22
|
+
when :chrome; then chrome_options
|
|
23
|
+
when :firefox; then firefox_options
|
|
24
|
+
when :edge; then edge_options
|
|
25
|
+
when :safari; then safari_options
|
|
32
26
|
when :internet_explorer; then internet_explorer_options
|
|
33
27
|
else {}
|
|
34
28
|
end
|
|
35
29
|
end
|
|
36
30
|
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def chrome_options
|
|
34
|
+
::Selenium::WebDriver::Chrome::Options.new.tap { |opts| opts.add_argument('--headless=new') if headless? }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def firefox_options
|
|
38
|
+
::Selenium::WebDriver::Firefox::Options.new(log_level: 'trace').tap { |opts| opts.add_argument('-headless') if headless? }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def edge_options
|
|
42
|
+
::Selenium::WebDriver::Edge::Options.new.tap { |opts| opts.add_argument('--headless=new') if headless? }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def safari_options
|
|
46
|
+
::Selenium::WebDriver::Safari::Options.new(automatic_inspection: true)
|
|
47
|
+
end
|
|
48
|
+
|
|
37
49
|
# Constantly fire mouseOver events on click actions (Should help mitigate flaky clicks)
|
|
38
50
|
def internet_explorer_options
|
|
39
51
|
::Selenium::WebDriver::IE::Options.new(persistent_hover: true).tap do |opts|
|
|
@@ -7,7 +7,7 @@ module AutomationHelpers
|
|
|
7
7
|
module Drivers
|
|
8
8
|
module V4
|
|
9
9
|
#
|
|
10
|
-
# The Remote Driver that will connect to a
|
|
10
|
+
# The Remote Driver that will connect to a dockerized self-hosted grid
|
|
11
11
|
# This expects the grid to be live **and** accepting node requests
|
|
12
12
|
#
|
|
13
13
|
class Remote
|
|
@@ -17,7 +17,7 @@ module AutomationHelpers
|
|
|
17
17
|
# #### Initial setup options
|
|
18
18
|
#
|
|
19
19
|
# - **browser** (required) - When instantiating, the first argument must be the symbol that represents what browser to use
|
|
20
|
-
# - **ENV["HUB_URL"]** (required) - The environment variable HUB_URL must be set to the actively running
|
|
20
|
+
# - **ENV["HUB_URL"]** (required) - The environment variable HUB_URL must be set to the actively running dockerized grid
|
|
21
21
|
# (By default this should be +http://hub:4444/wd/hub+)
|
|
22
22
|
def initialize(browser)
|
|
23
23
|
@browser = browser
|
|
@@ -54,7 +54,7 @@ module AutomationHelpers
|
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def supported_browser?
|
|
57
|
-
%i[chrome firefox].include?(browser)
|
|
57
|
+
%i[chrome edge firefox].include?(browser)
|
|
58
58
|
end
|
|
59
59
|
end
|
|
60
60
|
end
|
|
@@ -14,7 +14,7 @@ module AutomationHelpers
|
|
|
14
14
|
|
|
15
15
|
Kernel.warn('This is now deprecated and should not be used') if deprecate?
|
|
16
16
|
AutomationHelpers.logger.info("Adding patch: #{self.class}")
|
|
17
|
-
AutomationHelpers.logger.
|
|
17
|
+
AutomationHelpers.logger.info(description)
|
|
18
18
|
perform
|
|
19
19
|
AutomationHelpers.logger.info('Patch successfully added.')
|
|
20
20
|
end
|
|
@@ -4,7 +4,4 @@ require 'automation_helpers/logger'
|
|
|
4
4
|
|
|
5
5
|
require 'automation_helpers/patches/base'
|
|
6
6
|
require 'automation_helpers/patches/capybara'
|
|
7
|
-
require 'automation_helpers/patches/parallel_cucumber'
|
|
8
7
|
require 'automation_helpers/patches/selenium_logger'
|
|
9
|
-
require 'automation_helpers/patches/selenium_manager'
|
|
10
|
-
require 'automation_helpers/patches/selenium_options'
|
data/lib/automation_helpers.rb
CHANGED
|
@@ -17,7 +17,6 @@ module AutomationHelpers
|
|
|
17
17
|
|
|
18
18
|
# The Automation Helpers logger object - This is called automatically in several
|
|
19
19
|
# locations and will log messages according to the normal Ruby protocol
|
|
20
|
-
# To alter (or check), the log level; call .log_level= or .log_level
|
|
21
20
|
#
|
|
22
21
|
# This logger object can also be used to manually log messages
|
|
23
22
|
#
|
|
@@ -31,12 +30,6 @@ module AutomationHelpers
|
|
|
31
30
|
@logger ||= Logger.create
|
|
32
31
|
end
|
|
33
32
|
|
|
34
|
-
def logger=(logger)
|
|
35
|
-
raise ArgumentError, 'You must supply an existing Logger' unless logger.is_a?(::Logger)
|
|
36
|
-
|
|
37
|
-
@logger = logger
|
|
38
|
-
end
|
|
39
|
-
|
|
40
33
|
# This writer method allows you to configure where you want the output of
|
|
41
34
|
# the automation_helpers logs to go (Default is $stdout)
|
|
42
35
|
#
|
|
@@ -45,24 +38,5 @@ module AutomationHelpers
|
|
|
45
38
|
def log_path=(logdev)
|
|
46
39
|
logger.reopen(logdev)
|
|
47
40
|
end
|
|
48
|
-
|
|
49
|
-
# To enable full logging (This uses the Ruby API, so can accept any of a
|
|
50
|
-
# Symbol / String / Integer as an input
|
|
51
|
-
# AutomationHelpers.log_level = :DEBUG
|
|
52
|
-
# AutomationHelpers.log_level = 'DEBUG'
|
|
53
|
-
# AutomationHelpers.log_level = 0
|
|
54
|
-
#
|
|
55
|
-
# To disable all logging
|
|
56
|
-
# AutomationHelpers.log_level = :UNKNOWN
|
|
57
|
-
def log_level=(value)
|
|
58
|
-
logger.level = value
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# To query what level is being logged
|
|
62
|
-
# AutomationHelpers.log_level
|
|
63
|
-
# => :INFO # By default
|
|
64
|
-
def log_level
|
|
65
|
-
%i[DEBUG INFO WARN ERROR FATAL UNKNOWN][logger.level]
|
|
66
|
-
end
|
|
67
41
|
end
|
|
68
42
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: automation_helpers
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: '5.0'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Luke Hill
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2023-08-
|
|
12
|
+
date: 2023-08-17 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: capybara
|
|
@@ -65,26 +65,6 @@ dependencies:
|
|
|
65
65
|
- - "~>"
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
67
|
version: '2.7'
|
|
68
|
-
- !ruby/object:Gem::Dependency
|
|
69
|
-
name: parallel_tests
|
|
70
|
-
requirement: !ruby/object:Gem::Requirement
|
|
71
|
-
requirements:
|
|
72
|
-
- - ">="
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: '3.7'
|
|
75
|
-
- - "<"
|
|
76
|
-
- !ruby/object:Gem::Version
|
|
77
|
-
version: '5'
|
|
78
|
-
type: :development
|
|
79
|
-
prerelease: false
|
|
80
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
81
|
-
requirements:
|
|
82
|
-
- - ">="
|
|
83
|
-
- !ruby/object:Gem::Version
|
|
84
|
-
version: '3.7'
|
|
85
|
-
- - "<"
|
|
86
|
-
- !ruby/object:Gem::Version
|
|
87
|
-
version: '5'
|
|
88
68
|
- !ruby/object:Gem::Dependency
|
|
89
69
|
name: rspec
|
|
90
70
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -105,76 +85,56 @@ dependencies:
|
|
|
105
85
|
requirements:
|
|
106
86
|
- - "~>"
|
|
107
87
|
- !ruby/object:Gem::Version
|
|
108
|
-
version: 1.
|
|
88
|
+
version: 1.56.0
|
|
109
89
|
type: :development
|
|
110
90
|
prerelease: false
|
|
111
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
112
92
|
requirements:
|
|
113
93
|
- - "~>"
|
|
114
94
|
- !ruby/object:Gem::Version
|
|
115
|
-
version: 1.
|
|
95
|
+
version: 1.56.0
|
|
116
96
|
- !ruby/object:Gem::Dependency
|
|
117
97
|
name: rubocop-performance
|
|
118
98
|
requirement: !ruby/object:Gem::Requirement
|
|
119
99
|
requirements:
|
|
120
100
|
- - "~>"
|
|
121
101
|
- !ruby/object:Gem::Version
|
|
122
|
-
version: 1.
|
|
102
|
+
version: 1.19.0
|
|
123
103
|
type: :development
|
|
124
104
|
prerelease: false
|
|
125
105
|
version_requirements: !ruby/object:Gem::Requirement
|
|
126
106
|
requirements:
|
|
127
107
|
- - "~>"
|
|
128
108
|
- !ruby/object:Gem::Version
|
|
129
|
-
version: 1.
|
|
109
|
+
version: 1.19.0
|
|
130
110
|
- !ruby/object:Gem::Dependency
|
|
131
111
|
name: rubocop-rspec
|
|
132
112
|
requirement: !ruby/object:Gem::Requirement
|
|
133
113
|
requirements:
|
|
134
114
|
- - "~>"
|
|
135
115
|
- !ruby/object:Gem::Version
|
|
136
|
-
version: 2.
|
|
116
|
+
version: 2.23.2
|
|
137
117
|
type: :development
|
|
138
118
|
prerelease: false
|
|
139
119
|
version_requirements: !ruby/object:Gem::Requirement
|
|
140
120
|
requirements:
|
|
141
121
|
- - "~>"
|
|
142
122
|
- !ruby/object:Gem::Version
|
|
143
|
-
version: 2.
|
|
123
|
+
version: 2.23.2
|
|
144
124
|
- !ruby/object:Gem::Dependency
|
|
145
125
|
name: selenium-webdriver
|
|
146
|
-
requirement: !ruby/object:Gem::Requirement
|
|
147
|
-
requirements:
|
|
148
|
-
- - ">="
|
|
149
|
-
- !ruby/object:Gem::Version
|
|
150
|
-
version: '4.0'
|
|
151
|
-
- - "<"
|
|
152
|
-
- !ruby/object:Gem::Version
|
|
153
|
-
version: '5'
|
|
154
|
-
type: :development
|
|
155
|
-
prerelease: false
|
|
156
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
157
|
-
requirements:
|
|
158
|
-
- - ">="
|
|
159
|
-
- !ruby/object:Gem::Version
|
|
160
|
-
version: '4.0'
|
|
161
|
-
- - "<"
|
|
162
|
-
- !ruby/object:Gem::Version
|
|
163
|
-
version: '5'
|
|
164
|
-
- !ruby/object:Gem::Dependency
|
|
165
|
-
name: webdrivers
|
|
166
126
|
requirement: !ruby/object:Gem::Requirement
|
|
167
127
|
requirements:
|
|
168
128
|
- - "~>"
|
|
169
129
|
- !ruby/object:Gem::Version
|
|
170
|
-
version: '
|
|
130
|
+
version: '4.0'
|
|
171
131
|
type: :development
|
|
172
132
|
prerelease: false
|
|
173
133
|
version_requirements: !ruby/object:Gem::Requirement
|
|
174
134
|
requirements:
|
|
175
135
|
- - "~>"
|
|
176
136
|
- !ruby/object:Gem::Version
|
|
177
|
-
version: '
|
|
137
|
+
version: '4.0'
|
|
178
138
|
description: Automation Patches / Extensions that allow you to extend your Ruby-based
|
|
179
139
|
testing frameworks
|
|
180
140
|
email:
|
|
@@ -207,10 +167,7 @@ files:
|
|
|
207
167
|
- lib/automation_helpers/patches.rb
|
|
208
168
|
- lib/automation_helpers/patches/base.rb
|
|
209
169
|
- lib/automation_helpers/patches/capybara.rb
|
|
210
|
-
- lib/automation_helpers/patches/parallel_cucumber.rb
|
|
211
170
|
- lib/automation_helpers/patches/selenium_logger.rb
|
|
212
|
-
- lib/automation_helpers/patches/selenium_manager.rb
|
|
213
|
-
- lib/automation_helpers/patches/selenium_options.rb
|
|
214
171
|
- lib/automation_helpers/version.rb
|
|
215
172
|
homepage: https://www.github.com/site-prism/automation_helpers
|
|
216
173
|
licenses:
|
|
@@ -227,14 +184,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
227
184
|
requirements:
|
|
228
185
|
- - ">="
|
|
229
186
|
- !ruby/object:Gem::Version
|
|
230
|
-
version: '
|
|
187
|
+
version: '3.0'
|
|
231
188
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
232
189
|
requirements:
|
|
233
190
|
- - ">="
|
|
234
191
|
- !ruby/object:Gem::Version
|
|
235
192
|
version: '0'
|
|
236
193
|
requirements: []
|
|
237
|
-
rubygems_version: 3.
|
|
194
|
+
rubygems_version: 3.2.33
|
|
238
195
|
signing_key:
|
|
239
196
|
specification_version: 4
|
|
240
197
|
summary: Automation Helpers - Avoid writing the most common things in Ruby Automation
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module AutomationHelpers
|
|
4
|
-
module Patches
|
|
5
|
-
#
|
|
6
|
-
# Fix the issue where the parser for parallel_tests doesn't permit the --retry flag (Or other flags at the end)
|
|
7
|
-
#
|
|
8
|
-
class ParallelCucumber < Base
|
|
9
|
-
private
|
|
10
|
-
|
|
11
|
-
def description
|
|
12
|
-
<<~DESCRIPTION
|
|
13
|
-
This patch fixes an issue where the parallel tests gem won't place the --retry flag in the correct
|
|
14
|
-
position for command invocation with cucumber
|
|
15
|
-
See: https://github.com/grosser/parallel_tests/pull/827 for more details/discussion including this fix
|
|
16
|
-
DESCRIPTION
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def perform
|
|
20
|
-
::ParallelTests::Gherkin::Runner.extend RetryFlagFix
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def deprecate_from
|
|
24
|
-
'3.12.0'
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def prevent_usage_from
|
|
28
|
-
'4.0.0'
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def gem_version
|
|
32
|
-
::ParallelTests::VERSION
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
module RetryFlagFix
|
|
37
|
-
def run_tests(test_files, process_number, num_processes, options)
|
|
38
|
-
# Copied Code - https://github.com/grosser/parallel_tests/blob/master/lib/parallel_tests/gherkin/runner.rb#L9
|
|
39
|
-
combined_scenarios = test_files
|
|
40
|
-
|
|
41
|
-
if options[:group_by] == :scenarios
|
|
42
|
-
grouped = test_files.map { |t| t.split(':') }.group_by(&:first)
|
|
43
|
-
combined_scenarios = grouped.map do |file, files_and_lines|
|
|
44
|
-
"#{file}:#{files_and_lines.map(&:last).join(':')}"
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
sanitized_test_files = combined_scenarios.map { |val| WINDOWS ? "\"#{val}\"" : Shellwords.escape(val) }
|
|
49
|
-
|
|
50
|
-
options[:env] ||= {}
|
|
51
|
-
options[:env] = options[:env].merge({ 'AUTOTEST' => '1' }) if $stdout.tty?
|
|
52
|
-
|
|
53
|
-
# New code
|
|
54
|
-
opts = cucumber_opts(options[:test_options])
|
|
55
|
-
cmd = [
|
|
56
|
-
executable,
|
|
57
|
-
(runtime_logging if File.directory?(File.dirname(runtime_log))),
|
|
58
|
-
opts[0],
|
|
59
|
-
*sanitized_test_files,
|
|
60
|
-
opts[1]
|
|
61
|
-
].compact.reject(&:empty?).join(' ')
|
|
62
|
-
execute_command(cmd, process_number, num_processes, options)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def cucumber_opts(given)
|
|
66
|
-
# All new code
|
|
67
|
-
initial =
|
|
68
|
-
if given =~ (/--profile/) || given =~ (/(^|\s)-p /)
|
|
69
|
-
given
|
|
70
|
-
else
|
|
71
|
-
[given, profile_from_config].compact.join(" ")
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
opts_as_individuals = initial.scan(/\S+\s\S+/)
|
|
75
|
-
desired_output = ['', '']
|
|
76
|
-
|
|
77
|
-
opts_as_individuals.each do |opt|
|
|
78
|
-
if opt.match?(/--retry \d+/)
|
|
79
|
-
desired_output[1] = opt
|
|
80
|
-
else
|
|
81
|
-
desired_output[0] = "#{desired_output[0]} #{opt}".strip
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
desired_output
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module AutomationHelpers
|
|
4
|
-
module Patches
|
|
5
|
-
#
|
|
6
|
-
# Fix the issue where the `#convert_cookie` API private method in selenium-webdriver doesn't include the
|
|
7
|
-
# 'httpOnly' property in the returned cookie hash structure
|
|
8
|
-
#
|
|
9
|
-
class SeleniumManager < Base
|
|
10
|
-
private
|
|
11
|
-
|
|
12
|
-
def description
|
|
13
|
-
<<~DESCRIPTION
|
|
14
|
-
This patch fixes an issue with Selenium4 not bubbling up the httpOnly property of a cookie
|
|
15
|
-
See: https://github.com/SeleniumHQ/selenium/pull/8958 for more details/discussion including this fix
|
|
16
|
-
DESCRIPTION
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def perform
|
|
20
|
-
::Selenium::WebDriver::Manager.prepend CookieConverter
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def deprecate_from
|
|
24
|
-
'4.0.0.beta3'
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def prevent_usage_from
|
|
28
|
-
'4.0.0'
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def gem_version
|
|
32
|
-
::Selenium::WebDriver::VERSION
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
#
|
|
37
|
-
# @api private
|
|
38
|
-
#
|
|
39
|
-
module CookieConverter
|
|
40
|
-
def convert_cookie(cookie)
|
|
41
|
-
super(cookie)
|
|
42
|
-
.merge(
|
|
43
|
-
{
|
|
44
|
-
http_only: cookie['httpOnly']
|
|
45
|
-
}
|
|
46
|
-
)
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module AutomationHelpers
|
|
4
|
-
module Patches
|
|
5
|
-
#
|
|
6
|
-
# Fix the issue where for some drivers selenium doesn't camelize the browser name key 'browserName' correctly
|
|
7
|
-
#
|
|
8
|
-
class SeleniumOptions < Base
|
|
9
|
-
def initialize(browser)
|
|
10
|
-
@browser = browser
|
|
11
|
-
super()
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# @return [nil || true]
|
|
15
|
-
#
|
|
16
|
-
# For SeleniumOptions we only want to run the patch when
|
|
17
|
-
# we are on browsers without the relevant JSON fixes in upstream
|
|
18
|
-
def patch!
|
|
19
|
-
return unless valid?
|
|
20
|
-
|
|
21
|
-
super
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
def valid?
|
|
27
|
-
%i[firefox safari].include?(@browser)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def description
|
|
31
|
-
<<~DESCRIPTION
|
|
32
|
-
This patch fixes an issue with Selenium4 not camelising the browser_name property
|
|
33
|
-
The issue is the driver, which is now fully W3C conformant expects `browserName`
|
|
34
|
-
|
|
35
|
-
See: https://github.com/SeleniumHQ/selenium/pull/8834 for more details/discussion including this fix
|
|
36
|
-
DESCRIPTION
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def perform
|
|
40
|
-
case @browser
|
|
41
|
-
when :firefox then ::Selenium::WebDriver::Firefox::Options.include CapabilitiesAsJsonFix
|
|
42
|
-
when :safari then ::Selenium::WebDriver::Safari::Options.include CapabilitiesAsJsonFix
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def deprecate_from
|
|
47
|
-
'4.0.0'
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def prevent_usage_from
|
|
51
|
-
'4.0.3'
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def gem_version
|
|
55
|
-
::Selenium::WebDriver::VERSION
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
#
|
|
60
|
-
# @api private
|
|
61
|
-
#
|
|
62
|
-
module CapabilitiesAsJsonFix
|
|
63
|
-
private
|
|
64
|
-
|
|
65
|
-
def generate_as_json(value, camelize_keys: true)
|
|
66
|
-
if value.is_a?(Hash)
|
|
67
|
-
value.each_with_object({}) do |(key, val), hash|
|
|
68
|
-
key = convert_json_key(key, camelize: camelize_keys)
|
|
69
|
-
hash[key] = generate_as_json(val, camelize_keys: key != 'prefs')
|
|
70
|
-
end
|
|
71
|
-
else
|
|
72
|
-
super
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|