skills/manykarim/robotframework-agentskills/robotframework-selenium-skill

robotframework-selenium-skill

SKILL.md

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. 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

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 (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_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)

  1. id - Unique, fastest
  2. data-testid - Stable, test-specific
  3. name - Often stable
  4. css - Flexible, readable
  5. xpath - Powerful but fragile
  6. 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

Windows 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 depth

Alerts 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=DISMISS

File Upload

Choose File    id=file-input    /path/to/file.pdf

Cookies

${cookie}=    Get Cookie        session_id
Add Cookie    name=theme    value=dark
Delete Cookie    session_id
Delete All Cookies

Title Verification

Title Should Be          Exact Page Title
Title Should Contain     Partial Title

Location (URL) Waits

Wait Until Location Contains    /dashboard    timeout=10s

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
Weekly Installs
10
GitHub Stars
9
First Seen
Feb 11, 2026
Installed on
gemini-cli9
github-copilot9
codex9
kimi-cli9
cursor9
amp9