How to accept the popup presented when installing extension in Selenium?

0
0

I am using selenium for some browser automation. I need to install an extension in the browser for my work. I am doing it as follows:

import selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
executable_path
= "/usr/bin/chromedriver"
options
= Options()
options
.add_extension('/home/TheRookie/Downloads/extensionSamples/abhcfceiempjmchhhdhbnkbimnfpckgl.crx')
browser
= webdriver.Chrome(executable_path=executable_path, chrome_options=options)

The browser is starting fine but I am prompted with a pop-up to confirm that I want to add the extension as follows:

enter image description here

and after I get this pop-up, Python soon returns with the following exception:

selenium.common.exceptions.WebDriverException: Message: u’unknown
error: failed to wait for extension background page to load:
chrome-extension://abhcfceiempjmchhhdhbnkbimnfpckgl/toolbar.html\nfrom
unknown error: page could not be found:
chrome-extension://abhcfceiempjmchhhdhbnkbimnfpckgl/toolbar.html\n
(Driver info: chromedriver=2.12.301324
(de8ab311bc9374d0ade71f7c167bad61848c7c48),platform=Linux
3.13.0-39-generic x86_64)’

I tried handling the popup as a regular JavaScript alert using the following code:

alert = browser.switch_to_alert()
alert
.accept()

However, this doesn’t help. Could anyone please tell me how do I install this extension without the popup or a way to accept the popup? Any help would be greatly appreciated. Thanks!

  • You must to post comments
0
0

Usually, you cannot test inline installation of a Chrome extension with just Selenium, because of that installation dialog. There are a few examples in the wild that show how to use external tools outside Selenium to solve this problem, but these are not very portable (i.e. platform-specific) and rely on a state of Chrome’s UI, which is not guaranteed to be consistent.

But that does not mean that you cannot test inline installation. If you replace chrome.webstore.install with a substitute that behaves like the chrome.webstore.install API (but without the dialog), then the end-result is the same for all intents and purposes.

“Behaves like chrome.webstore.install” consists of two things:

  • Same behavior in error reporting and callback invocation.
  • An extension is installed.

I have just set up such an example on Github, which includes the source code of the helper extension/app and a few examples using Selenium (Python, Java). I suggest to read the README and the source code to get a better understanding of what happens: https://github.com/Rob–W/testing-chrome.webstore.install.

The sample does not require the tested extension to be available in the Chrome Web store. It does not even connect to the Chrome Web store. In particular, it does not check whether the site where the test runs is listed as a verified website, which is required for inline installation to work.

  • You must to post comments
Showing 1 result
Your Answer
Post as a guest by filling out the fields below or if you already have an account.
Name*
E-mail*
Website