22
22
module Selenium
23
23
module WebDriver
24
24
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
28
47
end
29
48
30
- it 'can listen to console log' , except : { browser : :chrome } do
49
+ it 'can listen to console log with different consumers' do
31
50
reset_driver! ( web_socket_url : true ) do |driver |
32
51
log_entry = nil
33
52
log_inspector = described_class . new ( driver )
34
53
log_inspector . on_console_entry { |log | log_entry = log }
35
54
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 )
37
59
driver . find_element ( id : 'consoleLog' ) . click
38
60
wait . until { !log_entry . nil? }
39
61
@@ -42,10 +64,46 @@ class BiDi
42
64
realm : nil ,
43
65
type : 'console' ,
44
66
level : LogInspector ::LOG_LEVEL [ :INFO ] ,
45
- method : 'log' ,
46
- stack_trace : nil
67
+ method : 'log'
47
68
)
48
69
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
49
107
end
50
108
end
51
109
@@ -55,7 +113,7 @@ class BiDi
55
113
log_inspector = described_class . new ( driver )
56
114
log_inspector . on_javascript_log { |log | log_entry = log }
57
115
58
- driver . navigate . to url_for ( @ page)
116
+ driver . navigate . to url_for ( page )
59
117
driver . find_element ( id : 'jsException' ) . click
60
118
wait . until { !log_entry . nil? }
61
119
@@ -67,13 +125,46 @@ class BiDi
67
125
end
68
126
end
69
127
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
+
70
161
it 'can listen to javascript error log' do
71
162
reset_driver! ( web_socket_url : true ) do |driver |
72
163
log_entry = nil
73
164
log_inspector = described_class . new ( driver )
74
165
log_inspector . on_javascript_exception { |log | log_entry = log }
75
166
76
- driver . navigate . to url_for ( @ page)
167
+ driver . navigate . to url_for ( page )
77
168
driver . find_element ( id : 'jsException' ) . click
78
169
wait . until { !log_entry . nil? }
79
170
@@ -91,7 +182,7 @@ class BiDi
91
182
log_inspector = described_class . new ( driver )
92
183
log_inspector . on_log { |log | log_entry = log }
93
184
94
- driver . navigate . to url_for ( @ page)
185
+ driver . navigate . to url_for ( page )
95
186
driver . find_element ( id : 'consoleError' ) . click
96
187
wait . until { !log_entry . nil? }
97
188
@@ -101,20 +192,54 @@ class BiDi
101
192
end
102
193
end
103
194
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
105
231
reset_driver! ( web_socket_url : true ) do |driver |
106
232
log_entry = nil
107
233
log_inspector = described_class . new ( driver )
108
234
log_inspector . on_javascript_log { |log | log_entry = log }
109
235
110
- driver . navigate . to url_for ( @ page)
236
+ driver . navigate . to url_for ( page )
111
237
driver . find_element ( id : 'jsException' ) . click
112
238
wait . until { !log_entry . nil? }
113
239
114
240
stack_trace = log_entry . stack_trace
115
241
116
242
expect ( stack_trace ) . not_to be_nil
117
- expect ( stack_trace [ 'callFrames' ] . size ) . to eq ( 3 )
118
243
end
119
244
end
120
245
end
0 commit comments