File tree 3 files changed +32
-0
lines changed
lib/selenium/webdriver/remote
sig/lib/selenium/webdriver/remote
spec/integration/selenium/webdriver
3 files changed +32
-0
lines changed Original file line number Diff line number Diff line change @@ -58,12 +58,30 @@ def assert_ok
58
58
59
59
def add_cause ( ex , error , backtrace )
60
60
cause = Error ::WebDriverError . new
61
+ backtrace = backtrace_from_remote ( backtrace ) if backtrace . is_a? ( Array )
61
62
cause . set_backtrace ( backtrace )
62
63
raise ex , cause : cause
63
64
rescue Error . for_error ( error )
64
65
ex
65
66
end
66
67
68
+ def backtrace_from_remote ( server_trace )
69
+ server_trace . filter_map do |frame |
70
+ next unless frame . is_a? ( Hash )
71
+
72
+ file = frame [ 'fileName' ]
73
+ line = frame [ 'lineNumber' ]
74
+ method = frame [ 'methodName' ]
75
+
76
+ class_name = frame [ 'className' ]
77
+ file = "#{ class_name } (#{ file } )" if class_name
78
+
79
+ method = 'unknown' if method . nil? || method . empty?
80
+
81
+ "[remote server] #{ file } :#{ line } :in `#{ method } '"
82
+ end
83
+ end
84
+
67
85
def process_error
68
86
return unless self [ 'value' ] . is_a? ( Hash )
69
87
Original file line number Diff line number Diff line change @@ -22,6 +22,8 @@ module Selenium
22
22
23
23
def add_cause : (Error::WebDriverError ex, String error, Array[String] backtrace) -> Error::WebDriverError
24
24
25
+ def backtrace_from_remote : -> Array[String]
26
+
25
27
def process_error : () -> Array[Hash[untyped , untyped ]]
26
28
end
27
29
end
Original file line number Diff line number Diff line change @@ -47,6 +47,18 @@ module WebDriver
47
47
rescue WebDriver ::Error ::NoSuchElementError => e
48
48
expect ( e . backtrace ) . not_to be_empty
49
49
end
50
+
51
+ it 'has backtrace when using a remote server' , only : { driver : :remote ,
52
+ reason : 'This test should only apply to remote drivers' } do
53
+ unless driver . is_a? ( WebDriver ::Remote ::Driver )
54
+ raise 'This error needs to be risen for the pending test not to fail on local drivers'
55
+ end
56
+
57
+ driver . send ( :bridge ) . instance_variable_set ( :@session_id , 'fake_session_id' )
58
+ driver . window_handle
59
+ rescue WebDriver ::Error ::InvalidSessionIdError => e
60
+ expect ( e . backtrace ) . not_to be_empty
61
+ end
50
62
end
51
63
end # WebDriver
52
64
end # Selenium
You can’t perform that action at this time.
0 commit comments