Skip to content

Commit f4bd516

Browse files
committed
Correctly process driver stacktrace upon error
Related to #3683
1 parent 3c69c54 commit f4bd516

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

rb/lib/selenium/webdriver/remote/response.rb

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ module WebDriver
2222
module Remote
2323
# @api private
2424
class Response
25+
STACKTRACE_KEY = 'stackTrace'.freeze
26+
2527
attr_reader :code, :payload
2628
attr_writer :payload
2729

@@ -73,11 +75,23 @@ def assert_ok
7375
end
7476

7577
def add_backtrace(ex)
76-
return unless value.is_a?(Hash) && value['stackTrace']
78+
return unless error_payload.is_a?(Hash)
79+
80+
server_trace = error_payload[STACKTRACE_KEY] || error_payload[STACKTRACE_KEY.downcase]
81+
return unless server_trace
7782

78-
server_trace = value['stackTrace']
83+
backtrace = case server_trace
84+
when Array
85+
backtrace_from_remote(server_trace)
86+
when String
87+
server_trace.split("\n")
88+
end
7989

80-
backtrace = server_trace.map do |frame|
90+
ex.set_backtrace(backtrace + ex.backtrace)
91+
end
92+
93+
def backtrace_from_remote(server_trace)
94+
server_trace.map do |frame|
8195
next unless frame.is_a?(Hash)
8296

8397
file = frame['fileName']
@@ -91,8 +105,6 @@ def add_backtrace(ex)
91105

92106
"[remote server] #{file}:#{line}:in `#{meth}'"
93107
end.compact
94-
95-
ex.set_backtrace(backtrace + ex.backtrace)
96108
end
97109

98110
def error_payload

0 commit comments

Comments
 (0)