SeleniumBase - All-in-one Browser Automation Framework
SeleniumBase
SeleniumBase is the professional toolkit for web automation activities. Built for testing websites, bypassing CAPTCHAs, enhancing productivity, completing tasks, and scaling your business.
Learn from over 200 examples in the SeleniumBase/examples/ folder.
Note that UC Mode / CDP Mode (Stealth Mode) have their own ReadMe files.
Most scripts run with raw **python**, although some scripts use Syntax Formats that expect pytest (a Python unit-testing framework included with SeleniumBase that can discover, collect, and run tests automatically).
Here’s raw_google.py, which performs a Google search:
from seleniumbase import SB
with SB(test=True, uc=True) as sb: sb.open("https://google.com/ncr") sb.type('[title="Search"]', "SeleniumBase GitHub page\n") sb.click('[href*="github.com/seleniumbase/"]') sb.save_screenshot_to_logs() # ./latest_logs/ print(sb.get_page_title()) python raw_google.py
Here’s an example of bypassing Cloudflare’s challenge page: SeleniumBase/examples/cdp_mode/raw_gitlab.py
from seleniumbase import SB
with SB(uc=True, test=True, locale="en") as sb: url = "https://gitlab.com/users/sign_in" sb.activate_cdp_mode(url) sb.uc_gui_click_captcha() sb.sleep(2)

Here’s test_get_swag.py, which tests an e-commerce site:
from seleniumbase import BaseCaseBaseCase.main(__name__, __file__) # Call pytest
class MyTestClass(BaseCase): def test_swag_labs(self): self.open("https://www.saucedemo.com") self.type("#user-name", "standard_user") self.type("#password", "secret_sauce\n") self.assert_element("div.inventory_list") self.click('button[name*="backpack"]') self.click("#shopping_cart_container a") self.assert_text("Backpack", "div.cart_item") self.click("button#checkout") self.type("input#first-name", "SeleniumBase") self.type("input#last-name", "Automation") self.type("input#postal-code", "77123") self.click("input#continue") self.click("button#finish") self.assert_text("Thank you for your order!") pytest test_get_swag.py
(The default browser is
--chromeif not set.)
Here’s test_coffee_cart.py, which verifies an e-commerce site:
pytest test_coffee_cart.py --demo
(
--demomode slows down tests and highlights actions)
Here’s test_demo_site.py, which covers several actions:
pytest test_demo_site.py
Easy to type, click, select, toggle, drag & drop, and more.
(For more examples, see the SeleniumBase/examples/ folder.)
Explore the README:
Learn about different ways of writing tests:
Here’s test_simple_login.py, which uses BaseCase class inheritance, and runs with pytest or pynose. (Use self.driver to access Selenium’s raw driver.)
from seleniumbase import BaseCaseBaseCase.main(__name__, __file__)
class TestSimpleLogin(BaseCase): def test_simple_login(self): self.open("seleniumbase.io/simple/login") self.type("#username", "demo_user") self.type("#password", "secret_pass") self.click('a:contains("Sign in")') self.assert_exact_text("Welcome!", "h1") self.assert_element("img#image1") self.highlight("#image1") self.click_link("Sign out") self.assert_text("signed out", "#top_message")Here’s raw_login_sb.py, which uses the SB Context Manager. Runs with pure python. (Use sb.driver to access Selenium’s raw driver.)
from seleniumbase import SB
with SB() as sb: sb.open("seleniumbase.io/simple/login") sb.type("#username", "demo_user") sb.type("#password", "secret_pass") sb.click('a:contains("Sign in")') sb.assert_exact_text("Welcome!", "h1") sb.assert_element("img#image1") sb.highlight("#image1") sb.click_link("Sign out") sb.assert_text("signed out", "#top_message")Here’s raw_login_driver.py, which uses the Driver Manager. Runs with pure python. (The driver is an improved version of Selenium’s raw driver, with more methods.)
from seleniumbase import Driver
driver = Driver()try: driver.open("seleniumbase.io/simple/login") driver.type("#username", "demo_user") driver.type("#password", "secret_pass") driver.click('a:contains("Sign in")') driver.assert_exact_text("Welcome!", "h1") driver.assert_element("img#image1") driver.highlight("#image1") driver.click_link("Sign out") driver.assert_text("signed out", "#top_message")finally: driver.quit()Install SeleniumBase:
You can install seleniumbase from PyPI or GitHub:
How to install seleniumbase from PyPI:
pip install seleniumbase- (Add
--upgradeOR-Uto upgrade SeleniumBase.) - (Add
--force-reinstallto upgrade indirect packages.) - (Use
pip3if multiple versions of Python are present.)
How to install seleniumbase from a GitHub clone:
git clone https://github.com/seleniumbase/SeleniumBase.gitcd SeleniumBase/pip install -e .How to upgrade an existing install from a GitHub clone:
git pullpip install -e .Type seleniumbase or sbase to verify that SeleniumBase was installed successfully:
___ _ _ ___/ __| ___| |___ _ _ (_)_ _ _ __ | _ ) __ _ ______\__ \/ -_) / -_) ' \| | \| | ' \ | _ \/ _` (_-< -_)|___/\___|_\___|_||_|_|\_,_|_|_|_\|___/\__,_/__|___|----------------------------------------------------
╭──────────────────────────────────────────────────╮│ * USAGE: "seleniumbase [COMMAND] [PARAMETERS]" ││ * OR: "sbase [COMMAND] [PARAMETERS]" ││ ││ COMMANDS: PARAMETERS / DESCRIPTIONS: ││ get / install [DRIVER_NAME] [OPTIONS] ││ methods (List common Python methods) ││ options (List common pytest options) ││ behave-options (List common behave options) ││ gui / commander [OPTIONAL PATH or TEST FILE] ││ behave-gui (SBase Commander for Behave) ││ caseplans [OPTIONAL PATH or TEST FILE] ││ mkdir [DIRECTORY] [OPTIONS] ││ mkfile [FILE.py] [OPTIONS] ││ mkrec / codegen [FILE.py] [OPTIONS] ││ recorder (Open Recorder Desktop App.) ││ record (If args: mkrec. Else: App.) ││ mkpres [FILE.py] [LANG] ││ mkchart [FILE.py] [LANG] ││ print [FILE] [OPTIONS] ││ translate [SB_FILE.py] [LANG] [ACTION] ││ convert [WEBDRIVER_UNITTEST_FILE.py] ││ extract-objects [SB_FILE.py] ││ inject-objects [SB_FILE.py] [OPTIONS] ││ objectify [SB_FILE.py] [OPTIONS] ││ revert-objects [SB_FILE.py] [OPTIONS] ││ encrypt / obfuscate ││ decrypt / unobfuscate ││ proxy (Start a basic proxy server) ││ download server (Get Selenium Grid JAR file) ││ grid-hub [start|stop] [OPTIONS] ││ grid-node [start|stop] --hub=[HOST/IP] ││ ││ * EXAMPLE => "sbase get chromedriver stable" ││ * For command info => "sbase help [COMMAND]" ││ * For info on all commands => "sbase --help" │╰──────────────────────────────────────────────────╯Example / Usage:
If you’ve cloned SeleniumBase, you can run tests from the examples/ folder.
Here’s my_first_test.py:
cd examples/pytest my_first_test.py
Here’s the full code for my_first_test.py:
from seleniumbase import BaseCaseBaseCase.main(__name__, __file__)
class MyTestClass(BaseCase): def test_swag_labs(self): self.open("https://www.saucedemo.com") self.type("#user-name", "standard_user") self.type("#password", "secret_sauce\n") self.assert_element("div.inventory_list") self.assert_exact_text("Products", "span.title") self.click('button[name*="backpack"]') self.click("#shopping_cart_container a") self.assert_exact_text("Your Cart", "span.title") self.assert_text("Backpack", "div.cart_item") self.click("button#checkout") self.type("#first-name", "SeleniumBase") self.type("#last-name", "Automation") self.type("#postal-code", "77123") self.click("input#continue") self.assert_text("Checkout: Overview") self.assert_text("Backpack", "div.cart_item") self.assert_text("29.99", "div.inventory_item_price") self.click("button#finish") self.assert_exact_text("Thank you for your order!", "h2") self.assert_element('img[alt="Pony Express"]') self.js_click("a#logout_sidebar_link") self.assert_element("div#login_button_container")- By default, CSS Selectors are used for finding page elements.
- If you’re new to CSS Selectors, games like CSS Diner can help you learn.
- For more reading, here’s an advanced guide on CSS attribute selectors.
← Back to projects