bugsnag-maze-runner 9.27.2 → 9.27.4
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/features/support/internal_hooks.rb +15 -1
- data/lib/maze/api/appium/app_manager.rb +10 -3
- data/lib/maze/api/appium/device_manager.rb +5 -0
- data/lib/maze/api/appium/file_manager.rb +2 -0
- data/lib/maze/api/appium/ui_manager.rb +3 -0
- data/lib/maze/hooks/appium_hooks.rb +10 -6
- data/lib/maze.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87adf6fe40bf417708320af55a4cc71c2e8656e7f79bdd60902b473c2d7aa2b7
|
4
|
+
data.tar.gz: 47b1d556a9bf643ada71d5476cffe5f82ca5db36c08238911f964c3ac4d9c4fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad05007ba4678a5a45811cae40ddbe6be9fce37d9a719520d7ee6494c436b9328f6ff649467286c4a241412c646ce5c9e83858fc565f5f69fdc3264f0a8bb478
|
7
|
+
data.tar.gz: 310739ae63a5583838503902c78e51030eb2ed1ccf175715f0270d5a5946cd4c94f48f62de3f8fbef758a6d9da4298b23fee4f8e553359f7e2aba91be4f0f7ad
|
@@ -100,13 +100,16 @@ end
|
|
100
100
|
|
101
101
|
# Before each scenario
|
102
102
|
Before do |scenario|
|
103
|
+
$logger.debug "Before hook - scenario.status: #{scenario.status}"
|
103
104
|
next if scenario.status == :skipped
|
104
105
|
|
105
106
|
Maze.scenario = Maze::Api::Cucumber::Scenario.new(scenario)
|
106
107
|
|
107
108
|
# Skip scenario if the driver it needs has failed
|
109
|
+
$logger.debug "Before hook - Maze.driver&.failed?: #{Maze.driver&.failed?}"
|
108
110
|
if (Maze.mode == :appium || Maze.mode == :browser) && Maze.driver.failed?
|
109
|
-
|
111
|
+
$logger.debug "Failing scenario because the #{Maze.mode.to_s} driver failed: #{Maze.driver.failure_reason}"
|
112
|
+
scenario.fail('Cannot run scenario - driver failed')
|
110
113
|
end
|
111
114
|
|
112
115
|
# Default to no dynamic retry
|
@@ -134,6 +137,7 @@ end
|
|
134
137
|
|
135
138
|
# General processing to be run after each scenario
|
136
139
|
After do |scenario|
|
140
|
+
$logger.debug "After hook 1 - scenario.status: #{scenario.status}"
|
137
141
|
next if scenario.status == :skipped
|
138
142
|
|
139
143
|
# If we're running on macos, take a screenshot if the scenario fails
|
@@ -227,22 +231,32 @@ end
|
|
227
231
|
#
|
228
232
|
# Furthermore, this hook should appear after the general hook as they are executed in reverse order by Cucumber.
|
229
233
|
After do |scenario|
|
234
|
+
$logger.debug "After hook 2 - scenario.status: #{scenario.status}"
|
230
235
|
next if scenario.status == :skipped
|
231
236
|
|
232
237
|
# Call any pre_complete hooks registered by the client
|
233
238
|
Maze.hooks.call_pre_complete scenario
|
234
239
|
|
240
|
+
# Fail the scenario if there are any invalid requests
|
235
241
|
unless Maze::Server.invalid_requests.size_all == 0
|
236
242
|
msg = "#{Maze::Server.invalid_requests.size_all} invalid request(s) received during scenario"
|
237
243
|
Maze.scenario.mark_as_failed msg
|
238
244
|
end
|
239
245
|
|
246
|
+
# Fail the scenario if the driver failed, if the scenario hasn't already failed
|
247
|
+
$logger.debug "After hook 2 - Maze.driver&.failed?: #{Maze.driver&.failed?}"
|
248
|
+
if (Maze.mode == :appium || Maze.mode == :browser) && Maze.driver.failed? && !scenario.failed?
|
249
|
+
$logger.debug "Marking scenario as failed because driver failed: #{Maze.driver.failure_reason}"
|
250
|
+
Maze.scenario.mark_as_failed Maze.driver.failure_reason
|
251
|
+
end
|
252
|
+
|
240
253
|
Maze.scenario.complete
|
241
254
|
end
|
242
255
|
|
243
256
|
# Test all requests against schemas or extra validation rules. These will only run if the schema/validation is
|
244
257
|
# specified for the specific endpoint
|
245
258
|
After do |scenario|
|
259
|
+
$logger.debug "After hook 3 - scenario.status: #{scenario.status}"
|
246
260
|
next if scenario.status == :skipped
|
247
261
|
|
248
262
|
['error', 'session', 'build', 'trace'].each do |endpoint|
|
@@ -18,14 +18,17 @@ module Maze
|
|
18
18
|
@driver.activate_app(@driver.app_id)
|
19
19
|
true
|
20
20
|
rescue Selenium::WebDriver::Error::ServerError, Selenium::WebDriver::Error::UnknownError => e
|
21
|
+
$logger.error "Failed to activate app: #{e.message}"
|
21
22
|
# Assume the remote appium session has stopped, so crash out of the session
|
22
23
|
fail_driver(e.message)
|
23
24
|
raise e
|
24
25
|
end
|
25
26
|
|
26
|
-
# Terminates the app
|
27
|
+
# Terminates the app. If terminate fails then clients may wish to ty the legacy close method, so an option
|
28
|
+
# is provided to not fail the Appium driver.
|
29
|
+
# @fail_driver [Boolean] Whether to fail the Appium driver if the app cannot be terminated
|
27
30
|
# @returns [Boolean] Whether the app was successfully closed
|
28
|
-
def terminate
|
31
|
+
def terminate(fail_driver = true)
|
29
32
|
if failed_driver?
|
30
33
|
$logger.error 'Cannot terminate the app - Appium driver failed.'
|
31
34
|
return false
|
@@ -34,8 +37,9 @@ module Maze
|
|
34
37
|
@driver.terminate_app(@driver.app_id)
|
35
38
|
true
|
36
39
|
rescue Selenium::WebDriver::Error::ServerError, Selenium::WebDriver::Error::UnknownError => e
|
40
|
+
$logger.error "Failed to terminate app: #{e.message}"
|
37
41
|
# Assume the remote appium session has stopped, so crash out of the session
|
38
|
-
fail_driver(e.message)
|
42
|
+
fail_driver(e.message) if fail_driver
|
39
43
|
raise e
|
40
44
|
end
|
41
45
|
|
@@ -50,6 +54,7 @@ module Maze
|
|
50
54
|
@driver.launch_app
|
51
55
|
true
|
52
56
|
rescue Selenium::WebDriver::Error::ServerError, Selenium::WebDriver::Error::UnknownError => e
|
57
|
+
$logger.error "Failed to launch app: #{e.message}"
|
53
58
|
# Assume the remote appium session has stopped, so crash out of the session
|
54
59
|
fail_driver(e.message)
|
55
60
|
raise e
|
@@ -66,6 +71,7 @@ module Maze
|
|
66
71
|
@driver.close_app
|
67
72
|
true
|
68
73
|
rescue Selenium::WebDriver::Error::ServerError, Selenium::WebDriver::Error::UnknownError => e
|
74
|
+
$logger.error "Failed to close app: #{e.message}"
|
69
75
|
# Assume the remote appium session has stopped, so crash out of the session
|
70
76
|
fail_driver(e.message)
|
71
77
|
raise e
|
@@ -81,6 +87,7 @@ module Maze
|
|
81
87
|
|
82
88
|
@driver.app_state(@driver.app_id)
|
83
89
|
rescue Selenium::WebDriver::Error::ServerError, Selenium::WebDriver::Error::UnknownError => e
|
90
|
+
$logger.error "Failed to get app state: #{e.message}"
|
84
91
|
# Assume the remote appium session has stopped, so crash out of the session
|
85
92
|
fail_driver(e.message)
|
86
93
|
raise e
|
@@ -19,6 +19,7 @@ module Maze
|
|
19
19
|
@driver.unlock
|
20
20
|
true
|
21
21
|
rescue Selenium::WebDriver::Error::ServerError => e
|
22
|
+
$logger.error "Failed to unlock the device: #{e.message}"
|
22
23
|
# Assume the remote appium session has stopped, so crash out of the session
|
23
24
|
fail_driver(e.message)
|
24
25
|
raise e
|
@@ -35,6 +36,7 @@ module Maze
|
|
35
36
|
@driver.back
|
36
37
|
true
|
37
38
|
rescue Selenium::WebDriver::Error::ServerError => e
|
39
|
+
$logger.error "Failed to press back: #{e.message}"
|
38
40
|
# Assume the remote appium session has stopped, so crash out of the session
|
39
41
|
fail_driver(e.message)
|
40
42
|
raise e
|
@@ -52,6 +54,7 @@ module Maze
|
|
52
54
|
|
53
55
|
@driver.get_log(log_type)
|
54
56
|
rescue Selenium::WebDriver::Error::ServerError => e
|
57
|
+
$logger.error "Failed to get logs: #{e.message}"
|
55
58
|
# Assume the remote appium session has stopped, so crash out of the session
|
56
59
|
fail_driver(e.message)
|
57
60
|
raise e
|
@@ -69,6 +72,7 @@ module Maze
|
|
69
72
|
@driver.set_rotation(orientation)
|
70
73
|
true
|
71
74
|
rescue Selenium::WebDriver::Error::ServerError => e
|
75
|
+
$logger.error "Failed to set the device rotation: #{e.message}"
|
72
76
|
# Assume the remote appium session has stopped, so crash out of the session
|
73
77
|
fail_driver(e.message)
|
74
78
|
raise e
|
@@ -84,6 +88,7 @@ module Maze
|
|
84
88
|
|
85
89
|
JSON.generate(@driver.device_info)
|
86
90
|
rescue Selenium::WebDriver::Error::ServerError => e
|
91
|
+
$logger.error "Failed to get the device info: #{e.message}"
|
87
92
|
# Assume the remote appium session has stopped, so crash out of the session
|
88
93
|
fail_driver(e.message)
|
89
94
|
raise e
|
@@ -35,6 +35,7 @@ module Maze
|
|
35
35
|
$logger.error "Error writing file to device: #{e.message}"
|
36
36
|
false
|
37
37
|
rescue Selenium::WebDriver::Error::ServerError => e
|
38
|
+
$logger.error "Error writing file to device: #{e.message}"
|
38
39
|
# Assume the remote appium session has stopped, so crash out of the session
|
39
40
|
fail_driver(e.message)
|
40
41
|
raise e
|
@@ -72,6 +73,7 @@ module Maze
|
|
72
73
|
$logger.error "Error reading file from device: #{e.message}"
|
73
74
|
nil
|
74
75
|
rescue Selenium::WebDriver::Error::ServerError => e
|
76
|
+
$logger.error "Error reading file from device: #{e.message}"
|
75
77
|
# Assume the remote appium session has stopped, so crash out of the session
|
76
78
|
fail_driver(e.message)
|
77
79
|
raise e
|
@@ -22,6 +22,7 @@ module Maze
|
|
22
22
|
|
23
23
|
@driver.wait_for_element(element_id, timeout, retry_if_stale)
|
24
24
|
rescue Selenium::WebDriver::Error::ServerError => e
|
25
|
+
$logger.error "Error waiting for element #{element_id}: #{e.message}"
|
25
26
|
# Assume the remote appium session has stopped, so crash out of the session
|
26
27
|
fail_driver(e.message)
|
27
28
|
raise e
|
@@ -41,6 +42,7 @@ module Maze
|
|
41
42
|
@driver.click_element(element_id)
|
42
43
|
true
|
43
44
|
rescue Selenium::WebDriver::Error::ServerError => e
|
45
|
+
$logger.error "Error clicking element #{element_id}: #{e.message}"
|
44
46
|
# Assume the remote appium session has stopped, so crash out of the session
|
45
47
|
fail_driver(e.message)
|
46
48
|
raise e
|
@@ -59,6 +61,7 @@ module Maze
|
|
59
61
|
|
60
62
|
@driver.click_element_if_present(element_id)
|
61
63
|
rescue Selenium::WebDriver::Error::ServerError => e
|
64
|
+
$logger.error "Error clicking element #{element_id}: #{e.message}"
|
62
65
|
# Assume the remote appium session has stopped, so crash out of the session
|
63
66
|
fail_driver(e.message)
|
64
67
|
raise e
|
@@ -24,23 +24,27 @@ module Maze
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def after(scenario)
|
27
|
+
$logger.debug "Appium after hook"
|
28
|
+
|
27
29
|
manager = Maze::Api::Appium::AppManager.new
|
28
30
|
if Maze.config.os == 'macos'
|
29
|
-
# Close the app - without the sleep
|
31
|
+
# Close the app - without the sleep launching the app for the next scenario intermittently fails
|
30
32
|
system("killall -KILL #{Maze.config.app} && sleep 1")
|
31
33
|
elsif [:bb, :bs, :local].include? Maze.config.farm
|
32
|
-
|
33
|
-
# commands from the previous scenario (in idempotent mode).
|
34
|
+
close_fallback = Maze.config.appium_version && Maze.config.appium_version.to_f < 2.0
|
34
35
|
begin
|
35
|
-
manager.terminate
|
36
|
+
manager.terminate(!close_fallback)
|
36
37
|
rescue Selenium::WebDriver::Error::UnknownError, Selenium::WebDriver::Error::InvalidSessionIdError
|
37
|
-
if
|
38
|
+
if close_fallback
|
38
39
|
$logger.warn 'terminate_app failed, using the slower but more forceful close_app instead'
|
39
40
|
manager.close
|
40
41
|
else
|
41
|
-
$logger.warn 'terminate_app failed, future errors may occur if the application did not close
|
42
|
+
$logger.warn 'terminate_app failed, future errors may occur if the application did not close properly'
|
42
43
|
end
|
43
44
|
end
|
45
|
+
|
46
|
+
# Reset the server before relaunching the app to ensure that test fixtures cannot fetch
|
47
|
+
# commands from the previous scenario (in idempotent mode).
|
44
48
|
Maze::Server.reset!
|
45
49
|
manager.activate
|
46
50
|
end
|
data/lib/maze.rb
CHANGED
@@ -8,7 +8,7 @@ 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 = '9.27.
|
11
|
+
VERSION = '9.27.4'
|
12
12
|
|
13
13
|
class << self
|
14
14
|
attr_accessor :check, :driver, :internal_hooks, :mode, :start_time, :dynamic_retry, :public_address,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bugsnag-maze-runner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 9.27.
|
4
|
+
version: 9.27.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Kirkland
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-04-
|
11
|
+
date: 2025-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|