A Pytest-powered Smart Test Runner CLI tool.
Project description
🤖 nRobo — Next-Gen Test Automation for Selenium (with Playwright Superpowers)
nRobo brings the modern selector engine, autowait magic, and fluent APIs of Playwright, while staying fully compatible with Selenium WebDriver.
It’s built for QA teams who want stability, readability, and zero flakiness — without migrating away from the Selenium ecosystem.
Modern selectors + AutoWait + Collections + Allure reporting + CI-ready packaging. nRobo = Playwright-level power with Selenium-level compatibility.
⭐️ Why nRobo?
Because Selenium is powerful — but outdated.
Because Playwright is modern — but incompatible with Selenium ecosystems.
Because flaky UI tests cost time, money, and reputation.
nRobo solves all three*.
🚀 30-Second Quick Demo
def test_login(page):
page.selector("text=Login").click()
page.selector("#email").fill("admin")
page.selector("#password").fill("secret")
page.selector("button:has-text('Login')").click()
page.selector("text=Welcome").should_be_visible()
This works on Selenium, but feels like Playwright.
🔥 nRobo vs Selenium vs Playwright
| Capability | Selenium | Playwright | nRobo |
|---|---|---|---|
| AutoWait on all actions | ❌ | ✅ | ✅ |
| text= selectors | ❌ | ✅ | ✅ |
| has-text(), has() | ❌ | ✅ | ✅ |
| Shadow DOM >>> | ⚠️ | ✅ | ✅ |
| Locator Collections | ❌ | ✅ | ✅ |
| Chaining: click().fill().should() | ❌ | ❌ | ✅ (Exclusive) |
| Selenium WebDriver support | ✅ | ❌ | ✅ |
nRobo = Playwright’s power + Selenium’s reach + its own exclusive features
✨ Exclusive Features (Only in nRobo)
1. Locator Action Chaining (Exclusive)
A fluent API inspired by Playwright but designed for Selenium:
page.selector("input").click().locator("#email").fill("admin").should_be_visible()
Mix CSS, XPath, Text, Regex, Pseudo, and Shadow selectors seamlessly.
🔧 Enable/Disable:
settings.ENABLE_LOCATOR_ACTION_CHAINING = True
📄 Full documentation:
➡️ docs/locator_action_chaining.md
2. Advanced Selector Engine (Playwright-level)
Supported:
-
text=Login -
"Login" -
regex: /login/i -
:visible, :enabled, :checked -
:has() + :has-text() -
shadow:: pierce selectors
page.selector("form:has(input[name=email]) >> button:visible").click()
3. Autowait Engine (Eliminates 95% Flakiness)
-
Retries
-
Scroll into view
-
Visibility checks
-
Stale element handling
-
WebDriverWait on every action
page.selector("#login").click() # auto-waits
4. Locator Collections API
rows = page.selector("tr").all()
rows.filter(has_text="Active").first().click()
Supports:
-
.all() -
.first(),.last(),.nth(i) -
.filter() -
.map() -
set-like operations
6. 🔌 API Testing Support
5. Modern Reporting (HTML + Allure)
-
Automatic screenshots
-
Logs with timestamps
-
Optional built-in Nginx Allure server
📦 Installation
pip install nrobo
nrobo init --app my_project
nrobo
📘 Documentation
-
Selenium Compatibility Layer
All inside the docs/ directory.
🧱 Project Structure
nrobo/
src/nrobo/
docs/
suites/
tests/
🛠 Developer Guide
black src/ tests/
flake8 src/ tests/
pytest --cov=src/
Pull requests welcome!
MIT License
© 2025 pancht
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nrobo-2025.5.7.tar.gz.
File metadata
- Download URL: nrobo-2025.5.7.tar.gz
- Upload date:
- Size: 88.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac9a53f608f4edfa7de93dc5c122e61fadf53202a077ae146782f8cd47652deb
|
|
| MD5 |
4edee98cde58f097122d1facfa47e394
|
|
| BLAKE2b-256 |
1c7dee95308a970cc5216c3f8499130408845e053676868f33ba87431dfbfbde
|
File details
Details for the file nrobo-2025.5.7-py3-none-any.whl.
File metadata
- Download URL: nrobo-2025.5.7-py3-none-any.whl
- Upload date:
- Size: 103.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
781299da2280969fb69a05730cce4d3eb6b574b01030a60049f1adae47059111
|
|
| MD5 |
bd37a149580e56dbcc9775f3c0f01920
|
|
| BLAKE2b-256 |
4827b8ba5bf0cd22bc4ae4cdd6d2b02af15a997a13869267dd2588b29364f26e
|