bugsnag-maze-runner 9.36.0 → 10.0.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/bin/maze-runner +0 -2
- data/lib/features/steps/app_automator_steps.rb +0 -29
- data/lib/features/steps/error_reporting_steps.rb +0 -8
- data/lib/features/steps/payload_steps.rb +0 -10
- data/lib/features/support/internal_hooks.rb +0 -12
- data/lib/maze/aws_public_ip.rb +0 -12
- data/lib/maze/client/appium/bb_client.rb +4 -6
- data/lib/maze/client/appium/bs_client.rb +4 -6
- data/lib/maze/client/appium.rb +1 -8
- data/lib/maze/client/selenium/bs_client.rb +11 -33
- data/lib/maze/configuration.rb +0 -16
- data/lib/maze/driver/appium.rb +0 -65
- data/lib/maze/driver/browser.rb +3 -9
- data/lib/maze/option/parser.rb +0 -8
- data/lib/maze/option/processor.rb +1 -8
- data/lib/maze/option.rb +0 -4
- data/lib/maze/plugins/global_retry_plugin.rb +1 -1
- data/lib/maze/retry_handler.rb +2 -22
- data/lib/maze.rb +2 -2
- metadata +7 -24
- data/lib/features/steps/deprecated_steps.rb +0 -8
- data/lib/features/steps/document_server_steps.rb +0 -7
- data/lib/maze/client/appium/bs_legacy_client.rb +0 -31
- data/lib/maze/document_server.rb +0 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49987743ddaa8d0fbddf850756f7ec663cc635a8187343a144dd024d667cda71
|
4
|
+
data.tar.gz: 75a9f5f0bb5c5cee0356107a73ef62558bef6dd9eced8d6038e62b7cbf282275
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 52b1fbeb47067155bf4608c7189361f745961b58e1b8186d337b99d82eaa65fbf74a8aaafa1dc05fd273bbcaf3185d973caf75fae8a5cf554e4bc0a49d2ca0cf
|
7
|
+
data.tar.gz: b360e8a7182e2b9c3d15c201dde259d31169bd8b80c620b8adfb081e19b283b323597ee885a1c8a1e522f796bfc51b01b7fc4dbfb9272adb1a17f8dcb13be2eb
|
data/bin/maze-runner
CHANGED
@@ -29,7 +29,6 @@ require_relative '../lib/maze/client/appium/base_client'
|
|
29
29
|
require_relative '../lib/maze/client/appium/bb_client'
|
30
30
|
require_relative '../lib/maze/client/appium/bb_devices'
|
31
31
|
require_relative '../lib/maze/client/appium/bs_client'
|
32
|
-
require_relative '../lib/maze/client/appium/bs_legacy_client'
|
33
32
|
require_relative '../lib/maze/client/appium/bs_devices'
|
34
33
|
require_relative '../lib/maze/client/appium/local_client'
|
35
34
|
require_relative '../lib/maze/client/appium/session_metadata'
|
@@ -42,7 +41,6 @@ require_relative '../lib/maze/client/selenium/local_client'
|
|
42
41
|
require_relative '../lib/maze/aws_public_ip'
|
43
42
|
require_relative '../lib/maze/compare'
|
44
43
|
require_relative '../lib/maze/docker'
|
45
|
-
require_relative '../lib/maze/document_server'
|
46
44
|
require_relative '../lib/maze/errors'
|
47
45
|
require_relative '../lib/maze/generator'
|
48
46
|
require_relative '../lib/maze/helper'
|
@@ -49,38 +49,9 @@ When('I send the app to the background for {int} second(s)') do |timeout|
|
|
49
49
|
Maze::Api::Appium::AppManager.new.background(timeout)
|
50
50
|
end
|
51
51
|
|
52
|
-
# Clears a given element
|
53
|
-
# Requires a running Appium driver
|
54
|
-
#
|
55
|
-
# @step_input element_id [String] The locator id
|
56
|
-
# @deprecated To be removed in the next major version
|
57
|
-
When('I clear the element {string}') do |element_id|
|
58
|
-
Maze.driver.clear_element(element_id)
|
59
|
-
end
|
60
|
-
|
61
|
-
# Sends keys to a given element
|
62
|
-
# Requires a running Appium driver
|
63
|
-
#
|
64
|
-
# @step_input keys [String] The keys to send to the element
|
65
|
-
# @step_input element_id [String] The locator id
|
66
|
-
# @deprecated To be removed in the next major version
|
67
|
-
When('I send the keys {string} to the element {string}') do |keys, element_id|
|
68
|
-
Maze.driver.send_keys_to_element(element_id, keys)
|
69
|
-
end
|
70
|
-
|
71
52
|
# Set the device orientation to either portrait or landscape
|
72
53
|
# Requires a running Appium driver
|
73
54
|
When('I set the device orientation to {orientation}') do |orientation|
|
74
55
|
Maze::Api::Appium::DeviceManager.new.set_rotation orientation
|
75
56
|
end
|
76
57
|
|
77
|
-
# Sends keys to a given element, clearing it first
|
78
|
-
# Requires a running Appium driver
|
79
|
-
#
|
80
|
-
# @step_input keys [String] The keys to send to the element
|
81
|
-
# @step_input element_id [String] The locator id
|
82
|
-
# @deprecated To be removed in the next major version
|
83
|
-
When('I clear and send the keys {string} to the element {string}') do |keys, element_id|
|
84
|
-
Maze.driver.clear_and_send_keys_to_element(element_id, keys)
|
85
|
-
end
|
86
|
-
|
@@ -136,14 +136,6 @@ Then('the event {string} equals {float} to {int} decimal place(s)') do |field, f
|
|
136
136
|
step "the error payload field \"events.0.#{field}\" equals #{float_value} to #{places} decimal places"
|
137
137
|
end
|
138
138
|
|
139
|
-
# Tests whether a value in the first event entry equals an integer.
|
140
|
-
#
|
141
|
-
# @step_input field [String] The relative location of the value to test
|
142
|
-
# @step_input value [Integer] The integer to test against
|
143
|
-
Then('the event {string} equals {int}') do |field, value|
|
144
|
-
step "the error payload field \"events.0.#{field}\" equals #{value}"
|
145
|
-
end
|
146
|
-
|
147
139
|
# Tests whether a value in the first event entry starts with a string.
|
148
140
|
#
|
149
141
|
# @step_input field [String] The relative location of the value to test
|
@@ -76,16 +76,6 @@ Then('the {request_type} payload field {string} is not null') do |request_type,
|
|
76
76
|
Maze.check.not_nil(Maze::Helper.read_key_path(list.current[:body], field_path))
|
77
77
|
end
|
78
78
|
|
79
|
-
# Tests that a payload element equals an integer.
|
80
|
-
#
|
81
|
-
# @step_input request_type [String] The type of request (error, session, build, etc)
|
82
|
-
# @step_input field_path [String] Path to the tested element
|
83
|
-
# @step_input int_value [Integer] The value to test against
|
84
|
-
Then('the {request_type} payload field {string} equals {int}') do |request_type, field_path, int_value|
|
85
|
-
Maze.check.equal(int_value,
|
86
|
-
Maze::Helper.read_key_path(Maze::Server.list_for(request_type).current[:body], field_path))
|
87
|
-
end
|
88
|
-
|
89
79
|
# Tests that a payload element equals a float.
|
90
80
|
#
|
91
81
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
@@ -57,20 +57,11 @@ BeforeAll do
|
|
57
57
|
# Call any blocks registered by the client
|
58
58
|
Maze.hooks.call_before_all
|
59
59
|
|
60
|
-
# Start document server, if asked for
|
61
|
-
# This must happen after any client hooks have run, so that they can set the server root
|
62
|
-
Maze::DocumentServer.start unless Maze.config.document_server_root.nil?
|
63
|
-
|
64
60
|
# Determine public IP if enabled
|
65
61
|
if Maze.config.aws_public_ip
|
66
62
|
public_ip = Maze::AwsPublicIp.new
|
67
63
|
Maze.public_address = public_ip.address
|
68
64
|
$logger.info "Public address: #{Maze.public_address}"
|
69
|
-
|
70
|
-
unless Maze.config.document_server_root.nil?
|
71
|
-
Maze.public_document_server_address = public_ip.document_server_address
|
72
|
-
$logger.info "Public document server address: #{Maze.public_document_server_address}"
|
73
|
-
end
|
74
65
|
end
|
75
66
|
|
76
67
|
# An initial setup for total success status
|
@@ -146,9 +137,6 @@ After do |scenario|
|
|
146
137
|
# Call any blocks registered by the client
|
147
138
|
Maze.hooks.call_after scenario
|
148
139
|
|
149
|
-
# Stop document server if started by the Cucumber step
|
150
|
-
Maze::DocumentServer.manual_stop
|
151
|
-
|
152
140
|
# Stop terminating server if started by the Cucumber step
|
153
141
|
Maze::TerminatingServer.stop
|
154
142
|
|
data/lib/maze/aws_public_ip.rb
CHANGED
@@ -5,29 +5,17 @@ module Maze
|
|
5
5
|
class AwsPublicIp
|
6
6
|
attr_reader :host
|
7
7
|
attr_reader :port
|
8
|
-
attr_reader :document_server_port
|
9
8
|
|
10
9
|
def address
|
11
10
|
"#{@ip}:#{@port}"
|
12
11
|
end
|
13
12
|
|
14
|
-
def document_server_address
|
15
|
-
return nil if @document_server_port.nil?
|
16
|
-
|
17
|
-
"#{@ip}:#{@document_server_port}"
|
18
|
-
end
|
19
|
-
|
20
13
|
def initialize
|
21
14
|
# This class is only relevant on Buildkite
|
22
15
|
return unless ENV['BUILDKITE']
|
23
16
|
|
24
17
|
@ip = determine_public_ip
|
25
18
|
@port = determine_public_port Maze.config.port
|
26
|
-
|
27
|
-
unless Maze.config.document_server_root.nil?
|
28
|
-
@document_server_port = determine_public_port Maze.config.document_server_port
|
29
|
-
end
|
30
|
-
|
31
19
|
end
|
32
20
|
|
33
21
|
# Determines the public IP address of the running AWS instance
|
@@ -51,12 +51,10 @@ module Maze
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def start_scenario
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
FIXTURE_CONFIG)
|
59
|
-
end
|
54
|
+
# Write Maze's address to file and push to the device
|
55
|
+
maze_address = Maze.public_address || "local:#{Maze.config.port}"
|
56
|
+
Maze::Api::Appium::FileManager.new.write_app_file(JSON.generate({ maze_address: maze_address }),
|
57
|
+
FIXTURE_CONFIG)
|
60
58
|
|
61
59
|
super
|
62
60
|
end
|
@@ -31,12 +31,10 @@ module Maze
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def start_scenario
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
FIXTURE_CONFIG)
|
39
|
-
end
|
34
|
+
# Write Maze's address to file and push to the device
|
35
|
+
maze_address = "bs-local.com:#{Maze.config.port}"
|
36
|
+
Maze::Api::Appium::FileManager.new.write_app_file(JSON.generate({ maze_address: maze_address }),
|
37
|
+
FIXTURE_CONFIG)
|
40
38
|
|
41
39
|
super
|
42
40
|
end
|
data/lib/maze/client/appium.rb
CHANGED
@@ -5,14 +5,7 @@ module Maze
|
|
5
5
|
client_class =
|
6
6
|
case Maze.config.farm
|
7
7
|
when :bb then BitBarClient
|
8
|
-
when :bs
|
9
|
-
if Maze.config.legacy_driver?
|
10
|
-
$logger.info 'Using the Legacy (JWP) Appium client'
|
11
|
-
BrowserStackLegacyClient
|
12
|
-
else
|
13
|
-
$logger.info 'Using the W3C Appium client'
|
14
|
-
BrowserStackClient
|
15
|
-
end
|
8
|
+
when :bs then BrowserStackClient
|
16
9
|
when :local then LocalClient
|
17
10
|
end
|
18
11
|
|
@@ -23,45 +23,23 @@ module Maze
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def create_capabilities(config)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
capabilities['acceptInsecureCerts'] = 'true'
|
32
|
-
capabilities.merge! JSON.parse(config.capabilities_option)
|
33
|
-
capabilities.merge! project_name_capabilities
|
34
|
-
add_browser_capabilities(config, capabilities)
|
35
|
-
else
|
36
|
-
raw_capabilities = {
|
37
|
-
'acceptInsecureCerts' => true,
|
38
|
-
'bstack:options' => {
|
39
|
-
'local' => 'true',
|
40
|
-
'localIdentifier' => Maze.run_uuid
|
41
|
-
}
|
26
|
+
raw_capabilities = {
|
27
|
+
'acceptInsecureCerts' => true,
|
28
|
+
'bstack:options' => {
|
29
|
+
'local' => 'true',
|
30
|
+
'localIdentifier' => Maze.run_uuid
|
42
31
|
}
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
32
|
+
}
|
33
|
+
raw_capabilities.deep_merge! JSON.parse(config.capabilities_option)
|
34
|
+
raw_capabilities.merge! project_name_capabilities
|
35
|
+
add_browser_capabilities(config, raw_capabilities)
|
36
|
+
capabilities = ::Selenium::WebDriver::Remote::Capabilities.new raw_capabilities
|
48
37
|
config.capabilities = capabilities
|
49
38
|
end
|
50
39
|
|
51
40
|
def add_browser_capabilities(config, capabilities)
|
52
41
|
browsers = YAML.safe_load(File.read("#{__dir__}/bs_browsers.yml"))
|
53
|
-
|
54
|
-
|
55
|
-
if config.legacy_driver?
|
56
|
-
# Convert W3S capabilities to JSON-WP
|
57
|
-
capabilities['browser'] = browser['browserName']
|
58
|
-
capabilities['browser_version'] = browser['browserVersion']
|
59
|
-
capabilities['device'] = browser['device']
|
60
|
-
capabilities['os'] = browser['os']
|
61
|
-
capabilities['os_version'] = browser['osVersion']
|
62
|
-
else
|
63
|
-
capabilities.deep_merge! browser
|
64
|
-
end
|
42
|
+
capabilities.deep_merge! browsers[config.browser]
|
65
43
|
end
|
66
44
|
|
67
45
|
def stop_session
|
data/lib/maze/configuration.rb
CHANGED
@@ -15,7 +15,6 @@ module Maze
|
|
15
15
|
self.span_timestamp_validation = true
|
16
16
|
self.unmanaged_traces_mode = false
|
17
17
|
self.client_mode_validation = true
|
18
|
-
@legacy_driver = false
|
19
18
|
end
|
20
19
|
|
21
20
|
#
|
@@ -41,12 +40,6 @@ module Maze
|
|
41
40
|
# Document server root
|
42
41
|
attr_accessor :document_server_root
|
43
42
|
|
44
|
-
# Document server bind address
|
45
|
-
attr_accessor :document_server_bind_address
|
46
|
-
|
47
|
-
# Document server port
|
48
|
-
attr_accessor :document_server_port
|
49
|
-
|
50
43
|
#
|
51
44
|
# Common configuration
|
52
45
|
#
|
@@ -194,15 +187,6 @@ module Maze
|
|
194
187
|
# URL of the Selenium server
|
195
188
|
attr_accessor :selenium_server_url
|
196
189
|
|
197
|
-
# Whether the legacy (JSON-WP) Appium driver should be used
|
198
|
-
def legacy_driver?
|
199
|
-
@legacy_driver
|
200
|
-
end
|
201
|
-
|
202
|
-
def legacy_driver=(value)
|
203
|
-
@legacy_driver = value
|
204
|
-
end
|
205
|
-
|
206
190
|
#
|
207
191
|
# Local testing specific configuration
|
208
192
|
#
|
data/lib/maze/driver/appium.rb
CHANGED
@@ -40,8 +40,6 @@ module Maze
|
|
40
40
|
# Timers
|
41
41
|
@find_element_timer = Maze.timers.add 'Appium - find element'
|
42
42
|
@click_element_timer = Maze.timers.add 'Appium - click element'
|
43
|
-
@clear_element_timer = Maze.timers.add 'Appium - clear element'
|
44
|
-
@send_keys_timer = Maze.timers.add 'Appium - send keys to element'
|
45
43
|
|
46
44
|
super({
|
47
45
|
'caps' => @capabilities,
|
@@ -168,20 +166,6 @@ module Maze
|
|
168
166
|
raise e
|
169
167
|
end
|
170
168
|
|
171
|
-
# Clears a given element
|
172
|
-
#
|
173
|
-
# @param element_id [String] the element to clear
|
174
|
-
def clear_element(element_id)
|
175
|
-
element = find_element_timed(element_id)
|
176
|
-
@clear_element_timer.time do
|
177
|
-
element.clear
|
178
|
-
end
|
179
|
-
rescue Selenium::WebDriver::Error::ServerError => e
|
180
|
-
# Assume the remote appium session has stopped, so crash out of the session
|
181
|
-
fail_driver(e)
|
182
|
-
raise e
|
183
|
-
end
|
184
|
-
|
185
169
|
# Gets the application hierarchy XML
|
186
170
|
def page_source
|
187
171
|
@driver.page_source
|
@@ -192,21 +176,6 @@ module Maze
|
|
192
176
|
@driver.unlock
|
193
177
|
end
|
194
178
|
|
195
|
-
# Sends keys to a given element
|
196
|
-
#
|
197
|
-
# @param element_id [String] the element to send text to
|
198
|
-
# @param text [String] the text to send
|
199
|
-
def send_keys_to_element(element_id, text)
|
200
|
-
element = find_element_timed(element_id)
|
201
|
-
@send_keys_timer.time do
|
202
|
-
element.send_keys(text)
|
203
|
-
end
|
204
|
-
rescue Selenium::WebDriver::Error::ServerError => e
|
205
|
-
# Assume the remote appium session has stopped, so crash out of the session
|
206
|
-
fail_driver(e)
|
207
|
-
raise e
|
208
|
-
end
|
209
|
-
|
210
179
|
# Sets the rotation of the device
|
211
180
|
#
|
212
181
|
# @param orientation [Symbol] :portrait or :landscape
|
@@ -218,40 +187,6 @@ module Maze
|
|
218
187
|
@driver.window_size
|
219
188
|
end
|
220
189
|
|
221
|
-
# Send keys to the device without a specific element
|
222
|
-
#
|
223
|
-
# @param text [String] the text to send
|
224
|
-
def send_keys(text)
|
225
|
-
@driver.send_keys(text)
|
226
|
-
end
|
227
|
-
|
228
|
-
# Sends keys to a given element, clearing it first
|
229
|
-
#
|
230
|
-
# @param element_id [String] the element to clear and send text to
|
231
|
-
# @param text [String] the text to send
|
232
|
-
def clear_and_send_keys_to_element(element_id, text)
|
233
|
-
element = find_element_timed(element_id)
|
234
|
-
@clear_element_timer.time do
|
235
|
-
element.clear
|
236
|
-
end
|
237
|
-
|
238
|
-
@send_keys_timer.time do
|
239
|
-
element.send_keys(text)
|
240
|
-
end
|
241
|
-
rescue Selenium::WebDriver::Error::ServerError => e
|
242
|
-
# Assume the remote appium session has stopped, so crash out of the session
|
243
|
-
fail_driver(e)
|
244
|
-
raise e
|
245
|
-
end
|
246
|
-
|
247
|
-
# Reset the currently running application after a given timeout
|
248
|
-
#
|
249
|
-
# @param timeout [Number] the amount of time in seconds to wait before resetting
|
250
|
-
def reset_with_timeout(timeout = 0.1)
|
251
|
-
sleep(timeout)
|
252
|
-
reset
|
253
|
-
end
|
254
|
-
|
255
190
|
def device_info
|
256
191
|
driver.execute_script('mobile:deviceInfo')
|
257
192
|
end
|
data/lib/maze/driver/browser.rb
CHANGED
@@ -128,15 +128,9 @@ module Maze
|
|
128
128
|
$logger.info "Starting Selenium driver"
|
129
129
|
time = Time.now
|
130
130
|
if driver_for == :remote
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
desired_capabilities: @capabilities
|
135
|
-
else
|
136
|
-
driver = ::Selenium::WebDriver.for :remote,
|
137
|
-
url: selenium_url,
|
138
|
-
capabilities: @capabilities
|
139
|
-
end
|
131
|
+
driver = ::Selenium::WebDriver.for :remote,
|
132
|
+
url: selenium_url,
|
133
|
+
capabilities: @capabilities
|
140
134
|
else
|
141
135
|
if driver_for == :chrome
|
142
136
|
options = Selenium::WebDriver::Options.chrome
|
data/lib/maze/option/parser.rb
CHANGED
@@ -85,14 +85,6 @@ module Maze
|
|
85
85
|
'Document server root',
|
86
86
|
short: :none,
|
87
87
|
type: :string
|
88
|
-
opt Option::DS_BIND_ADDRESS,
|
89
|
-
'Document server bind address',
|
90
|
-
short: :none,
|
91
|
-
type: :string
|
92
|
-
opt Option::DS_PORT,
|
93
|
-
'Document server port',
|
94
|
-
short: :none,
|
95
|
-
default: 9340
|
96
88
|
|
97
89
|
text ''
|
98
90
|
text 'Appium options:'
|
@@ -29,8 +29,6 @@ module Maze
|
|
29
29
|
|
30
30
|
# Document server options
|
31
31
|
config.document_server_root = options[Maze::Option::DS_ROOT]
|
32
|
-
config.document_server_bind_address = options[Maze::Option::DS_BIND_ADDRESS]
|
33
|
-
config.document_server_port = options[Maze::Option::DS_PORT]
|
34
32
|
|
35
33
|
# Logger options
|
36
34
|
config.file_log = options[Maze::Option::FILE_LOG]
|
@@ -52,7 +50,6 @@ module Maze
|
|
52
50
|
config.capabilities_option = options[Maze::Option::CAPABILITIES]
|
53
51
|
config.app_activity = options[Maze::Option::APP_ACTIVITY]
|
54
52
|
config.app_package = options[Maze::Option::APP_PACKAGE]
|
55
|
-
config.legacy_driver = !ENV['USE_LEGACY_DRIVER'].nil?
|
56
53
|
config.start_tunnel = options[Maze::Option::TUNNEL]
|
57
54
|
|
58
55
|
# Farm specific options
|
@@ -63,11 +60,7 @@ module Maze
|
|
63
60
|
if !device_option.empty?
|
64
61
|
config.device = device_option.first
|
65
62
|
config.device_list = device_option.drop(1)
|
66
|
-
|
67
|
-
config.os_version = Maze::Client::Appium::BrowserStackDevices::DEVICE_HASH[config.device]['os_version'].to_f
|
68
|
-
else
|
69
|
-
config.os_version = Maze::Client::Appium::BrowserStackDevices::DEVICE_HASH[config.device]['platformVersion'].to_f
|
70
|
-
end
|
63
|
+
config.os_version = Maze::Client::Appium::BrowserStackDevices::DEVICE_HASH[config.device]['platformVersion'].to_f
|
71
64
|
elsif !browser_option.empty?
|
72
65
|
config.browser = browser_option.first
|
73
66
|
config.browser_list = browser_option.drop(1)
|
data/lib/maze/option.rb
CHANGED
@@ -3,10 +3,6 @@
|
|
3
3
|
# Provides the set of Maze Runner command line options
|
4
4
|
module Maze
|
5
5
|
module Option
|
6
|
-
# Document server options
|
7
|
-
DS_BIND_ADDRESS = 'document-server-bind-address'
|
8
|
-
DS_PORT = 'document-server-port'
|
9
|
-
|
10
6
|
# Server options
|
11
7
|
HTTPS = 'https'
|
12
8
|
BIND_ADDRESS = 'bind-address'
|
@@ -23,7 +23,7 @@ module Maze
|
|
23
23
|
configuration.options[:retry] = 0
|
24
24
|
|
25
25
|
# Guard to check if the case should be retried
|
26
|
-
should_retry = event.result.failed? && Maze::RetryHandler.should_retry?(test_case
|
26
|
+
should_retry = event.result.failed? && Maze::RetryHandler.should_retry?(test_case)
|
27
27
|
|
28
28
|
next unless should_retry
|
29
29
|
|
data/lib/maze/retry_handler.rb
CHANGED
@@ -14,25 +14,11 @@ module Maze
|
|
14
14
|
# Determines whether a failed test_case should be restarted
|
15
15
|
#
|
16
16
|
# @param test_case [Cucumber::RunningTestCase] The current test_case or scenario
|
17
|
-
|
18
|
-
def should_retry?(test_case, event)
|
17
|
+
def should_retry?(test_case)
|
19
18
|
# Only retry if the option is set and we haven't already retried
|
20
19
|
return false if !Maze.config.enable_retries || retried_previously?(test_case)
|
21
20
|
|
22
|
-
if
|
23
|
-
if Maze.mode == :appium
|
24
|
-
if Maze.config.farm.eql?(:bb)
|
25
|
-
Maze::Hooks::ErrorCodeHook.exit_code = Maze::Api::ExitCode::APPIUM_SESSION_FAILURE
|
26
|
-
return false
|
27
|
-
else
|
28
|
-
$logger.warn "Retrying #{test_case.name} due to appium driver error: #{event.result.exception}"
|
29
|
-
Maze.driver.restart
|
30
|
-
end
|
31
|
-
elsif Maze.mode == :browser
|
32
|
-
$logger.warn "Retrying #{test_case.name} due to selenium driver error: #{event.result.exception}"
|
33
|
-
Maze.driver.refresh
|
34
|
-
end
|
35
|
-
elsif retry_on_tag?(test_case)
|
21
|
+
if retry_on_tag?(test_case)
|
36
22
|
$logger.warn "Retrying #{test_case.name} due to retry tag"
|
37
23
|
elsif Maze.dynamic_retry
|
38
24
|
$logger.warn "Retrying #{test_case.name} due to dynamic retry set"
|
@@ -53,12 +39,6 @@ module Maze
|
|
53
39
|
global_retried[test_case] += 1
|
54
40
|
end
|
55
41
|
|
56
|
-
def retry_on_driver_error?(event)
|
57
|
-
error_class = event.result.exception.class
|
58
|
-
maze_errors = Maze::Error::ERROR_CODES
|
59
|
-
Maze.driver && maze_errors.include?(error_class) && maze_errors[error_class][:retry]
|
60
|
-
end
|
61
|
-
|
62
42
|
def retry_on_tag?(test_case)
|
63
43
|
test_case.tags.any? do |tag|
|
64
44
|
RETRY_TAGS.include?(tag.name)
|
data/lib/maze.rb
CHANGED
@@ -8,11 +8,11 @@ require_relative 'maze/timers'
|
|
8
8
|
# providing an alternative to the proliferation of global variables or singletons.
|
9
9
|
module Maze
|
10
10
|
|
11
|
-
VERSION = '
|
11
|
+
VERSION = '10.0.0'
|
12
12
|
|
13
13
|
class << self
|
14
14
|
attr_accessor :check, :driver, :internal_hooks, :mode, :start_time, :dynamic_retry, :public_address,
|
15
|
-
:
|
15
|
+
:run_uuid, :scenario
|
16
16
|
|
17
17
|
def config
|
18
18
|
@config ||= Maze::Configuration.new
|
metadata
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bugsnag-maze-runner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 10.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Kirkland
|
8
|
+
- Josh Edney
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
@@ -16,14 +17,14 @@ dependencies:
|
|
16
17
|
requirements:
|
17
18
|
- - "~>"
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
+
version: '10.0'
|
20
21
|
type: :runtime
|
21
22
|
prerelease: false
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
23
24
|
requirements:
|
24
25
|
- - "~>"
|
25
26
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
27
|
+
version: '10.0'
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: os
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,20 +137,6 @@ dependencies:
|
|
136
137
|
- - "~>"
|
137
138
|
- !ruby/object:Gem::Version
|
138
139
|
version: '6.24'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: cucumber-expressions
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: 6.0.0
|
146
|
-
type: :runtime
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: 6.0.0
|
153
140
|
- !ruby/object:Gem::Dependency
|
154
141
|
name: curb
|
155
142
|
requirement: !ruby/object:Gem::Requirement
|
@@ -390,7 +377,7 @@ dependencies:
|
|
390
377
|
version: 0.9.6
|
391
378
|
description: Automation steps and mock server to validaterequest payloads response.
|
392
379
|
email:
|
393
|
-
-
|
380
|
+
- notifiers@bugsnag.com
|
394
381
|
executables:
|
395
382
|
- bb-failed-sessions
|
396
383
|
- benchmarks-to-datadog
|
@@ -421,8 +408,6 @@ files:
|
|
421
408
|
- lib/features/steps/breadcrumb_steps.rb
|
422
409
|
- lib/features/steps/browser_steps.rb
|
423
410
|
- lib/features/steps/build_api_steps.rb
|
424
|
-
- lib/features/steps/deprecated_steps.rb
|
425
|
-
- lib/features/steps/document_server_steps.rb
|
426
411
|
- lib/features/steps/error_reporting_steps.rb
|
427
412
|
- lib/features/steps/feature_flag_steps.rb
|
428
413
|
- lib/features/steps/header_steps.rb
|
@@ -461,7 +446,6 @@ files:
|
|
461
446
|
- lib/maze/client/appium/bb_devices.rb
|
462
447
|
- lib/maze/client/appium/bs_client.rb
|
463
448
|
- lib/maze/client/appium/bs_devices.rb
|
464
|
-
- lib/maze/client/appium/bs_legacy_client.rb
|
465
449
|
- lib/maze/client/appium/local_client.rb
|
466
450
|
- lib/maze/client/appium/session_metadata.rb
|
467
451
|
- lib/maze/client/bb_api_client.rb
|
@@ -477,7 +461,6 @@ files:
|
|
477
461
|
- lib/maze/compare.rb
|
478
462
|
- lib/maze/configuration.rb
|
479
463
|
- lib/maze/docker.rb
|
480
|
-
- lib/maze/document_server.rb
|
481
464
|
- lib/maze/driver/appium.rb
|
482
465
|
- lib/maze/driver/browser.rb
|
483
466
|
- lib/maze/error_monitor/assert_error_middleware.rb
|
@@ -550,7 +533,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
550
533
|
requirements:
|
551
534
|
- - ">="
|
552
535
|
- !ruby/object:Gem::Version
|
553
|
-
version:
|
536
|
+
version: '3.1'
|
554
537
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
555
538
|
requirements:
|
556
539
|
- - ">="
|
@@ -560,5 +543,5 @@ requirements: []
|
|
560
543
|
rubygems_version: 3.5.3
|
561
544
|
signing_key:
|
562
545
|
specification_version: 4
|
563
|
-
summary: Bugsnag
|
546
|
+
summary: Bugsnag SDK test harness
|
564
547
|
test_files: []
|
@@ -1,8 +0,0 @@
|
|
1
|
-
# @!group Deprecated steps
|
2
|
-
|
3
|
-
# Waits for a given number of spans to be received, which may be spread across one or more trace requests.
|
4
|
-
#
|
5
|
-
# @step_input span_count [Integer] The number of spans to wait for
|
6
|
-
When('I wait for {int} span(s)') do |span_count|
|
7
|
-
assert_received_spans Maze::Server.list_for('traces'), span_count
|
8
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module Maze
|
2
|
-
module Client
|
3
|
-
module Appium
|
4
|
-
class BrowserStackLegacyClient < BrowserStackClient
|
5
|
-
def device_capabilities
|
6
|
-
config = Maze.config
|
7
|
-
capabilities = {
|
8
|
-
'app' => config.app,
|
9
|
-
'browserstack.console' => 'errors',
|
10
|
-
'deviceOrientation' => 'portrait',
|
11
|
-
'noReset' => 'true'
|
12
|
-
}
|
13
|
-
device_caps = Maze::Client::Appium::BrowserStackDevices::DEVICE_HASH[config.device]
|
14
|
-
capabilities.deep_merge! device_caps
|
15
|
-
capabilities.deep_merge! JSON.parse(config.capabilities_option)
|
16
|
-
capabilities.merge! project_name_capabilities
|
17
|
-
capabilities['browserstack.appium_version'] = config.appium_version unless config.appium_version.nil?
|
18
|
-
unless device_caps['platformName'] == 'android' && device_caps['platformVersion'].to_i <= 6
|
19
|
-
capabilities['disableAnimations'] = 'true'
|
20
|
-
end
|
21
|
-
if Maze.config.start_tunnel
|
22
|
-
capabilities['browserstack.localIdentifier'] = Maze.run_uuid
|
23
|
-
capabilities['browserstack.local'] = 'true'
|
24
|
-
end
|
25
|
-
|
26
|
-
capabilities
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/lib/maze/document_server.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'webrick'
|
4
|
-
|
5
|
-
module Maze
|
6
|
-
# HTTP server for a given document root
|
7
|
-
class DocumentServer
|
8
|
-
class << self
|
9
|
-
# Start the document server. This is intended to be called only once per test run.
|
10
|
-
# Use manual_start for finer grained control.
|
11
|
-
def start
|
12
|
-
@thread = Thread.new do
|
13
|
-
options = {
|
14
|
-
DocumentRoot: Maze.config.document_server_root,
|
15
|
-
Port: Maze.config.document_server_port,
|
16
|
-
Logger: $logger,
|
17
|
-
AccessLog: []
|
18
|
-
}
|
19
|
-
options[:BindAddress] = Maze.config.document_server_bind_address unless Maze.config.document_server_bind_address.nil?
|
20
|
-
server = WEBrick::HTTPServer.new(options)
|
21
|
-
server.mount '/reflect', Servlets::ReflectiveServlet
|
22
|
-
|
23
|
-
$logger.info "Starting document server for root: #{Maze.config.document_server_root}"
|
24
|
-
server.start
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Starts the document server "manually" (via a Cucumber step as opposed to command line option)
|
29
|
-
def manual_start
|
30
|
-
if !@thread.nil? && @thread.alive?
|
31
|
-
$logger.warn 'Document Server has already been started on the command line, ignoring manual start'
|
32
|
-
return
|
33
|
-
end
|
34
|
-
@manual_start = true
|
35
|
-
start
|
36
|
-
end
|
37
|
-
|
38
|
-
def manual_stop
|
39
|
-
return unless @manual_start
|
40
|
-
|
41
|
-
@thread.kill
|
42
|
-
@manual_start = false
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|