# Selenium

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

- **Type:** Skill
- **Install:** `agentstack add skill-manykarim-robotframework-agentskills-selenium`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [manykarim](https://agentstack.voostack.com/s/manykarim)
- **Installs:** 0
- **Category:** [Web & Browser](https://agentstack.voostack.com/c/web-and-browser)
- **Latest version:** 0.1.0
- **License:** Apache-2.0
- **Upstream author:** [manykarim](https://github.com/manykarim)
- **Source:** https://github.com/manykarim/robotframework-agentskills/tree/main/plugins/rf-agentskills/skills/selenium

## Install

```sh
agentstack add skill-manykarim-robotframework-agentskills-selenium
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# 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

```bash
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:

```bash
pip install webdriver-manager
```

## Library Import

```robotframework
*** 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

```robotframework
# 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

```robotframework
Open Browser    ${URL}    firefox
Open Browser    ${URL}    headless_firefox
Open Browser    ${URL}    firefox    options=add_argument("--headless")
```

### Edge

```robotframework
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

```robotframework
Open Browser         ${URL}    chrome
Close Browser
Close All Browsers
Maximize Browser Window
Set Window Size      1920    1080
```

### Navigation

```robotframework
Go To                ${URL}
Go Back
Go Forward
Reload Page
${url}=    Get Location
${title}=  Get Title
```

### Element Interaction

```robotframework
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

```robotframework
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

```robotframework
Select Checkbox      id=agree
Unselect Checkbox    id=newsletter
Select Radio Button  gender    male
```

### Getting Content

```robotframework
${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

```robotframework
@{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)

```robotframework
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

```robotframework
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

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

### Cookies

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

### Title Verification

```robotframework
Title Should Be          Exact Page Title
Title Should Contain     Partial Title
```

### Location (URL) Waits

```robotframework
Wait Until Location Contains    /dashboard    timeout=10s
```

## Waiting Keywords (Critical)

SeleniumLibrary does NOT auto-wait. Always use explicit waits.

### Element Waits

```robotframework
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

```robotframework
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

```robotframework
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

```robotframework
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

```robotframework
*** 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

```robotframework
*** 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

```robotframework
*** 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

```robotframework
*** 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

```robotframework
Capture Page Screenshot
Capture Page Screenshot    ${OUTPUT_DIR}/screenshot.png
Capture Element Screenshot    css=.error-panel    error.png
```

## JavaScript Execution

```robotframework
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

```robotframework
*** 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
```

## Companion Skills

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

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [manykarim](https://github.com/manykarim)
- **Source:** [manykarim/robotframework-agentskills](https://github.com/manykarim/robotframework-agentskills)
- **License:** Apache-2.0

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-manykarim-robotframework-agentskills-selenium
- Seller: https://agentstack.voostack.com/s/manykarim
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
