From rf-agentskills
Generates Robot Framework tests using SeleniumLibrary for Selenium WebDriver browser automation, web UI testing, form interactions, multi-window/frames handling, and JavaScript execution.
npx claudepluginhub manykarim/robotframework-agentskills --plugin rf-agentskillsThis skill uses the workspace's default tool permissions.
Create browser automation tests using SeleniumLibrary with Selenium WebDriver.
assets/examples/basic-web-test.robotassets/examples/form-handling.robotassets/examples/multi-window.robotassets/examples/selenium-grid.robotassets/examples/wait-patterns.robotreferences/frames-windows.mdreferences/javascript-execution.mdreferences/keywords-reference.mdreferences/locators.mdreferences/screenshots-logs.mdreferences/troubleshooting.mdreferences/waiting-strategies.mdreferences/webdriver-setup.mdGuides creation of Browser Library tests using Playwright-powered automation for web testing, covering locators, auto-waiting, assertions, iframes, Shadow DOM, and multi-tabs.
Creates, debugs, and runs Selenium WebDriver tests in Java with JUnit 5 and Maven. Implements Page Object Model, explicit waits, AssertJ assertions, screenshots, and multi-browser support (Chrome, Firefox, Edge).
Provides best practices for browser automation using Playwright and Puppeteer in web testing, scraping, and AI agents. Covers selectors, auto-waits, isolation, screenshots, and anti-detection.
Share bugs, ideas, or general feedback.
Create browser automation tests using SeleniumLibrary with Selenium WebDriver.
SeleniumLibrary provides browser automation using Selenium WebDriver. Unlike Browser Library, explicit waits are often required for reliable test execution.
pip install robotframework-seleniumlibrary
WebDriver binaries (chromedriver, geckodriver, etc.) must be in PATH. Selenium 4.6+ includes
Selenium Manager which handles driver downloads automatically, so executable_path and
webdriver-manager are often unnecessary with modern Selenium. For older versions:
pip install webdriver-manager
*** Settings ***
Library SeleniumLibrary timeout=10s implicit_wait=0s
| 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 |
# 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}
Open Browser ${URL} firefox
Open Browser ${URL} headless_firefox
Open Browser ${URL} firefox options=add_argument("--headless")
Open Browser ${URL} edge
Open Browser ${URL} headless_edge
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) |
Open Browser ${URL} chrome
Close Browser
Close All Browsers
Maximize Browser Window
Set Window Size 1920 1080
Go To ${URL}
Go Back
Go Forward
Reload Page
${url}= Get Location
${title}= Get Title
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
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
Select Checkbox id=agree
Unselect Checkbox id=newsletter
Select Radio Button gender male
${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
@{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)
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 depth
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=DISMISS
Choose File id=file-input /path/to/file.pdf
${cookie}= Get Cookie session_id
Add Cookie name=theme value=dark
Delete Cookie session_id
Delete All Cookies
Title Should Be Exact Page Title
Title Should Contain Partial Title
Wait Until Location Contains /dashboard timeout=10s
SeleniumLibrary does NOT auto-wait. Always use explicit 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
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
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
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
*** 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
*** 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
*** 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
*** 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}
Capture Page Screenshot
Capture Page Screenshot ${OUTPUT_DIR}/screenshot.png
Capture Element Screenshot css=.error-panel error.png
Execute JavaScript window.scrollTo(0, document.body.scrollHeight)
${result}= Execute JavaScript return document.title
Execute JavaScript arguments[0].click() ARGUMENTS ${element}
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 |
*** 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
| Need | Skill |
|---|---|
| Generate user keywords | keyword-builder |
| Generate test cases | testcase-builder |
| Design resource file layout | resource-architect |
| Search for keywords across libraries | libdoc-search |
| Explain keyword arguments in detail | libdoc-explain |
| Parse test results from output.xml | results |