How to add Chrome extension in Selene?#
An example how to remove ads in Chrome with uBlock Origin extension by installing .crx
file#
Preliminary steps#
- Download and store extension. (Example: by using crxextractor)
Example project structure#
📦my-project
┣ 📂my_project
┃ ┣ 📜__init__.py
┃ ┗ 📂resources
┃ ┣ 📜__init__.py
┃ ┗ 📂chrome_extensions
┃ ┗ 📜uBlock-Origin.crx
┣ 📂tests
┃ ┣ 📜test_ublock.py
┃ ┗ 📜conftest.py
┣ 📜readme.md
┣ 📜.gitignore
┣ 📜poetry.lock
┗ 📜pyproject.toml
Code description#
Helper to build absolute Path to resources#
my_project/resources/__init__.py
Install extension and navigate into it's settings#
tests/conftest.py
import pytest
from selene import browser, have, Element, be
from selene.core.locator import Locator
from selenium import webdriver
from my_project import resources
@pytest.fixture(autouse=True)
def browser_with_ublock():
ublock_path = resources.path / 'chrome_extensions/uBlock-Origin.crx'
# ublock_id a unique constant for uBlock Origin extension
ublock_id = 'cjpalhdlnbpafiamejdnhcphjbkeiagm'
options = webdriver.ChromeOptions()
options.add_extension(ublock_path)
browser.config.driver_options = options
browser.open('chrome://extensions/')
js = f'''return document.querySelector('body > extensions-manager')
.shadowRoot.querySelector('#items-list')
.shadowRoot.querySelector('#{ublock_id}')
.shadowRoot.querySelector('#card')'''
card = Element(
Locator('ublock extension card', lambda: browser.execute_script(js)),
browser.config,
)
# Specific behaviour for uBlock extension.
# Initially it is enabled, then disabled, then enabled again.
card.should(have.css_class('disabled')).should(have.css_class('enabled'))
# You might want to increase timeout.
# card.with_(timeout=browser.config.timeout*1.5).should(...).should(...)
browser.open(f'chrome-extension://{ublock_id}/dashboard.html#about.html')
browser.switch_to.frame(browser.element('iframe')())
browser.element('#aboutNameVer').should(be.visible).should(
have.text('uBlock Origin')
)
yield
Verify that uBlock extension rules are applied to site with ads#
tests/test_ublock.py