Browser options and capabilities in Selenium Python - Build an Automation Script
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options import unittest class TestChromeOptions(unittest.TestCase): def setUp(self): chrome_options = Options() chrome_options.add_argument('--window-size=1024,768') self.driver = webdriver.Chrome(options=chrome_options) def test_window_size_and_navigation(self): self.driver.get('https://www.example.com') width = self.driver.execute_script('return window.innerWidth') height = self.driver.execute_script('return window.innerHeight') self.assertEqual(width, 1024, 'Window width should be 1024') self.assertEqual(height, 768, 'Window height should be 768') self.assertIn('Example Domain', self.driver.title, 'Page title should contain Example Domain') def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
This test uses ChromeOptions to set the browser window size before launching Chrome. The --window-size=1024,768 argument sets the window size. After launching, the test navigates to https://www.example.com. It then uses JavaScript to get the actual window inner width and height and asserts they match the expected size. It also checks the page title to confirm navigation succeeded. The test uses Python's unittest framework for structure and assertions. The tearDown method ensures the browser closes after the test to keep the environment clean.
Now add data-driven testing to launch Chrome with three different window sizes: 800x600, 1280x720, and 1920x1080, verifying each size.
Practice
Options in Selenium WebDriver for browsers?Solution
Step 1: Understand what Options configure
Options allow you to set how the browser behaves during tests, such as running headless or setting window size.Step 2: Differentiate Options from other tasks
Options do not handle locating elements, assertions, or reports; those are separate tasks.Final Answer:
To customize browser settings like headless mode or window size -> Option AQuick Check:
Options = Browser customization [OK]
- Confusing Options with element locators
- Thinking Options generate reports
- Mixing Options with assertion logic
Solution
Step 1: Recall correct method to add arguments
In Selenium Python,add_argumentis used to add command line switches like '--headless'.Step 2: Check each option's syntax
Only options = webdriver.ChromeOptions() options.add_argument('--headless') usesadd_argument('--headless')correctly; others use invalid or non-existent methods.Final Answer:
options = webdriver.ChromeOptions() options.add_argument('--headless') -> Option AQuick Check:
Use add_argument('--headless') for headless mode [OK]
- Using non-existent set_headless method
- Assigning headless attribute directly
- Using add_option instead of add_argument
from selenium import webdriver
options = webdriver.FirefoxOptions()
options.set_preference('dom.webnotifications.enabled', False)
driver = webdriver.Firefox(options=options)
driver.get('https://example.com')Solution
Step 1: Understand set_preference usage
The methodset_preferencesets Firefox preferences; here it disables web notifications.Step 2: Analyze the effect on browser behavior
Passing these options to Firefox disables notifications on pages, so no pop-ups appear.Final Answer:
Firefox will launch with notifications disabled on the page -> Option CQuick Check:
set_preference disables notifications [OK]
- Assuming notifications still appear
- Confusing set_preference with add_argument
- Thinking code runs headless by default
from selenium import webdriver
options = webdriver.ChromeOptions()
options.set_preference('profile.default_content_setting_values.notifications', 2)
driver = webdriver.Chrome(options=options)Solution
Step 1: Check ChromeOptions methods
ChromeOptions does not have a method calledset_preference; this is Firefox-specific.Step 2: Correct way to disable notifications in Chrome
Chrome usesadd_experimental_optionwith 'prefs' dictionary to disable notifications.Final Answer:
set_preference is not a method of ChromeOptions -> Option BQuick Check:
Use add_experimental_option for Chrome prefs [OK]
- Using Firefox methods on ChromeOptions
- Passing wrong values for notification settings
- Confusing options with capabilities
Solution
Step 1: Set headless mode correctly
Useadd_argument('--headless')to enable headless mode in ChromeOptions.Step 2: Disable notifications properly
Useadd_experimental_option('prefs', {'profile.default_content_setting_values.notifications': 2})to disable notifications.Step 3: Accept insecure certificates
Set capabilityacceptInsecureCertsto True usingset_capability.Final Answer:
options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_experimental_option('prefs', {'profile.default_content_setting_values.notifications': 2}) options.set_capability('acceptInsecureCerts', True) driver = webdriver.Chrome(options=options) -> Option DQuick Check:
Combine add_argument, add_experimental_option, set_capability [OK]
- Missing '--' in headless argument
- Using set_preference on ChromeOptions
- Setting acceptInsecureCerts to False by mistake
Ready to prove it?
Pass the test and this pattern moves unknown
