Skip to content

Commit ce57fae

Browse files
committed
[ruby] BiDi code examples
1 parent 7f0fa4b commit ce57fae

File tree

3 files changed

+255
-0
lines changed

3 files changed

+255
-0
lines changed

examples/ruby/spec/bidi/bidi_spec.rb

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# frozen_string_literal: true
2+
3+
require 'selenium-webdriver'
4+
5+
RSpec.describe 'Log Inspector' do
6+
let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
7+
let(:driver) do
8+
options = Selenium::WebDriver::Options.firefox
9+
options.add_option(:web_socket_url, true)
10+
Selenium::WebDriver.for :firefox, options: options
11+
end
12+
13+
after do
14+
driver.quit
15+
end
16+
17+
it 'test navigate and listen to errors' do
18+
log_entry = nil
19+
log_inspector = Selenium::WebDriver::BiDi::LogInspector.new(driver)
20+
log_inspector.on_javascript_exception { |log| log_entry = log }
21+
22+
id = driver.window_handle
23+
browsing_context = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver, browsing_context_id: id)
24+
25+
info = browsing_context.navigate url: 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
26+
27+
expect(browsing_context.id).not_to be_nil
28+
expect(info.navigation_id).to be_nil
29+
expect(info.url).to include('/bidi/logEntryAdded.html')
30+
31+
wait.until { driver.find_element(id: 'jsException').displayed? }
32+
driver.find_element(id: 'jsException').click
33+
wait.until { !log_entry.nil? }
34+
35+
expect(log_entry).to have_attributes(
36+
text: 'Error: Not working',
37+
type: 'javascript',
38+
level: Selenium::WebDriver::BiDi::LogInspector::LOG_LEVEL[:ERROR]
39+
)
40+
end
41+
end
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
# frozen_string_literal: true
2+
3+
require 'selenium-webdriver'
4+
5+
RSpec.describe 'Browsing Context' do
6+
let(:driver) do
7+
options = Selenium::WebDriver::Options.firefox
8+
options.add_option(:web_socket_url, true)
9+
Selenium::WebDriver.for :firefox, options: options
10+
end
11+
12+
after do
13+
driver.quit
14+
end
15+
16+
it 'test create a browsing context for given id' do
17+
id = driver.window_handle
18+
browsing_context = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver, browsing_context_id: id)
19+
expect(browsing_context.id).to eq(id)
20+
end
21+
22+
it 'test create a window' do
23+
browsing_context = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver, type: :window)
24+
expect(browsing_context.id).not_to be_nil
25+
end
26+
27+
it 'test create a window with a reference context' do
28+
browsing_context = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver, type: :window,
29+
reference_context: driver.window_handle)
30+
expect(browsing_context.id).not_to be_nil
31+
end
32+
33+
it 'test create a tab' do
34+
browsing_context = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver, type: :tab)
35+
expect(browsing_context.id).not_to be_nil
36+
end
37+
38+
it 'test create a tab with a reference context' do
39+
browsing_context = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver, type: :tab,
40+
reference_context: driver.window_handle)
41+
expect(browsing_context.id).not_to be_nil
42+
end
43+
44+
it 'test navigate to a url' do
45+
browsing_context = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver, type: :tab)
46+
47+
info = browsing_context.navigate url: 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
48+
49+
expect(browsing_context.id).not_to be_nil
50+
expect(info.navigation_id).to be_nil
51+
expect(info.url).to include('/bidi/logEntryAdded.html')
52+
end
53+
54+
it 'test navigate to a url with readiness state' do
55+
browsing_context = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver, type: :tab)
56+
57+
info = browsing_context.navigate url: 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html',
58+
readiness_state: :complete
59+
60+
expect(browsing_context.id).not_to be_nil
61+
expect(info.navigation_id).to be_nil
62+
expect(info.url).to include('/bidi/logEntryAdded.html')
63+
end
64+
65+
it 'test get tree with a child' do
66+
browsing_context_id = driver.window_handle
67+
parent_window = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver,
68+
browsing_context_id: browsing_context_id)
69+
parent_window.navigate(url: 'https://www.selenium.dev/selenium/web/iframes.html',
70+
readiness_state: :complete)
71+
72+
context_info = parent_window.get_tree
73+
expect(context_info.children.size).to eq(1)
74+
expect(context_info.id).to eq(browsing_context_id)
75+
expect(context_info.children[0]['url']).to include('formPage.html')
76+
end
77+
78+
it 'test get tree with depth' do
79+
browsing_context_id = driver.window_handle
80+
parent_window = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver,
81+
browsing_context_id: browsing_context_id)
82+
parent_window.navigate(url: 'https://www.selenium.dev/selenium/web/iframes.html',
83+
readiness_state: :complete)
84+
85+
context_info = parent_window.get_tree(max_depth: 0)
86+
expect(context_info.children).to be_nil
87+
expect(context_info.id).to eq(browsing_context_id)
88+
end
89+
90+
it 'test close a window' do
91+
window1 = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver, type: :window)
92+
window2 = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver, type: :window)
93+
94+
window2.close
95+
96+
expect { window1.get_tree }.not_to raise_error
97+
expect { window2.get_tree }.to raise_error(Selenium::WebDriver::Error::WebDriverError)
98+
end
99+
100+
it 'test close a tab' do
101+
tab1 = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver, type: :tab)
102+
tab2 = Selenium::WebDriver::BiDi::BrowsingContext.new(driver: driver, type: :tab)
103+
104+
tab2.close
105+
106+
expect { tab1.get_tree }.not_to raise_error
107+
expect { tab2.get_tree }.to raise_error(Selenium::WebDriver::Error::WebDriverError)
108+
end
109+
end
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# frozen_string_literal: true
2+
3+
require 'selenium-webdriver'
4+
5+
RSpec.describe 'Log Inspector' do
6+
let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
7+
let(:driver) do
8+
options = Selenium::WebDriver::Options.firefox
9+
options.add_option(:web_socket_url, true)
10+
Selenium::WebDriver.for :firefox, options: options
11+
end
12+
13+
after do
14+
driver.quit
15+
end
16+
17+
it 'test listen to console log' do
18+
log_entry = nil
19+
log_inspector = Selenium::WebDriver::BiDi::LogInspector.new(driver)
20+
log_inspector.on_console_entry { |log| log_entry = log }
21+
22+
driver.get 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
23+
driver.find_element(id: 'consoleLog').click
24+
wait.until { !log_entry.nil? }
25+
26+
expect(log_entry).to have_attributes(
27+
text: 'Hello, world!',
28+
realm: nil,
29+
type: 'console',
30+
level: Selenium::WebDriver::BiDi::LogInspector::LOG_LEVEL[:INFO],
31+
method: 'log',
32+
stack_trace: nil
33+
)
34+
expect(log_entry.args.size).to eq(1)
35+
end
36+
37+
it 'test listen to javascript log' do
38+
log_entry = nil
39+
log_inspector = Selenium::WebDriver::BiDi::LogInspector.new(driver)
40+
log_inspector.on_javascript_log { |log| log_entry = log }
41+
42+
driver.get 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
43+
driver.find_element(id: 'jsException').click
44+
wait.until { !log_entry.nil? }
45+
46+
expect(log_entry).to have_attributes(
47+
text: 'Error: Not working',
48+
type: 'javascript',
49+
level: Selenium::WebDriver::BiDi::LogInspector::LOG_LEVEL[:ERROR]
50+
)
51+
end
52+
53+
it 'test listen to javascript error log' do
54+
log_entry = nil
55+
log_inspector = Selenium::WebDriver::BiDi::LogInspector.new(driver)
56+
log_inspector.on_javascript_exception { |log| log_entry = log }
57+
58+
driver.get 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
59+
driver.find_element(id: 'jsException').click
60+
wait.until { !log_entry.nil? }
61+
62+
expect(log_entry).to have_attributes(
63+
text: 'Error: Not working',
64+
type: 'javascript'
65+
)
66+
end
67+
68+
it 'test retrieve stack trace for a log' do
69+
log_entry = nil
70+
log_inspector = Selenium::WebDriver::BiDi::LogInspector.new(driver)
71+
log_inspector.on_javascript_exception { |log| log_entry = log }
72+
73+
driver.get 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
74+
driver.find_element(id: 'jsException').click
75+
wait.until { !log_entry.nil? }
76+
77+
stack_trace = log_entry.stack_trace
78+
79+
expect(stack_trace).not_to be_nil
80+
expect(stack_trace['callFrames'].size).to eq(3)
81+
end
82+
83+
it 'test listen to logs with multiple consumers' do
84+
log_entry1 = nil
85+
log_entry2 = nil
86+
log_inspector = Selenium::WebDriver::BiDi::LogInspector.new(driver)
87+
log_inspector.on_javascript_exception { |log| log_entry1 = log }
88+
log_inspector.on_javascript_exception { |log| log_entry2 = log }
89+
90+
driver.get 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
91+
driver.find_element(id: 'jsException').click
92+
wait.until { !log_entry1.nil? }
93+
wait.until { !log_entry2.nil? }
94+
95+
expect(log_entry1).to have_attributes(
96+
text: 'Error: Not working',
97+
type: 'javascript'
98+
)
99+
100+
expect(log_entry2).to have_attributes(
101+
text: 'Error: Not working',
102+
type: 'javascript'
103+
)
104+
end
105+
end

0 commit comments

Comments
 (0)