Build or update the BlueBubbles external channel plugin for Moltbot (extension package, REST...
npx skills add manykarim/robotframework-agentskills --skill "robotframework-selenium-skill"
Install specific skill from multi-skill repository
# Description
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.
# SKILL.md
name: robotframework-selenium-skill
description: 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.
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-seleniumlibrary
WebDriver binaries (chromedriver, geckodriver, etc.) must be in PATH or use webdriver-manager:
pip install webdriver-manager
Library Import
*** Settings ***
Library SeleniumLibrary timeout=10s implicit_wait=0s
Import Options
| Option | Default | Description |
|---|---|---|
| timeout | 5s | Default timeout for wait keywords |
| implicit_wait | 0s | Implicit wait (not recommended) |
| 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_edge
Locator 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 1080
Navigation
Go To ${URL}
Go Back
Go Forward
Reload Page
${url}= Get Location
${title}= Get Title
Element 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+a
Dropdowns
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 item1
Checkboxes and Radio Buttons
Select Checkbox id=agree
Unselect Checkbox id=newsletter
Select Radio Button gender male
Getting 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=.item
Waiting 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=.spinner
Text 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 Pending
Element 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 10
Verification 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=agree
Common 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 Welcome
Form 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 email
Wait 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 0
Table 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.png
JavaScript 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
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.