@@ -25,6 +25,20 @@ module WebDriver
2525 only : { browser : %i[ chrome edge firefox ] } do
2626 after { |example | reset_driver! ( example : example ) }
2727
28+ # Helper to match the expected pattern of `script.StackFrame` objects.
29+ # https://w3c.github.io/webdriver-bidi/#type-script-StackFrame
30+ #
31+ # Pass in any fields you want to check more specific values for, e.g:
32+ # a_stack_frame('functionName' => 'someFunction')
33+ def a_stack_frame ( **options )
34+ include ( {
35+ 'columnNumber' => an_instance_of ( Integer ) ,
36+ 'functionName' => an_instance_of ( String ) ,
37+ 'lineNumber' => an_instance_of ( Integer ) ,
38+ 'url' => an_instance_of ( String )
39+ } . merge ( options ) )
40+ end
41+
2842 it 'errors when bidi not enabled' do
2943 reset_driver! ( web_socket_url : false ) do |driver |
3044 msg = /BiDi must be enabled by setting #web_socket_url to true in options class/
@@ -45,10 +59,27 @@ module WebDriver
4559 expect ( log_entries . size ) . to eq ( 1 )
4660 log_entry = log_entries . first
4761 expect ( log_entry ) . to be_a BiDi ::LogHandler ::ConsoleLogEntry
62+ expect ( log_entry . type ) . to eq 'console'
4863 expect ( log_entry . level ) . to eq 'info'
4964 expect ( log_entry . method ) . to eq 'log'
5065 expect ( log_entry . text ) . to eq 'Hello, world!'
51- expect ( log_entry . type ) . to eq 'console'
66+ expect ( log_entry . args ) . to eq [
67+ { 'type' => 'string' , 'value' => 'Hello, world!' }
68+ ]
69+ expect ( log_entry . timestamp ) . to be_an_integer
70+ expect ( log_entry . source ) . to match (
71+ 'context' => an_instance_of ( String ) ,
72+ 'realm' => an_instance_of ( String )
73+ )
74+ # Stack traces on console messages are optional.
75+ expect ( log_entry . stack_trace ) . to be_nil . or match (
76+ # Some browsers include stack traces from parts of the runtime, so we
77+ # just check the first frames that come from user code.
78+ 'callFrames' => start_with (
79+ a_stack_frame ( 'functionName' => 'helloWorld' ) ,
80+ a_stack_frame ( 'functionName' => 'onclick' )
81+ )
82+ )
5283 end
5384
5485 it 'logs multiple console messages' do
@@ -97,10 +128,22 @@ module WebDriver
97128 expect ( log_entries . size ) . to eq ( 1 )
98129 log_entry = log_entries . first
99130 expect ( log_entry ) . to be_a BiDi ::LogHandler ::JavaScriptLogEntry
100- expect ( log_entry . level ) . to eq 'error'
101131 expect ( log_entry . type ) . to eq 'javascript'
132+ expect ( log_entry . level ) . to eq 'error'
102133 expect ( log_entry . text ) . to eq 'Error: Not working'
103- expect ( log_entry . stack_trace ) . not_to be_empty
134+ expect ( log_entry . timestamp ) . to be_an_integer
135+ expect ( log_entry . source ) . to match (
136+ 'context' => an_instance_of ( String ) ,
137+ 'realm' => an_instance_of ( String )
138+ )
139+ expect ( log_entry . stack_trace ) . to match (
140+ # Some browsers include stack traces from parts of the runtime, so we
141+ # just check the first frames that come from user code.
142+ 'callFrames' => start_with (
143+ a_stack_frame ( 'functionName' => 'createError' ) ,
144+ a_stack_frame ( 'functionName' => 'onclick' )
145+ )
146+ )
104147 end
105148
106149 it 'errors removing non-existent handler' do
0 commit comments