🤖 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
Metadata
Release files for nrobo 2025.5.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nrobo-2025.5.7.tar.gz | 88.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nrobo-2025.5.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 192.6 kB
Release files / nrobo-2025.5.7.tar.gz
| Download URL | nrobo-2025.5.7.tar.gz |
|---|---|
| Size | 88.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ac9a53f608f4edfa7de93dc5c122e61fadf53202a077ae146782f8cd47652deb
|
|
BLAKE2b-256 checksum How to use checksums |
1c7dee95308a970cc5216c3f8499130408845e053676868f33ba87431dfbfbde
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.0
|
Release files / nrobo-2025.5.7-py3-none-any.whl
| Download URL | nrobo-2025.5.7-py3-none-any.whl |
|---|---|
| Size | 103.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
781299da2280969fb69a05730cce4d3eb6b574b01030a60049f1adae47059111
|
|
BLAKE2b-256 checksum How to use checksums |
4827b8ba5bf0cd22bc4ae4cdd6d2b02af15a997a13869267dd2588b29364f26e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.0
|