Skip to main content

AI-powered Selenium IDE (.side) player and builder for Selenium and Playwright

Project description

Side Player (side-builder)

side-player is a next-generation automation tool that bridges the gap between AI-driven intent and rock-solid execution. It allows you to create Selenium IDE (.side) scripts interactively using natural language and execute them anywhere using Playwright or Selenium.


Quick Start

To use with Playwright

Install the package via pip or uv:

pip install side-player   # with pip
uv add side-player        # with uv

Install Playwright

playwright install

To use with Selenium

Install the package via pip or uv:

pip install side-player   # with pip
uv add side-player        # with uv

Configuration

Set the environment variable OPENAI_API_KEY with your ownkey to run side-builder. No API key is required the run the *.side files.

Demo

Demo 1. Generate *.side files and demo1_{sync,async,sel_sync}.py

% side-builder --output demo1
Using OPENAI_API_KEY=sk-proj-OlHCz-hz******************************

[Step 1] AI prompt for browser action [exit]: Go to the home of https://saucedemo.com
Playing: sides\demo1_step_1.side ()
    Success: open https://saucedemo.com
    Save sides\demo1_step_1.side? [Y/n]:

[Step 2] AI prompt for browser action [exit]: Log in
Playing: sides\demo1_step_2.side ()
    Success: open https://www.saucedemo.com/
    Success: type id=user-name
    Success: type id=password
    Success: click id=login-button
    Save sides\demo1_step_2.side? [Y/n]:

[Step 3] AI prompt for browser action [exit]: Add a backpack to the cart
Playing: sides\demo1_step_3.side ()
    Success: click id=add-to-cart-sauce-labs-backpack
    Save sides\demo1_step_3.side? [Y/n]:

[Step 4] AI prompt for browser action [exit]: Go to cart for checkout
Playing: sides\demo1_step_4.side ()
    Success: click css=.shopping_cart_link
    Save sides\demo1_step_4.side? [Y/n]:

[Step 5] AI prompt for browser action [exit]: Click Checkout
Playing: sides\demo1_step_5.side ()
    Success: click css=.btn.btn_action.btn_medium.checkout_button
    Save sides\demo1_step_5.side? [Y/n]:

[Step 6] AI prompt for browser action [exit]: Enter John as first name, Doe as last name, 11111 as zip code and click Continue
Playing: sides\demo1_step_6.side ()
    Success: type id=first-name
    Success: type id=last-name
    Success: type id=postal-code
    Success: click id=continue
    Save sides\demo1_step_6.side? [Y/n]:

[Step 7] AI prompt for browser action [exit]: Click Finish
Playing: sides\demo1_step_7.side ()
    Success: click id=finish
    Save sides\demo1_step_7.side? [Y/n]:

[Step 8] AI prompt for browser action [exit]: Click Back Home
Playing: sides\demo1_step_8.side ()
    Success: click css=.btn.btn_primary.btn_small[id='back-to-products']
    Save sides\demo1_step_8.side? [Y/n]:

[Step 9] AI prompt for browser action [exit]: Log out
Playing: sides\demo1_step_9.side ()
    Success: click id=react-burger-menu-btn
    Success: click id=logout_sidebar_link
    Save sides\demo1_step_9.side? [Y/n]:

[Step 10] AI prompt for browser action [exit]:

Scripts created: demo1_sync.py, demo1_async.py, demo1_sel_sync.py
Side files saved in: sides/

Demo 2. Playing *.side files using Playwright Sync API

% uv run demo1_sync.py
Playing: sides/demo1_step_1.side (Go to the home of https://saucedemo.com)
    Success: open https://saucedemo.com
Playing: sides/demo1_step_2.side (Log in)
    Success: open https://www.saucedemo.com/
    Success: type id=user-name
    Success: type id=password
    Success: click id=login-button
Playing: sides/demo1_step_3.side (Add a backpack to the cart)
    Success: click id=add-to-cart-sauce-labs-backpack
Playing: sides/demo1_step_4.side (Go to cart for checkout)
    Success: click css=.shopping_cart_link
Playing: sides/demo1_step_5.side (Click Checkout)
    Success: click css=.btn.btn_action.btn_medium.checkout_button
Playing: sides/demo1_step_6.side (Enter John as first name, Doe as last name, 11111 as zip code and click Continue)
    Success: type id=first-name
    Success: type id=last-name
    Success: type id=postal-code
    Success: click id=continue
Playing: sides/demo1_step_7.side (Click Finish)
    Success: click id=finish
Playing: sides/demo1_step_8.side (Click Back Home)
    Success: click css=.btn.btn_primary.btn_small[id='back-to-products']
Playing: sides/demo1_step_9.side (Log out)
    Success: click id=react-burger-menu-btn
    Success: click id=logout_sidebar_link
Done.

Demo 3. Playing *.side files using Playwright Async API

% uv run demo1_async.py
Playing (Async): sides/demo1_step_1.side (Go to the home of https://saucedemo.com)
    Success: open https://saucedemo.com
Playing (Async): sides/demo1_step_2.side (Log in)
    Success: open https://www.saucedemo.com/
    Success: type id=user-name
    Success: type id=password
    Success: click id=login-button
Playing (Async): sides/demo1_step_3.side (Add a backpack to the cart)
    Success: click id=add-to-cart-sauce-labs-backpack
Playing (Async): sides/demo1_step_4.side (Go to cart for checkout)
    Success: click css=.shopping_cart_link
Playing (Async): sides/demo1_step_5.side (Click Checkout)
    Success: click css=.btn.btn_action.btn_medium.checkout_button
Playing (Async): sides/demo1_step_6.side (Enter John as first name, Doe as last name, 11111 as zip code and click Continue)
    Success: type id=first-name
    Success: type id=last-name
    Success: type id=postal-code
    Success: click id=continue
Playing (Async): sides/demo1_step_7.side (Click Finish)
    Success: click id=finish
Playing (Async): sides/demo1_step_8.side (Click Back Home)
    Success: click css=.btn.btn_primary.btn_small[id='back-to-products']
Playing (Async): sides/demo1_step_9.side (Log out)
    Success: click id=react-burger-menu-btn
    Success: click id=logout_sidebar_link
Done.

Demo 4. Play *.side files using Selenium

>uv run demo1_sel_sync.py
Playing: sides/demo1_step_1.side (Go to the home of https://saucedemo.com)
    Success: open https://saucedemo.com
Playing: sides/demo1_step_2.side (Log in)
    Success: open https://www.saucedemo.com/
    Success: type id=user-name
    Success: type id=password
    Success: click id=login-button
Playing: sides/demo1_step_3.side (Add a backpack to the cart)
    Success: click id=add-to-cart-sauce-labs-backpack
Playing: sides/demo1_step_4.side (Go to cart for checkout)
    Success: click css=.shopping_cart_link
Playing: sides/demo1_step_5.side (Click Checkout)
    Success: click css=.btn.btn_action.btn_medium.checkout_button
Playing: sides/demo1_step_6.side (Enter John as first name, Doe as last name, 11111 as zip code and click Continue)
    Success: type id=first-name
    Success: type id=last-name
    Success: type id=postal-code
    Success: click id=continue
Playing: sides/demo1_step_7.side (Click Finish)
    Success: click id=finish
Playing: sides/demo1_step_8.side (Click Back Home)
    Success: click css=.btn.btn_primary.btn_small[id='back-to-products']
Playing: sides/demo1_step_9.side (Log out)
    Success: click id=react-burger-menu-btn
    Success: click id=logout_sidebar_link
Done.

Key Features

  • Zero-config Selectors: AI finds the best ID, CSS, or XPath for you automatically.
  • Cost Efficient: Use AI only for recording. Execution is 100% local and free.
  • Standard Format: Generates standard .side files compatible with the Selenium IDE.
  • Developer Friendly: Provides both Sync and Async Playwright APIs.
  • Extensible: Built with a modular structure to support Playwright and Selenium.

Prerequisites

  • Python 3.12+
  • OpenAI API Key (required only for the side-builder recording phase)

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

side_builder-0.1.2.tar.gz (47.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

side_builder-0.1.2-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

Details for the file side_builder-0.1.2.tar.gz.

File metadata

  • Download URL: side_builder-0.1.2.tar.gz
  • Upload date:
  • Size: 47.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for side_builder-0.1.2.tar.gz
Algorithm Hash digest
SHA256 66d8df0602083e41b14ba02c23ebe2595ac0a76949d48a979c553780bd5b2c4f
MD5 eb6c23bf8ceb1b20ddd189888dad44a2
BLAKE2b-256 542aeb28a2b3b0e030b2666f630873937ca48c40431f9331fc2b3bc91b0bd6d1

See more details on using hashes here.

File details

Details for the file side_builder-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: side_builder-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for side_builder-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 eb6d24c254419ae02e1610a31975cfb14e88b83aaeae5041917587df61d2f505
MD5 d51d859004da6ea85fc9f33c85dbbdc0
BLAKE2b-256 a74087b4b9324c98844c9d3b5deba94a25cf13d36422f41d78c63ff82ba778bb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page