2222module Selenium
2323 module WebDriver
2424 class BiDi
25- describe LogInspector , exclusive : { browser : %i[ chrome firefox ] } do
26- before do
27- @page = '/bidi/logEntryAdded.html'
25+ describe LogInspector , only : { browser : %i[ chrome edge firefox ] } do
26+ let ( :page ) { '/bidi/logEntryAdded.html' }
27+
28+ it 'can listen to console log' do
29+ reset_driver! ( web_socket_url : true ) do |driver |
30+ log_entry = nil
31+ log_inspector = described_class . new ( driver )
32+ log_inspector . on_console_entry { |log | log_entry = log }
33+
34+ driver . navigate . to url_for ( page )
35+ driver . find_element ( id : 'consoleLog' ) . click
36+ wait . until { !log_entry . nil? }
37+
38+ expect ( log_entry ) . to have_attributes (
39+ text : 'Hello, world!' ,
40+ realm : nil ,
41+ type : 'console' ,
42+ level : LogInspector ::LOG_LEVEL [ :INFO ] ,
43+ method : 'log'
44+ )
45+ expect ( log_entry . args . size ) . to eq ( 1 )
46+ end
2847 end
2948
30- it 'can listen to console log' , except : { browser : :chrome } do
49+ it 'can listen to console log with different consumers' do
3150 reset_driver! ( web_socket_url : true ) do |driver |
3251 log_entry = nil
3352 log_inspector = described_class . new ( driver )
3453 log_inspector . on_console_entry { |log | log_entry = log }
3554
36- driver . navigate . to url_for ( @page )
55+ log_entry_text = nil
56+ log_inspector . on_console_entry { |log | log_entry_text = log . text }
57+
58+ driver . navigate . to url_for ( page )
3759 driver . find_element ( id : 'consoleLog' ) . click
3860 wait . until { !log_entry . nil? }
3961
@@ -42,10 +64,46 @@ class BiDi
4264 realm : nil ,
4365 type : 'console' ,
4466 level : LogInspector ::LOG_LEVEL [ :INFO ] ,
45- method : 'log' ,
46- stack_trace : nil
67+ method : 'log'
4768 )
4869 expect ( log_entry . args . size ) . to eq ( 1 )
70+ expect ( log_entry_text ) . to eq ( 'Hello, world!' )
71+ end
72+ end
73+
74+ it 'can filter console info level log' do
75+ reset_driver! ( web_socket_url : true ) do |driver |
76+ log_entry = nil
77+ log_inspector = described_class . new ( driver )
78+ log_inspector . on_console_entry ( FilterBy . log_level ( 'info' ) ) { |log | log_entry = log }
79+
80+ driver . navigate . to url_for ( page )
81+ driver . find_element ( id : 'consoleLog' ) . click
82+ wait . until { !log_entry . nil? }
83+
84+ expect ( log_entry ) . to have_attributes (
85+ text : 'Hello, world!' ,
86+ realm : nil ,
87+ type : 'console' ,
88+ level : LogInspector ::LOG_LEVEL [ :INFO ] ,
89+ method : 'log'
90+ )
91+ expect ( log_entry . args . size ) . to eq ( 1 )
92+ end
93+ end
94+
95+ it 'can filter console log' do
96+ reset_driver! ( web_socket_url : true ) do |driver |
97+ log_entry = nil
98+ log_inspector = described_class . new ( driver )
99+ log_inspector . on_console_entry ( FilterBy . log_level ( 'error' ) ) { |log | log_entry = log }
100+
101+ driver . navigate . to url_for ( page )
102+ # Generating info level log but we are filtering by error level
103+ wait . until { driver . find_element ( id : 'consoleLog' ) . displayed? }
104+ driver . find_element ( id : 'consoleLog' ) . click
105+
106+ expect ( log_entry ) . to be_nil
49107 end
50108 end
51109
@@ -55,7 +113,7 @@ class BiDi
55113 log_inspector = described_class . new ( driver )
56114 log_inspector . on_javascript_log { |log | log_entry = log }
57115
58- driver . navigate . to url_for ( @ page)
116+ driver . navigate . to url_for ( page )
59117 driver . find_element ( id : 'jsException' ) . click
60118 wait . until { !log_entry . nil? }
61119
@@ -67,13 +125,46 @@ class BiDi
67125 end
68126 end
69127
128+ it 'can filter javascript log at error level' do
129+ reset_driver! ( web_socket_url : true ) do |driver |
130+ log_entry = nil
131+ log_inspector = described_class . new ( driver )
132+ log_inspector . on_javascript_log ( FilterBy . log_level ( 'error' ) ) { |log | log_entry = log }
133+
134+ driver . navigate . to url_for ( page )
135+ driver . find_element ( id : 'jsException' ) . click
136+ wait . until { !log_entry . nil? }
137+
138+ expect ( log_entry ) . to have_attributes (
139+ text : 'Error: Not working' ,
140+ type : 'javascript' ,
141+ level : LogInspector ::LOG_LEVEL [ :ERROR ]
142+ )
143+ end
144+ end
145+
146+ it 'can filter javascript log' do
147+ reset_driver! ( web_socket_url : true ) do |driver |
148+ log_entry = nil
149+ log_inspector = described_class . new ( driver )
150+ log_inspector . on_javascript_log ( FilterBy . log_level ( 'info' ) ) { |log | log_entry = log }
151+
152+ driver . navigate . to url_for ( page )
153+ # Generating js error level log but we are filtering by info level
154+ wait . until { driver . find_element ( id : 'jsException' ) . displayed? }
155+ driver . find_element ( id : 'jsException' ) . click
156+
157+ expect ( log_entry ) . to be_nil
158+ end
159+ end
160+
70161 it 'can listen to javascript error log' do
71162 reset_driver! ( web_socket_url : true ) do |driver |
72163 log_entry = nil
73164 log_inspector = described_class . new ( driver )
74165 log_inspector . on_javascript_exception { |log | log_entry = log }
75166
76- driver . navigate . to url_for ( @ page)
167+ driver . navigate . to url_for ( page )
77168 driver . find_element ( id : 'jsException' ) . click
78169 wait . until { !log_entry . nil? }
79170
@@ -91,7 +182,7 @@ class BiDi
91182 log_inspector = described_class . new ( driver )
92183 log_inspector . on_log { |log | log_entry = log }
93184
94- driver . navigate . to url_for ( @ page)
185+ driver . navigate . to url_for ( page )
95186 driver . find_element ( id : 'consoleError' ) . click
96187 wait . until { !log_entry . nil? }
97188
@@ -101,20 +192,54 @@ class BiDi
101192 end
102193 end
103194
104- it 'can retrieve stack trace for a log' , except : { browser : :chrome } do
195+ it 'can filter any log' do
196+ reset_driver! ( web_socket_url : true ) do |driver |
197+ log_entry = nil
198+ log_inspector = described_class . new ( driver )
199+ log_inspector . on_log ( FilterBy . log_level ( 'info' ) ) { |log | log_entry = log }
200+
201+ driver . navigate . to url_for ( page )
202+ driver . find_element ( id : 'consoleLog' ) . click
203+ wait . until { !log_entry . nil? }
204+
205+ expect ( log_entry [ 'text' ] ) . to eq ( 'Hello, world!' )
206+ expect ( log_entry [ 'realm' ] ) . to be_nil
207+ expect ( log_entry [ 'type' ] ) . to eq ( 'console' )
208+ expect ( log_entry [ 'level' ] ) . to eq ( 'info' )
209+ expect ( log_entry [ 'method' ] ) . to eq ( 'log' )
210+ expect ( log_entry [ 'args' ] . size ) . to eq ( 1 )
211+ end
212+ end
213+
214+ it 'can filter any log at error level' do
215+ reset_driver! ( web_socket_url : true ) do |driver |
216+ log_entry = nil
217+ log_inspector = described_class . new ( driver )
218+ log_inspector . on_log ( FilterBy . log_level ( 'error' ) ) { |log | log_entry = log }
219+
220+ driver . navigate . to url_for ( page )
221+ driver . find_element ( id : 'jsException' ) . click
222+ wait . until { !log_entry . nil? }
223+
224+ expect ( log_entry [ 'text' ] ) . to eq ( 'Error: Not working' )
225+ expect ( log_entry [ 'type' ] ) . to eq ( 'javascript' )
226+ expect ( log_entry [ 'level' ] ) . to eq ( 'error' )
227+ end
228+ end
229+
230+ it 'can retrieve stack trace for a log' do
105231 reset_driver! ( web_socket_url : true ) do |driver |
106232 log_entry = nil
107233 log_inspector = described_class . new ( driver )
108234 log_inspector . on_javascript_log { |log | log_entry = log }
109235
110- driver . navigate . to url_for ( @ page)
236+ driver . navigate . to url_for ( page )
111237 driver . find_element ( id : 'jsException' ) . click
112238 wait . until { !log_entry . nil? }
113239
114240 stack_trace = log_entry . stack_trace
115241
116242 expect ( stack_trace ) . not_to be_nil
117- expect ( stack_trace [ 'callFrames' ] . size ) . to eq ( 3 )
118243 end
119244 end
120245 end
0 commit comments