WebDriver BiDi 日志功能
这些功能与日志记录有关。 由于"logging"可以指代许多不同的事物, 因此这些方法通过"script"命名空间提供.
请记住, 要使用 WebDriver BiDi, 您必须在选项中启用它. 更多详情, 请参阅 启用 BiDi .
控制台消息处理程序
记录或对 console.log
事件采取行动.
添加处理程序
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
driver.script.add_console_message_handler { |log| log_entries << log }
/examples/ruby/spec/bidi/logging_spec.rb
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
删除处理程序
您需要存储添加处理程序时返回的 ID 以便将其删除.
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
id = driver.script.add_console_message_handler { |log| log_entries << log }
driver.script.remove_console_message_handler(id)
/examples/ruby/spec/bidi/logging_spec.rb
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 异常处理程序
记录或对 JavaScript 异常事件采取行动.
添加处理程序
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
driver.script.add_javascript_error_handler { |error| log_entries << error }
/examples/ruby/spec/bidi/logging_spec.rb
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
删除处理程序
您需要存储添加处理程序时返回的 ID 以便将其删除.
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
id = driver.script.add_javascript_error_handler { |error| log_entries << error }
driver.script.remove_javascript_error_handler(id)
/examples/ruby/spec/bidi/logging_spec.rb
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
最后修改 April 30, 2025: Update Bidi Logging Doc for zh-cn (#2290) (4e326433eb)