File tree Expand file tree Collapse file tree 3 files changed +32
-0
lines changed
lib/selenium/webdriver/remote
sig/lib/selenium/webdriver/remote
spec/integration/selenium/webdriver Expand file tree Collapse file tree 3 files changed +32
-0
lines changed Original file line number Diff line number Diff line change @@ -58,12 +58,30 @@ def assert_ok
5858
5959 def add_cause ( ex , error , backtrace )
6060 cause = Error ::WebDriverError . new
61+ backtrace = backtrace_from_remote ( backtrace ) if backtrace . is_a? ( Array )
6162 cause . set_backtrace ( backtrace )
6263 raise ex , cause : cause
6364 rescue Error . for_error ( error )
6465 ex
6566 end
6667
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+
6785 def process_error
6886 return unless self [ 'value' ] . is_a? ( Hash )
6987
Original file line number Diff line number Diff line change @@ -22,6 +22,8 @@ module Selenium
2222
2323 def add_cause : (Error::WebDriverError ex, String error, Array[String] backtrace) -> Error::WebDriverError
2424
25+ def backtrace_from_remote : -> Array[String]
26+
2527 def process_error : () -> Array[Hash[untyped , untyped ]]
2628 end
2729 end
Original file line number Diff line number Diff line change @@ -47,6 +47,18 @@ module WebDriver
4747 rescue WebDriver ::Error ::NoSuchElementError => e
4848 expect ( e . backtrace ) . not_to be_empty
4949 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
5062 end
5163 end # WebDriver
5264end # Selenium
You can’t perform that action at this time.
0 commit comments