Browser console log capture in Selenium Python - Build an Automation Script
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.chrome.options import Options import unittest class TestBrowserConsoleLogs(unittest.TestCase): def setUp(self): chrome_options = Options() chrome_options.set_capability('goog:loggingPrefs', {'browser': 'ALL'}) self.driver = webdriver.Chrome(options=chrome_options) self.wait = WebDriverWait(self.driver, 10) def test_capture_console_logs(self): self.driver.get('https://example.com') # Wait for the page title to be present as indication of load self.wait.until(EC.title_contains('Example Domain')) logs = self.driver.get_log('browser') self.assertTrue(len(logs) > 0, 'Console logs should not be empty') severe_errors = [entry for entry in logs if entry['level'] == 'SEVERE'] self.assertEqual(len(severe_errors), 0, f'Found SEVERE errors in console logs: {severe_errors}') def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
The setUp method configures Chrome to capture browser console logs by setting the goog:loggingPrefs capability.
The test navigates to https://example.com and waits explicitly for the page title to confirm the page loaded.
It then retrieves the browser console logs using get_log('browser').
Assertions check that logs are not empty and that no log entry has the level SEVERE, which indicates errors.
The tearDown method closes the browser to clean up.
This structure follows unittest framework conventions and uses explicit waits for reliability.
Now add data-driven testing to capture console logs for these URLs: 'https://example.com', 'https://www.wikipedia.org', 'https://www.python.org'
Practice
Solution
Step 1: Understand browser console logs
Browser console logs contain errors, warnings, and info messages from the browser during page load and interaction.Step 2: Purpose of capturing logs in tests
Capturing these logs helps testers find hidden errors or warnings that are not visible on the page but affect test results.Final Answer:
To find hidden errors and warnings during test execution -> Option AQuick Check:
Browser logs = find hidden errors [OK]
- Thinking logs speed up browser loading
- Confusing logs with UI changes
- Assuming logs affect timeout settings
Solution
Step 1: Recall Selenium Python API for logs
The correct method to get browser console logs isdriver.get_log('browser').Step 2: Check each option syntax
Only logs = driver.get_log('browser') uses the exact correct method name and parameter. Others use incorrect method names or parameters.Final Answer:
logs = driver.get_log('browser') -> Option CQuick Check:
Correct method = get_log('browser') [OK]
- Using incorrect method names like getLogs or fetch_log
- Passing wrong parameter like 'console' instead of 'browser'
- Confusing log capture with other driver methods
logs = driver.get_log('browser')
for entry in logs:
print(entry['level'])Solution
Step 1: Understand the code behavior
The code fetches all browser logs and prints the 'level' field of each log entry in order.Step 2: Analyze given log messages
Since the console has one error and one info message, the output will list their levels in the order they appear: "ERROR" then "INFO".Final Answer:
["ERROR", "INFO"] -> Option DQuick Check:
Print log levels = ["ERROR", "INFO"] [OK]
- Assuming logs are sorted differently
- Confusing log levels with messages
- Expecting empty list if logs exist
logs = driver.get_log('console')
for log in logs:
print(log['message'])Solution
Step 1: Check the parameter for get_log()
The correct parameter to get browser console logs is 'browser', not 'console'.Step 2: Verify other code parts
Print statement syntax is correct, and variable name 'log' is valid. So no other errors.Final Answer:
Incorrect log type parameter; should be 'browser' instead of 'console' -> Option BQuick Check:
get_log parameter = 'browser' [OK]
- Using 'console' instead of 'browser' parameter
- Thinking print syntax is wrong in Python 3
- Worrying about variable names unnecessarily
Solution
Step 1: Understand filtering logs in Python
Python list comprehension is used to filter logs by checking if entry['level'] equals 'ERROR'.Step 2: Analyze each option's correctness
logs = [entry for entry in driver.get_log('browser') if entry['level'] == 'ERROR'] uses valid Python syntax. Options A, B, and C use invalid or non-Python methods like filter(), select(), or where() which do not exist on lists.Final Answer:
logs = [entry for entry in driver.get_log('browser') if entry['level'] == 'ERROR'] -> Option AQuick Check:
Filter logs with list comprehension [OK]
- Using non-Python methods like filter or select on lists
- Using single equals '=' instead of '==' in conditions
- Trying to chain unsupported methods on get_log() result
Ready to prove it?
Pass the test and this pattern moves unknown
