These features are related to logging. Because “logging” can refer to so many different things, these methods are made available via a “script” namespace.
Remember that to use WebDriver BiDi, you must enable it in Options. For more details, see Enabling BiDi
Console Message HandlersRecord or take actions on console.log
events.
driver.script.add_console_message_handler(log_entries.append)
/examples/python/tests/bidi/test_bidi_logging.py
import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
@pytest.mark.driver_type("bidi")
def test_add_console_log_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
driver.script.add_console_message_handler(log_entries.append)
driver.find_element(By.ID, "consoleLog").click()
WebDriverWait(driver, 5).until(lambda _: log_entries)
assert log_entries[0].text == "Hello, world!"
@pytest.mark.driver_type("bidi")
def test_remove_console_log_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
id = driver.script.add_console_message_handler(log_entries.append)
driver.script.remove_console_message_handler(id)
driver.find_element(By.ID, "consoleLog").click()
assert len(log_entries) == 0
@pytest.mark.driver_type("bidi")
def test_add_js_exception_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
driver.script.add_javascript_error_handler(log_entries.append)
driver.find_element(By.ID, "jsException").click()
WebDriverWait(driver, 5).until(lambda _: log_entries)
assert log_entries[0].text == "Error: Not working"
@pytest.mark.driver_type("bidi")
def test_remove_js_exception_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
id = driver.script.add_javascript_error_handler(log_entries.append)
driver.script.remove_javascript_error_handler(id)
driver.find_element(By.ID, "consoleLog").click()
assert len(log_entries) == 0
/examples/ruby/spec/bidi/logging_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Logging' do
let(:driver) { start_bidi_session }
let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
it 'adds console message handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
driver.script.add_console_message_handler { |log| log_entries << log }
driver.find_element(id: 'consoleLog').click
wait.until { log_entries.any? }
expect(log_entries.first&.text).to eq 'Hello, world!'
end
it 'removes console message handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
id = driver.script.add_console_message_handler { |log| log_entries << log }
driver.script.remove_console_message_handler(id)
driver.find_element(id: 'consoleLog').click
expect(log_entries).to be_empty
end
it 'adds JavaScript error handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
driver.script.add_javascript_error_handler { |error| log_entries << error }
driver.find_element(id: 'jsException').click
wait.until { log_entries.any? }
expect(log_entries.first&.text).to eq 'Error: Not working'
end
it 'removes JavaScript error handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
id = driver.script.add_javascript_error_handler { |error| log_entries << error }
driver.script.remove_javascript_error_handler(id)
driver.find_element(id: 'jsException').click
expect(log_entries).to be_empty
end
end
Remove Handler
You need to store the ID returned when adding the handler to delete it.
id = driver.script.add_console_message_handler(log_entries.append)
driver.script.remove_console_message_handler(id)
/examples/python/tests/bidi/test_bidi_logging.py
import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
@pytest.mark.driver_type("bidi")
def test_add_console_log_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
driver.script.add_console_message_handler(log_entries.append)
driver.find_element(By.ID, "consoleLog").click()
WebDriverWait(driver, 5).until(lambda _: log_entries)
assert log_entries[0].text == "Hello, world!"
@pytest.mark.driver_type("bidi")
def test_remove_console_log_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
id = driver.script.add_console_message_handler(log_entries.append)
driver.script.remove_console_message_handler(id)
driver.find_element(By.ID, "consoleLog").click()
assert len(log_entries) == 0
@pytest.mark.driver_type("bidi")
def test_add_js_exception_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
driver.script.add_javascript_error_handler(log_entries.append)
driver.find_element(By.ID, "jsException").click()
WebDriverWait(driver, 5).until(lambda _: log_entries)
assert log_entries[0].text == "Error: Not working"
@pytest.mark.driver_type("bidi")
def test_remove_js_exception_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
id = driver.script.add_javascript_error_handler(log_entries.append)
driver.script.remove_javascript_error_handler(id)
driver.find_element(By.ID, "consoleLog").click()
assert len(log_entries) == 0
/examples/ruby/spec/bidi/logging_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Logging' do
let(:driver) { start_bidi_session }
let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
it 'adds console message handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
driver.script.add_console_message_handler { |log| log_entries << log }
driver.find_element(id: 'consoleLog').click
wait.until { log_entries.any? }
expect(log_entries.first&.text).to eq 'Hello, world!'
end
it 'removes console message handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
id = driver.script.add_console_message_handler { |log| log_entries << log }
driver.script.remove_console_message_handler(id)
driver.find_element(id: 'consoleLog').click
expect(log_entries).to be_empty
end
it 'adds JavaScript error handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
driver.script.add_javascript_error_handler { |error| log_entries << error }
driver.find_element(id: 'jsException').click
wait.until { log_entries.any? }
expect(log_entries.first&.text).to eq 'Error: Not working'
end
it 'removes JavaScript error handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
id = driver.script.add_javascript_error_handler { |error| log_entries << error }
driver.script.remove_javascript_error_handler(id)
driver.find_element(id: 'jsException').click
expect(log_entries).to be_empty
end
end
JavaScript Exception Handlers
Record or take actions on JavaScript exception events.
Add Handler driver.script.add_javascript_error_handler(log_entries.append)
/examples/python/tests/bidi/test_bidi_logging.py
import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
@pytest.mark.driver_type("bidi")
def test_add_console_log_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
driver.script.add_console_message_handler(log_entries.append)
driver.find_element(By.ID, "consoleLog").click()
WebDriverWait(driver, 5).until(lambda _: log_entries)
assert log_entries[0].text == "Hello, world!"
@pytest.mark.driver_type("bidi")
def test_remove_console_log_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
id = driver.script.add_console_message_handler(log_entries.append)
driver.script.remove_console_message_handler(id)
driver.find_element(By.ID, "consoleLog").click()
assert len(log_entries) == 0
@pytest.mark.driver_type("bidi")
def test_add_js_exception_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
driver.script.add_javascript_error_handler(log_entries.append)
driver.find_element(By.ID, "jsException").click()
WebDriverWait(driver, 5).until(lambda _: log_entries)
assert log_entries[0].text == "Error: Not working"
@pytest.mark.driver_type("bidi")
def test_remove_js_exception_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
id = driver.script.add_javascript_error_handler(log_entries.append)
driver.script.remove_javascript_error_handler(id)
driver.find_element(By.ID, "consoleLog").click()
assert len(log_entries) == 0
/examples/ruby/spec/bidi/logging_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Logging' do
let(:driver) { start_bidi_session }
let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
it 'adds console message handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
driver.script.add_console_message_handler { |log| log_entries << log }
driver.find_element(id: 'consoleLog').click
wait.until { log_entries.any? }
expect(log_entries.first&.text).to eq 'Hello, world!'
end
it 'removes console message handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
id = driver.script.add_console_message_handler { |log| log_entries << log }
driver.script.remove_console_message_handler(id)
driver.find_element(id: 'consoleLog').click
expect(log_entries).to be_empty
end
it 'adds JavaScript error handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
driver.script.add_javascript_error_handler { |error| log_entries << error }
driver.find_element(id: 'jsException').click
wait.until { log_entries.any? }
expect(log_entries.first&.text).to eq 'Error: Not working'
end
it 'removes JavaScript error handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
id = driver.script.add_javascript_error_handler { |error| log_entries << error }
driver.script.remove_javascript_error_handler(id)
driver.find_element(id: 'jsException').click
expect(log_entries).to be_empty
end
end
Remove Handler
You need to store the ID returned when adding the handler to delete it.
id = driver.script.add_javascript_error_handler(log_entries.append)
driver.script.remove_javascript_error_handler(id)
/examples/python/tests/bidi/test_bidi_logging.py
import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
@pytest.mark.driver_type("bidi")
def test_add_console_log_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
driver.script.add_console_message_handler(log_entries.append)
driver.find_element(By.ID, "consoleLog").click()
WebDriverWait(driver, 5).until(lambda _: log_entries)
assert log_entries[0].text == "Hello, world!"
@pytest.mark.driver_type("bidi")
def test_remove_console_log_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
id = driver.script.add_console_message_handler(log_entries.append)
driver.script.remove_console_message_handler(id)
driver.find_element(By.ID, "consoleLog").click()
assert len(log_entries) == 0
@pytest.mark.driver_type("bidi")
def test_add_js_exception_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
driver.script.add_javascript_error_handler(log_entries.append)
driver.find_element(By.ID, "jsException").click()
WebDriverWait(driver, 5).until(lambda _: log_entries)
assert log_entries[0].text == "Error: Not working"
@pytest.mark.driver_type("bidi")
def test_remove_js_exception_handler(driver):
driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
log_entries = []
id = driver.script.add_javascript_error_handler(log_entries.append)
driver.script.remove_javascript_error_handler(id)
driver.find_element(By.ID, "consoleLog").click()
assert len(log_entries) == 0
/examples/ruby/spec/bidi/logging_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Logging' do
let(:driver) { start_bidi_session }
let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
it 'adds console message handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
driver.script.add_console_message_handler { |log| log_entries << log }
driver.find_element(id: 'consoleLog').click
wait.until { log_entries.any? }
expect(log_entries.first&.text).to eq 'Hello, world!'
end
it 'removes console message handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
id = driver.script.add_console_message_handler { |log| log_entries << log }
driver.script.remove_console_message_handler(id)
driver.find_element(id: 'consoleLog').click
expect(log_entries).to be_empty
end
it 'adds JavaScript error handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
driver.script.add_javascript_error_handler { |error| log_entries << error }
driver.find_element(id: 'jsException').click
wait.until { log_entries.any? }
expect(log_entries.first&.text).to eq 'Error: Not working'
end
it 'removes JavaScript error handler' do
driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
log_entries = []
id = driver.script.add_javascript_error_handler { |error| log_entries << error }
driver.script.remove_javascript_error_handler(id)
driver.find_element(id: 'jsException').click
expect(log_entries).to be_empty
end
end
Support the Selenium Project
Learn more or view the full list of sponsors.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4