agentleFS
LambdaTestLambdaTest/agent-skills/lettuce-skill/SKILL.md

lettuce-skill

Skill387 starsChanged 3 days agoMITView on GitHub

Generates Lettuce BDD tests for Python with feature files and step definitions. Note: Lettuce is legacy/unmaintained; consider Behave for new projects. Use when user specifically mentions "Lettuce". Triggers on: "Lettuce", "lettuce test", "lettuce BDD".

  • Installs packages
Files
SKILL.md

Lettuce BDD Skill (Legacy)

Note: Lettuce is largely unmaintained. For new Python BDD projects, use Behave instead.

Core Patterns

Feature File (features/login.feature)

Feature: User Login
  Scenario: Successful login
    Given I navigate to the login page
    When I enter "user@test.com" as email
    And I enter "password123" as password
    And I click login
    Then I should see the dashboard

  Scenario: Invalid login
    Given I navigate to the login page
    When I enter "bad@test.com" as email
    And I enter "wrong" as password
    And I click login
    Then I should see "Invalid credentials"

Step Definitions (features/steps.py)

from lettuce import step, world
from selenium import webdriver
from selenium.webdriver.common.by import By

@step(r'I navigate to the login page')
def navigate_to_login(step):
    world.browser = webdriver.Chrome()
    world.browser.get(world.base_url + '/login')

@step(r'I enter "([^"]*)" as email')
def enter_email(step, email):
    el = world.browser.find_element(By.ID, 'email')
    el.clear()
    el.send_keys(email)

@step(r'I enter "([^"]*)" as password')
def enter_password(step, password):
    el = world.browser.find_element(By.ID, 'password')
    el.clear()
    el.send_keys(password)

@step(r'I click login')
def click_login(step):
    world.browser.find_element(By.CSS_SELECTOR, 'button[type="submit"]').click()

@step(r'I should see the dashboard')
def see_dashboard(step):
    assert '/dashboard' in world.browser.current_url

@step(r'I should see "([^"]*)"')
def see_text(step, text):
    assert text in world.browser.page_source

Terrain (Setup/Teardown — terrain.py)

from lettuce import before, after, world

@before.all
def setup():
    world.base_url = 'http://localhost:3000'

@before.each_scenario
def before_scenario(scenario):
    pass

@after.each_scenario
def cleanup(scenario):
    if hasattr(world, 'browser'):
        world.browser.quit()

@after.all
def teardown(total):
    print(f"Ran {total.scenarios_ran} scenarios")

Setup: pip install lettuce selenium

Run: lettuce or lettuce features/login.feature

Cloud Execution on TestMu AI

Set environment variables: LT_USERNAME, LT_ACCESS_KEY

# terrain.py
from selenium import webdriver
import os

@before.all
def setup():
    lt_options = {
        "user": os.environ["LT_USERNAME"],
        "accessKey": os.environ["LT_ACCESS_KEY"],
        "build": "Lettuce Build",
        "platformName": "Windows 11",
        "video": True,
        "console": True,
    }
    options = webdriver.ChromeOptions()
    options.set_capability("LT:Options", lt_options)
    world.browser = webdriver.Remote(
        command_executor=f"https://{os.environ['LT_USERNAME']}:{os.environ['LT_ACCESS_KEY']}@hub.lambdatest.com/wd/hub",
        options=options,
    )

Migration: Consider switching to behave for active maintenance

Deep Patterns

For advanced patterns, debugging guides, CI/CD integration, and best practices, see reference/playbook.md.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.