Generate Robot Framework tests using SeleniumLibrary for browser automation with Selenium WebDriver. Use when asked to create web UI tests, automate browsers, interact with forms, handle multiple windows/frames, or execute JavaScript.
Resources
2Install
npx skillscat add manykarim/robotframework-agentskills/robotframework-selenium-skill Install via the SkillsCat registry.
SeleniumLibrary Skill
Create browser automation tests using SeleniumLibrary with Selenium WebDriver.
Quick Reference
SeleniumLibrary provides browser automation using Selenium WebDriver. Unlike Browser Library, explicit waits are often required for reliable test execution.
Installation
pip install robotframework-seleniumlibraryWebDriver binaries (chromedriver, geckodriver, etc.) must be in PATH. Selenium 4.6+ includes
Selenium Manager which handles driver downloads automatically, so executable_path andwebdriver-manager are often unnecessary with modern Selenium. For older versions:
pip install webdriver-managerLibrary Import
*** Settings ***
Library SeleniumLibrary timeout=10s implicit_wait=0sImport Options
| Option | Default | Description |
|---|---|---|
| timeout | 5s | Default timeout for wait keywords |
| implicit_wait | 0s | Implicit wait (0s is recommended; use explicit waits instead) |
| run_on_failure | Capture Page Screenshot | Keyword to run on failure |
| screenshot_root_directory | None | Directory for screenshots |
| plugins | None | Plugin modules to load |
WebDriver Setup Options
Chrome
# Basic
Open Browser ${URL} chrome
# Headless
Open Browser ${URL} headless_chrome
# With Options
Open Browser ${URL} chrome options=add_argument("--headless");add_argument("--no-sandbox")
# With WebDriver Manager
Open Browser ${URL} chrome executable_path=${DRIVER_PATH}Firefox
Open Browser ${URL} firefox
Open Browser ${URL} headless_firefox
Open Browser ${URL} firefox options=add_argument("--headless")Edge
Open Browser ${URL} edge
Open Browser ${URL} headless_edgeLocator Strategies
SeleniumLibrary requires strategy prefixes except for id and name attributes.
| Strategy | Syntax | Example |
|---|---|---|
| id | id=value or value |
id=username or username |
| name | name=value or value |
name=email |
| xpath | xpath=expression |
xpath=//button[@type='submit'] |
| css | css=selector |
css=button.primary |
| class | class=name |
class=submit-btn |
| tag | tag=name |
tag=button |
| link | link=text |
link=Click here |
| partial link | partial link=text |
partial link=Click |
| dom | dom=expression |
dom=document.forms[0] |
| jquery | jquery=selector |
jquery=button:visible |
| data | data=attr:value |
data=testid:submit |
| default | (no prefix) | username (tries id, then name) |
Locator Priority (recommended)
- id - Unique, fastest
- data-testid - Stable, test-specific
- name - Often stable
- css - Flexible, readable
- xpath - Powerful but fragile
- link - For anchor text
Core Keywords Quick Reference
Browser Control
Open Browser ${URL} chrome
Close Browser
Close All Browsers
Maximize Browser Window
Set Window Size 1920 1080Navigation
Go To ${URL}
Go Back
Go Forward
Reload Page
${url}= Get Location
${title}= Get TitleElement Interaction
Click Element css=button.submit
Click Button id=submit
Click Link link=Home
Input Text id=username myuser
Input Password id=password secret
Clear Element Text id=search
Press Keys id=search RETURN
Press Keys None CTRL+aDropdowns
Select From List By Value id=country US
Select From List By Label id=country United States
Select From List By Index id=country 0
Unselect From List By Value id=items item1Checkboxes and Radio Buttons
Select Checkbox id=agree
Unselect Checkbox id=newsletter
Select Radio Button gender maleGetting Content
${text}= Get Text css=h1.title
${value}= Get Value id=email
${attr}= Get Element Attribute css=a.link href
${count}= Get Element Count css=.item
@{elements}= Get WebElements css=.itemWindows and Tabs
@{handles}= Get Window Handles
Switch Window MAIN # switch to first/main window
Switch Window NEW # switch to most recently opened window
Switch Window title=Page Title # switch by title
Switch Window url=https://example # switch by URL substring
Switch Window ${handle} # switch by handle value
Close Window # close current window (not last one)Frames (iframes)
Select Frame id=my-iframe # enter iframe by locator
Select Frame name=content # enter iframe by name
Unselect Frame # return to main document from any frame depthAlerts and Prompts
Handle Alert action=ACCEPT # accept alert (OK)
Handle Alert action=DISMISS # dismiss alert (Cancel)
${text}= Handle Alert # get alert text and accept
Input Text Into Alert my input text # type into prompt and accept
Input Text Into Alert text action=DISMISSFile Upload
Choose File id=file-input /path/to/file.pdfCookies
${cookie}= Get Cookie session_id
Add Cookie name=theme value=dark
Delete Cookie session_id
Delete All CookiesTitle Verification
Title Should Be Exact Page Title
Title Should Contain Partial TitleLocation (URL) Waits
Wait Until Location Contains /dashboard timeout=10sWaiting Keywords (Critical)
SeleniumLibrary does NOT auto-wait. Always use explicit waits.
Element Waits
Wait Until Element Is Visible css=.results timeout=10s
Wait Until Element Is Not Visible css=.loader
Wait Until Element Is Enabled id=submit
Wait Until Page Contains Element css=.loaded
Wait Until Page Does Not Contain Element css=.spinnerText Waits
Wait Until Page Contains Success
Wait Until Page Does Not Contain Loading
Wait Until Element Contains css=h1 Welcome
Wait Until Element Does Not Contain css=.status PendingElement Count Waits
Wait Until Element Count Is css=.item 5
Wait Until Element Count Is Greater Than css=.item 0
Wait Until Element Count Is Less Than css=.item 10Verification Keywords
Element Should Be Visible css=.success
Element Should Not Be Visible css=.error
Element Should Be Enabled id=submit
Element Should Be Disabled id=submit
Element Should Contain css=h1 Welcome
Element Text Should Be css=.title Exact Title
Page Should Contain Login successful
Page Should Not Contain Error
Checkbox Should Be Selected id=agreeCommon Patterns
Login with Explicit Waits
*** Keywords ***
Login
[Arguments] ${username} ${password}
Open Browser ${LOGIN_URL} chrome
Wait Until Element Is Visible id=username
Input Text id=username ${username}
Input Password id=password ${password}
Click Button id=submit
Wait Until Page Contains WelcomeForm Submission with Validation
*** Keywords ***
Submit Form And Verify Error
Input Text id=email invalid-email
Click Button id=submit
Wait Until Element Is Visible css=.error-message
Element Should Contain css=.error-message valid emailWait for AJAX Content
*** Keywords ***
Load And Verify Data
Click Element id=load-data
Wait Until Element Is Not Visible css=.spinner timeout=30s
Wait Until Element Is Visible css=.data-table
Wait Until Element Count Is Greater Than css=.data-row 0Table Cell Interaction
*** Keywords ***
Click Table Cell
[Arguments] ${table_id} ${row} ${col}
Click Element xpath=//table[@id='${table_id}']//tr[${row}]//td[${col}]
Get Table Cell Value
[Arguments] ${table_id} ${row} ${col}
${text}= Get Text xpath=//table[@id='${table_id}']//tr[${row}]//td[${col}]
RETURN ${text}Screenshot Capture
Capture Page Screenshot
Capture Page Screenshot ${OUTPUT_DIR}/screenshot.png
Capture Element Screenshot css=.error-panel error.pngJavaScript Execution
Execute JavaScript window.scrollTo(0, document.body.scrollHeight)
${result}= Execute JavaScript return document.title
Execute JavaScript arguments[0].click() ARGUMENTS ${element}When to Load Additional References
Load specific reference files based on task requirements:
| Task | Reference File |
|---|---|
| Complex locator strategies | references/locators.md |
| Timing and wait patterns | references/waiting-strategies.md |
| Complete keyword list | references/keywords-reference.md |
| WebDriver configuration | references/webdriver-setup.md |
| Multiple windows/tabs | references/frames-windows.md |
| JavaScript interactions | references/javascript-execution.md |
| Screenshot/logging | references/screenshots-logs.md |
| Debugging test failures | references/troubleshooting.md |
Example Test Structure
*** Settings ***
Library SeleniumLibrary timeout=10s
Suite Setup Open Browser ${URL} chrome
Suite Teardown Close All Browsers
Test Setup Go To ${URL}
*** Variables ***
${URL} https://example.com
${BROWSER} chrome
*** Test Cases ***
User Can Login With Valid Credentials
[Documentation] Verify successful login flow
Wait Until Element Is Visible id=username
Input Text id=username testuser
Input Password id=password testpass
Click Button id=login
Wait Until Page Contains Welcome
Element Should Be Visible css=.dashboard
*** Keywords ***
Open Login Page
Go To ${URL}/login
Wait Until Element Is Visible id=username