Skip to content

Commit 062c125

Browse files
committed
[rb] Improve stability of BiDi specs for Edge
1 parent a961ede commit 062c125

File tree

2 files changed

+52
-41
lines changed

2 files changed

+52
-41
lines changed

rb/spec/integration/selenium/webdriver/bidi/log_inspector_spec.rb

Lines changed: 49 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -27,83 +27,93 @@ class BiDi
2727

2828
it 'can listen to console log' do
2929
reset_driver!(web_socket_url: true) do |driver|
30-
log_entry = nil
30+
log_entries = []
3131
log_inspector = described_class.new(driver)
32-
log_inspector.on_console_entry { |log| log_entry = log }
32+
log_inspector.on_console_entry { |log| log_entries << log }
3333

3434
driver.navigate.to url_for(page)
3535
driver.find_element(id: 'consoleLog').click
36-
wait.until { !log_entry.nil? }
36+
log_entry = wait.until { log_entries.find { _1.text == 'Hello, world!' } }
3737

3838
expect(log_entry).to have_attributes(
3939
text: 'Hello, world!',
4040
realm: nil,
4141
type: 'console',
4242
level: LogInspector::LOG_LEVEL[:INFO],
43-
method: 'log'
43+
method: 'log',
44+
args: [{
45+
'type' => 'string',
46+
'value' => 'Hello, world!'
47+
}]
4448
)
45-
expect(log_entry.args.size).to eq(1)
4649
end
4750
end
4851

4952
it 'can listen to console log with different consumers' do
5053
reset_driver!(web_socket_url: true) do |driver|
51-
log_entry = nil
54+
log_entries1 = []
55+
log_entries2 = []
5256
log_inspector = described_class.new(driver)
53-
log_inspector.on_console_entry { |log| log_entry = log }
54-
55-
log_entry_text = nil
56-
log_inspector.on_console_entry { |log| log_entry_text = log.text }
57+
log_inspector.on_console_entry { |log| log_entries1 << log }
58+
log_inspector.on_console_entry { |log| log_entries2 << log }
5759

5860
driver.navigate.to url_for(page)
5961
driver.find_element(id: 'consoleLog').click
60-
wait.until { !log_entry.nil? }
61-
62-
expect(log_entry).to have_attributes(
63-
text: 'Hello, world!',
64-
realm: nil,
65-
type: 'console',
66-
level: LogInspector::LOG_LEVEL[:INFO],
67-
method: 'log'
62+
log_entry1 = wait.until { log_entries1.find { _1.text == 'Hello, world!' } }
63+
log_entry2 = wait.until { log_entries2.find { _1.text == 'Hello, world!' } }
64+
65+
expect([log_entry1, log_entry2]).to all(
66+
have_attributes(
67+
text: 'Hello, world!',
68+
realm: nil,
69+
type: 'console',
70+
level: LogInspector::LOG_LEVEL[:INFO],
71+
method: 'log',
72+
args: [{
73+
'type' => 'string',
74+
'value' => 'Hello, world!'
75+
}]
76+
)
6877
)
69-
expect(log_entry.args.size).to eq(1)
70-
expect(log_entry_text).to eq('Hello, world!')
7178
end
7279
end
7380

7481
it 'can filter console info level log' do
7582
reset_driver!(web_socket_url: true) do |driver|
76-
log_entry = nil
83+
log_entries = []
7784
log_inspector = described_class.new(driver)
78-
log_inspector.on_console_entry(FilterBy.log_level('info')) { |log| log_entry = log }
85+
log_inspector.on_console_entry(FilterBy.log_level('info')) { |log| log_entries << log }
7986

8087
driver.navigate.to url_for(page)
8188
driver.find_element(id: 'consoleLog').click
82-
wait.until { !log_entry.nil? }
89+
log_entry = wait.until { log_entries.find { _1.text == 'Hello, world!' } }
8390

8491
expect(log_entry).to have_attributes(
8592
text: 'Hello, world!',
8693
realm: nil,
8794
type: 'console',
8895
level: LogInspector::LOG_LEVEL[:INFO],
89-
method: 'log'
96+
method: 'log',
97+
args: [{
98+
'type' => 'string',
99+
'value' => 'Hello, world!'
100+
}]
90101
)
91-
expect(log_entry.args.size).to eq(1)
92102
end
93103
end
94104

95105
it 'can filter console log' do
96106
reset_driver!(web_socket_url: true) do |driver|
97-
log_entry = nil
107+
log_entries = []
98108
log_inspector = described_class.new(driver)
99-
log_inspector.on_console_entry(FilterBy.log_level('error')) { |log| log_entry = log }
109+
log_inspector.on_console_entry(FilterBy.log_level('error')) { |log| log_entries << log }
100110

101111
driver.navigate.to url_for(page)
102112
# Generating info level log but we are filtering by error level
103113
wait.until { driver.find_element(id: 'consoleLog').displayed? }
104114
driver.find_element(id: 'consoleLog').click
105115

106-
expect(log_entry).to be_nil
116+
expect(log_entries).to be_empty
107117
end
108118
end
109119

@@ -178,29 +188,31 @@ class BiDi
178188

179189
it 'can listen to any log' do
180190
reset_driver!(web_socket_url: true) do |driver|
181-
log_entry = nil
191+
log_entries = []
182192
log_inspector = described_class.new(driver)
183-
log_inspector.on_log { |log| log_entry = log }
193+
log_inspector.on_log { |log| log_entries << log }
184194

185195
driver.navigate.to url_for(page)
186196
driver.find_element(id: 'consoleError').click
187-
wait.until { !log_entry.nil? }
197+
log_entry = wait.until { log_entries.find { _1['text'] == 'I am console error' } }
188198

189-
expect(log_entry['text']).to eq('I am console error')
190-
expect(log_entry['type']).to eq('console')
191-
expect(log_entry['method']).to eq(LogInspector::LOG_LEVEL[:ERROR])
199+
expect(log_entry).to include(
200+
'text' => 'I am console error',
201+
'type' => 'console',
202+
'level' => LogInspector::LOG_LEVEL[:ERROR]
203+
)
192204
end
193205
end
194206

195207
it 'can filter any log' do
196208
reset_driver!(web_socket_url: true) do |driver|
197-
log_entry = nil
209+
log_entries = []
198210
log_inspector = described_class.new(driver)
199-
log_inspector.on_log(FilterBy.log_level('info')) { |log| log_entry = log }
211+
log_inspector.on_log(FilterBy.log_level('info')) { |log| log_entries << log }
200212

201213
driver.navigate.to url_for(page)
202214
driver.find_element(id: 'consoleLog').click
203-
wait.until { !log_entry.nil? }
215+
log_entry = wait.until { log_entries.find { _1['text'] == 'Hello, world!' } }
204216

205217
expect(log_entry['text']).to eq('Hello, world!')
206218
expect(log_entry['realm']).to be_nil

rb/spec/integration/selenium/webdriver/bidi_spec.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ module WebDriver
3737
end
3838

3939
it 'can navigate and listen to errors' do
40-
log_entry = nil
40+
log_entries = []
4141
log_inspector = BiDi::LogInspector.new(driver)
42-
log_inspector.on_javascript_exception { |log| log_entry = log }
42+
log_inspector.on_javascript_exception { |log| log_entries << log }
4343

4444
browsing_context = BiDi::BrowsingContext.new(driver: driver, browsing_context_id: driver.window_handle)
4545
info = browsing_context.navigate(url: url_for('/bidi/logEntryAdded.html'))
@@ -51,8 +51,7 @@ module WebDriver
5151
js_exception = wait.until { driver.find_element(id: 'jsException') }
5252
js_exception.click
5353

54-
wait.until { !log_entry.nil? }
55-
54+
log_entry = wait.until { log_entries.find { _1.text == 'Error: Not working' } }
5655
expect(log_entry).to have_attributes(
5756
text: 'Error: Not working',
5857
type: 'javascript',

0 commit comments

Comments
 (0)