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 log_entries = []/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 删除处理程序
您需要存储添加处理程序时返回的 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 log_entries = [] /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 异常处理程序
记录或对 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 log_entries = []/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 删除处理程序
您需要存储添加处理程序时返回的 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 log_entries = [] /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 最后修改 April 30, 2025: Update Bidi Logging Doc for zh-cn (#2290) (4e326433eb1)




