Get rid of chrome restore bubble popup when automate GUI test using Selenium
Tags: chrome, automation, python, selenium
Published: 2019-10-09 08:32:09

---
title: Get rid of chrome restore bubble popup when automate GUI test using Selenium
published: true
description: 
tags: #chrome #automation #python #selenium
---

Have you ever been annoyed by this restore session bubble in chrome:

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/ws40qy173s4cw57jrbbs.jpg)

This blog post I will show you how to handle that.

Usually when you automate the web app with browser, this popup appear because of driver.quit() and because you are using with user data directory. ( If you're not, this bubble will not appear as in my experience ).

Sometimes we need to use the user data directory, for example we need some specific extensions, or some logged in data.

1.Manually:

To disable the popup manually, in windows, you need to go to user data directory default.

For me, it's like : 
C:\Users\your_name\AppData\Local\Chrome\Browser\User Data\Default
In this folder, open file Preferences

You need to modify these values to :

"exit_type": "none",

"exited_cleanly":true,

After save that, the next time it won't happen the next time.

But Chrome browser might override that value, so if you don't want to modify that forever, make sure you set the file as read-only.

2.Automation:

In the case you are doing automation test with selenium, you will need to do some code.

We will work on how to change the text in Preferences file.

````javascript
def modify_file_as_text(text_file_path, text_to_search, replacement_text):
    with fileinput.FileInput(text_file_path, inplace=True, backup='.bak') as file:
        for line in file:
            print(line.replace(text_to_search, replacement_text), end='')

```

This function will find the text_file_path, and replace the wanted_text_change with the new one

Currently, I'm using Selenium with pytest so the file setup before open browser will look like this:
````javascript
@pytest.fixture(scope='session')
@pytest.mark.usefixtures('set_up_before_run_user_browser', 'get_use_data_path')
def browser(get_use_data_path):
    global driver
    global user_data_path
    global block_origin_extension_path
    if driver is None:
        chrome_options = sele_webdriver.ChromeOptions()
        chrome_options.add_argument("--window-size=1920,1080")
        chrome_options.add_argument("--proxy-server='direct://'")
        chrome_options.add_argument("--proxy-bypass-list=*")
        chrome_options.add_argument("--start-maximized")
        chrome_options.add_argument('--disable-gpu')
        chrome_options.add_argument('--disable-dev-shm-usage')
        chrome_options.add_argument('--no-sandbox')
        chrome_options.add_argument('--ignore-certificate-errors')
        chrome_options.add_argument("--allow-insecure-localhost")
        chrome_options.add_argument('--disable-application-cache')
        chrome_options.add_argument("--disable-session-crashed-bubble")
        chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])
        if get_use_data_path is True or get_use_data_path is None:
            import subprocess
            prog = subprocess.Popen("taskkill /im chrome.exe /f", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            prog.communicate()  # Returns (stdoutdata, stderrdata): stdout and stderr are ignored, here
            set_up_before_run_user_browser()
            chrome_options.add_argument('--user-data-dir=' + user_data_path)
            modify_file_as_text(user_data_path + '\\Default\\Preferences', 'Crashed', 'none')
        driver = webdriver.Chrome(options=chrome_options)
        driver.maximize_window()
        driver.set_page_load_timeout(40)
    yield driver
    driver.quit()

```

There is a lot in the above but you only need to note 2 things,
First we need to set the user data directory

````javascript
chrome_options.add_argument('--user-data-dir=' + user_data_path)
```
Secondly,call the replace text function:

````javascript
modify_file_as_text(user_data_path + '\\Default\\Preferences', 'Crashed', 'none')
```

That's it.
I hope this helps.
Thank you guys and gals!

Notes: If you feel this blog help you and want to show the appreciation, feel free to drop by :

[<img src="https://thepracticaldev.s3.amazonaws.com/i/cno42wb8aik6o9ek1f89.png">](https://www.buymeacoffee.com/dOaeSPv
)

This will help me to contributing more valued contents.