bugsnag-maze-runner 9.20.0 → 9.22.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28dc3c07d00916780e4defbb86b149a40a96451589add388acda492ebaf0d1cb
4
- data.tar.gz: 8c56d49cebb512a16f4c4df2b6cdb9df25f4a0f002760bbc2875f1487403bda5
3
+ metadata.gz: 5b4f925503cc54630e686c2e040e7400f317f0cf53ec5e0355452493ae7f3fe0
4
+ data.tar.gz: 1ba0c44262e72fe909d9ebdea4f8386cb7463a50ed9e868ecdc4d1bfcb83fddc
5
5
  SHA512:
6
- metadata.gz: 8a10cbf491a0ac15c89c2ba9ae385530c4e5c6a38207f3c6f88c2d53ced5a1904615c3d28846ce03b90370517067b8f00f88ba1f5898e0d742c434a0827d6e43
7
- data.tar.gz: fa6bc50b875cbce4a077be90e5f4561f5ff3f46e34debdb2298c530eef9e952fc722a0cc972cec387871a466d7a1fe6b3e33444cc438cc14fd2550e3170669ec
6
+ metadata.gz: 29948d516684ee1448456110c5427b4db74bba4849b7e2aad4d3601bd5f5b332036d9fa0b64b84eda2d71c209ac4cad4aca04ee346856c58fcbde45605e217cb
7
+ data.tar.gz: 30869b1f195fd936f8f795721844a28ede9fa620581284408c391b848ca96e399628a08eb6dea3a5a2a062f99cddeb7062d9decef1b701170dd02aed8b76ee73
@@ -103,7 +103,12 @@ end
103
103
  Before do |scenario|
104
104
  Maze.scenario = Maze::Api::Cucumber::Scenario.new(scenario)
105
105
 
106
- # Default to no dynamic try
106
+ # Skip scenario if the driver it needs has failed
107
+ if (Maze.mode == :appium || Maze.mode == :browser) && Maze.driver.failed?
108
+ skip_this_scenario
109
+ end
110
+
111
+ # Default to no dynamic retry
107
112
  Maze.dynamic_retry = false
108
113
 
109
114
  if ENV['BUILDKITE']
@@ -23,11 +23,16 @@ module Maze
23
23
  Maze.driver.session_capabilities['appPackage']
24
24
  when 'ios'
25
25
  unless app_id = Maze.driver.session_capabilities['CFBundleIdentifier']
26
- app_id = Maze.driver.session_capabilities['bundleID']
26
+ app_id = Maze.driver.session_capabilities['bundleId']
27
27
  end
28
28
  app_id
29
29
  end
30
30
 
31
+ if Maze.driver.app_id.nil?
32
+ $logger.error "Failed to determine app id."
33
+ $logger.debug "session_capabilities: #{Maze.driver.session_capabilities.inspect}"
34
+ end
35
+
31
36
  # Ensure the device is unlocked
32
37
  begin
33
38
  Maze.driver.unlock
@@ -129,7 +134,7 @@ module Maze
129
134
  end
130
135
 
131
136
  def stop_session
132
- Maze.driver&.driver_quit
137
+ Maze.driver.driver_quit unless Maze.driver.failed?
133
138
  Maze::AppiumServer.stop if Maze::AppiumServer.running
134
139
  end
135
140
  end
@@ -67,7 +67,7 @@ module Maze
67
67
 
68
68
  def log_run_intro
69
69
  # Log a link to the BrowserStack session search dashboard
70
- url = "https://app-automate.browserstack.com/dashboard/v2/search?query=#{Maze.run_uuid}&type=builds"
70
+ url = "https://app-automate.browserstack.com/projects/#{project_name_capabilities[:project]}/builds/#{Maze.run_uuid}/1?tab=tests"
71
71
  $logger.info Maze::Loggers::LogUtil.linkify(url, 'BrowserStack session(s)')
72
72
  end
73
73
 
@@ -11,7 +11,7 @@ module Maze
11
11
  end
12
12
 
13
13
  def stop_session
14
- Maze.driver&.driver_quit
14
+ Maze.driver.driver_quit unless Maze.driver.failed?
15
15
  end
16
16
  end
17
17
  end
@@ -86,7 +86,7 @@ module Maze
86
86
 
87
87
  def log_session_info
88
88
  # Log a link to the BrowserStack session search dashboard
89
- url = "https://automate.browserstack.com/dashboard/v2/search?query=#{Maze.run_uuid}&type=builds"
89
+ url = "https://automate.browserstack.com/projects/#{project_name_capabilities[:project]}/builds/#{Maze.run_uuid}/1?tab=tests"
90
90
  $logger.info Maze::Loggers::LogUtil.linkify url, 'BrowserStack session(s)'
91
91
  end
92
92
  end
@@ -20,7 +20,7 @@ module Maze
20
20
  attr_reader :device_type
21
21
 
22
22
  # @!attribute [r] capabilities
23
- # @return [Hash] The capabilities used to launch the BrowserStack instance
23
+ # @return [Hash] The capabilities used to launch the Appium session
24
24
  attr_reader :capabilities
25
25
 
26
26
  # Creates the Appium driver
@@ -32,6 +32,7 @@ module Maze
32
32
  # Sets up identifiers for ease of connecting jobs
33
33
  capabilities ||= {}
34
34
 
35
+ @failed = false
35
36
  @element_locator = locator
36
37
  @capabilities = capabilities
37
38
 
@@ -64,6 +65,17 @@ module Maze
64
65
  end
65
66
  end
66
67
 
68
+ # Whether the driver has known to have failed (it may still have failed and us not know yet)
69
+ def failed?
70
+ @failed
71
+ end
72
+
73
+ # Marks the driver as failed
74
+ def fail_driver
75
+ $logger.error 'Appium driver failed, remaining scenarios will be skipped'
76
+ @failed = true
77
+ end
78
+
67
79
  # Checks for an element, waiting until it is present or the method times out
68
80
  #
69
81
  # @param element_id [String] the element to search for
@@ -83,7 +95,7 @@ module Maze
83
95
  end
84
96
  rescue Selenium::WebDriver::Error::ServerError => e
85
97
  # Assume the remote appium session has stopped, so crash out of the session
86
- Maze.driver = nil
98
+ fail_driver
87
99
  raise e
88
100
  else
89
101
  true
@@ -94,7 +106,7 @@ module Maze
94
106
  super
95
107
  rescue Selenium::WebDriver::Error::ServerError => e
96
108
  # Assume the remote appium session has stopped, so crash out of the session
97
- Maze.driver = nil
109
+ fail_driver
98
110
  raise e
99
111
  end
100
112
 
@@ -103,7 +115,7 @@ module Maze
103
115
  super
104
116
  rescue Selenium::WebDriver::Error::ServerError => e
105
117
  # Assume the remote appium session has stopped, so crash out of the session
106
- Maze.driver = nil
118
+ fail_driver
107
119
  raise e
108
120
  end
109
121
 
@@ -114,7 +126,7 @@ module Maze
114
126
  end
115
127
  rescue Selenium::WebDriver::Error::ServerError => e
116
128
  # Assume the remote appium session has stopped, so crash out of the session
117
- Maze.driver = nil
129
+ fail_driver
118
130
  raise e
119
131
  end
120
132
 
@@ -128,7 +140,7 @@ module Maze
128
140
  end
129
141
  rescue Selenium::WebDriver::Error::ServerError => e
130
142
  # Assume the remote appium session has stopped, so crash out of the session
131
- Maze.driver = nil
143
+ fail_driver
132
144
  raise e
133
145
  end
134
146
 
@@ -146,7 +158,7 @@ module Maze
146
158
  false
147
159
  rescue Selenium::WebDriver::Error::ServerError => e
148
160
  # Assume the remote appium session has stopped, so crash out of the session
149
- Maze.driver = nil
161
+ fail_driver
150
162
  raise e
151
163
  end
152
164
 
@@ -160,7 +172,7 @@ module Maze
160
172
  end
161
173
  rescue Selenium::WebDriver::Error::ServerError => e
162
174
  # Assume the remote appium session has stopped, so crash out of the session
163
- Maze.driver = nil
175
+ fail_driver
164
176
  raise e
165
177
  end
166
178
 
@@ -185,7 +197,7 @@ module Maze
185
197
  end
186
198
  rescue Selenium::WebDriver::Error::ServerError => e
187
199
  # Assume the remote appium session has stopped, so crash out of the session
188
- Maze.driver = nil
200
+ fail_driver
189
201
  raise e
190
202
  end
191
203
 
@@ -222,7 +234,7 @@ module Maze
222
234
  end
223
235
  rescue Selenium::WebDriver::Error::ServerError => e
224
236
  # Assume the remote appium session has stopped, so crash out of the session
225
- Maze.driver = nil
237
+ fail_driver
226
238
  raise e
227
239
  end
228
240
 
@@ -13,15 +13,41 @@ module Maze
13
13
 
14
14
  def initialize(driver_for, selenium_url=nil, capabilities=nil)
15
15
  capabilities ||= {}
16
+ @failed = false
16
17
  @capabilities = capabilities
17
18
  @driver_for = driver_for
18
19
  @selenium_url = selenium_url
19
20
  end
20
21
 
22
+ # Whether the driver has known to have failed (it may still have failed and us not know yet)
23
+ def failed?
24
+ @failed
25
+ end
26
+
27
+ # Marks the driver as failed
28
+ def fail_driver
29
+ $logger.error 'Selenium driver failed, remaining scenarios will be skipped'
30
+ @failed = true
31
+ end
32
+
21
33
  def find_element(*args)
22
34
  @driver.find_element(*args)
23
35
  end
24
36
 
37
+ def wait_for_element(id)
38
+ @driver.find_element(id: id)
39
+ end
40
+
41
+ def click_element(id)
42
+ element = @driver.find_element(id: id)
43
+
44
+ if $browser.mobile?
45
+ element.click
46
+ else
47
+ @driver.action.move_to(element).click.perform
48
+ end
49
+ end
50
+
25
51
  def navigate
26
52
  @driver.navigate
27
53
  end
@@ -128,6 +154,7 @@ module Maze
128
154
  end
129
155
  $logger.info "Selenium driver started in #{(Time.now - time).to_i}s"
130
156
  @driver = driver
157
+ @failed = false
131
158
  rescue => error
132
159
  Bugsnag.notify error
133
160
  $logger.warn "Selenium driver failed to start in #{(Time.now - time).to_i}s"
@@ -42,11 +42,11 @@ module Maze
42
42
  # Reset the server to ensure that test fixtures cannot fetch
43
43
  # commands from the previous scenario (in idempotent mode).
44
44
  begin
45
- Maze.driver.terminate_app Maze.driver&.app_id
45
+ Maze.driver.terminate_app Maze.driver.app_id
46
46
  rescue Selenium::WebDriver::Error::UnknownError, Selenium::WebDriver::Error::InvalidSessionIdError
47
47
  if Maze.config.appium_version && Maze.config.appium_version.to_f < 2.0
48
48
  $logger.warn 'terminate_app failed, using the slower but more forceful close_app instead'
49
- Maze.driver&.close_app
49
+ Maze.driver.close_app
50
50
  else
51
51
  $logger.warn 'terminate_app failed, future errors may occur if the application did not close remotely'
52
52
  end
@@ -25,8 +25,7 @@ module Maze
25
25
  next unless event.test_case.eql?(test_case) && event.result.failed?
26
26
 
27
27
  Bugsnag.notify(event.result.exception) do |bsg_event|
28
-
29
- bsg_event.api_key = ENV['MAZE_SCENARIO_BUGSNAG_API_KEY']
28
+ bsg_event.api_key = ENV['MAZE_SCENARIO_BUGSNAG_API_KEY'] unless selenium_report?(event.result.exception)
30
29
 
31
30
  unless @last_test_step.nil?
32
31
 
@@ -54,6 +53,10 @@ module Maze
54
53
 
55
54
  super
56
55
  end
56
+
57
+ def selenium_report?(exception)
58
+ exception.class.to_s.include?('Selenium')
59
+ end
57
60
  end
58
61
  end
59
62
  end
data/lib/maze.rb CHANGED
@@ -7,7 +7,8 @@ require_relative 'maze/timers'
7
7
  # Glues the various parts of MazeRunner together that need to be accessed globally,
8
8
  # providing an alternative to the proliferation of global variables or singletons.
9
9
  module Maze
10
- VERSION = '9.20.0'
10
+
11
+ VERSION = '9.22.0'
11
12
 
12
13
  class << self
13
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.20.0
4
+ version: 9.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Kirkland
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-21 00:00:00.000000000 Z
11
+ date: 2025-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber