DEV Community

Akram Siddiqui
Akram Siddiqui

Posted on

1

How to handle Permission Pop-ups using Selenium WebDriver | Selenium |Python|

Hello Dev Community,

I'm currently working on Selenium WebDriver automation with Python, focusing on handling permission pop-ups in headless mode on a Linux machine. Specifically, I want to handle the location permission alert and allow it to make my tests run smoothly.

In non-headless mode, the following code works perfectly:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.chrome.options import Options as ChromeOptions
from time import sleep

# Chrome options setup
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--incognito')

# Configure content settings to disable notifications and geolocation
content_settings = {'notifications': 0, 'geolocation': 0}
profile = {'managed_default_content_settings': content_settings}
prefs = {'profile': profile}
chrome_options.add_experimental_option('prefs', prefs)

# Add arguments to disable notifications, geolocation, and media stream
chrome_options.add_argument('--disable-notifications')
chrome_options.add_argument('--disable-geolocation')
chrome_options.add_argument('--use-fake-ui-for-media-stream')

path = r"C:\Program Files (x86)\chromedriver-win64\chromedriver.exe"

# WebDriver setup using WebDriver Manager
service = ChromeService(path)
driver = webdriver.Chrome(service=service, options=chrome_options)
driver.maximize_window()

# Navigate to the specified URLs
driver.get('https://www.cleartrip.com/')
driver.get('https://whatmylocation.com/')

sleep(15)
Enter fullscreen mode Exit fullscreen mode

However, when I switch to headless mode on a Linux machine, the location permission alert is not being handled as expected. Here's the headless mode code:

def create_headless_chrome_driver():
    chrome_options = ChromeOptions()
    chrome_options.add_argument('--start-maximized')
    chrome_options.add_argument('--headless')

    # Allow geolocation
    chrome_options.binary_location = CHROME_BINARY_PATH
    chrome_options.add_argument('window-size=1920x1080')
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")

    # Handling geolocation
    chrome_options.add_argument('--incognito')

    # Configure content settings to disable notifications and geolocation
    content_settings = {'notifications': 1, 'geolocation': 1}
    profile = {'managed_default_content_settings': content_settings}
    prefs = {'profile': profile}
    chrome_options.add_experimental_option('prefs', prefs)

    # Add arguments to disable notifications, geolocation, and media stream
    chrome_options.add_argument('--disable-notifications')
    chrome_options.add_argument('--disable-geolocation')
    chrome_options.add_argument('--use-fake-ui-for-media-stream')

    service = ChromeService(executable_path=CHROMEDRIVER_PATH)
    driver = webdriver.Chrome(service=service, options=chrome_options)

    return driver
Enter fullscreen mode Exit fullscreen mode

**

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (1)

Collapse
 
proteusiq profile image
Prayson Wilfred Daniel • Edited

Could you use python highlight code blocks like

from selenium import webdriver

# this is a comment
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--incognito')
Enter fullscreen mode Exit fullscreen mode

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay