Drivers¶
heal talks to the live session through a SessionDriver — one protocol, one
implementation per automation library. The listener picks the driver from the
failing keyword's owning library; failures from libraries without a driver are
left untouched.
| Capability | Browser (Playwright) | SeleniumLibrary | AppiumLibrary |
|---|---|---|---|
| Install | included | pip install robotframework-heal[selenium] |
included |
| Locator drift | ✅ | ✅ | ✅ |
| Timing recovery | ✅ | ✅ (see note) | ✅ (no-op ready) |
| Viewport recovery | ✅ scroll | ✅ scroll | ✅ bounded swipe search |
| Overlay dismissal | ✅ | ✅ | ✅ permission popups |
| Form diagnosis | ✅ | ✅ | DOM-only |
| Open shadow DOM | ✅ pierced | ⚠️ best-effort (JS serialize, no pierce selectors) | n/a |
| Closed shadow DOM | ❌ platform-restricted | ❌ | n/a |
| iframes | ✅ frame >>> inner healing |
❌ detect + RCA only (no pierce syntax) | n/a |
SeleniumLibrary timing
Selenium's default page-load strategy blocks commands until the document is
ready, so timing failures rarely surface. They appear (and heal) with
page_load_strategy=none.
How the driver is selected¶
owning RF library -> driver
Browser -> BrowserDriver (Playwright)
SeleniumLibrary -> SeleniumDriver (optional [selenium] extra)
AppiumLibrary -> AppiumDriver
All driver calls are marshalled to the Robot Framework main thread — see Threading and execution.
Locator syntax per library¶
Proposals are produced in the library's own syntax:
- Browser:
css=…,xpath=…, frame-piercedid=frame >>> css=#btn - SeleniumLibrary:
css:…,xpath:… - AppiumLibrary:
xpath=…,accessibility_id=…,id=…,class=…