Geb Browser Automation Test Generator
Geb test generation with jQuery DSL and page objects
❌ Writing reliable browser automation tests requires tedious manual setup and page object management across multiple test files.
✅ Generate complete Geb browser automation tests with Spock integration and page object patterns ready to execute.
- ✓Generates Geb Spock tests in Groovy automatically
- ✓Implements page object pattern for maintainable tests
- ✓jQuery-like content DSL for element selection
- ✓Includes test fixtures and setup code
- ✓Ready for TestMu cloud execution
👁 3 views · 📦 0 installs
Free to install — no account needed
Copy the command below and paste into your agent.
Instant access • No coding needed • No account needed
What you get in 5 minutes
- Full skill code ready to install
- Works with 4 AI agents
- Lifetime updates included
Run this helper
Answer a few questions and let this helper do the work.
▸Advanced: use with your AI agent
Description
--- name: geb-skill description: > Generates Geb browser automation tests in Groovy with Spock integration. jQuery-like content DSL and page object pattern. Use when user mentions "Geb", "Groovy test", "GebSpec", "Browser.drive". Triggers on: "Geb", "GebSpec", "Groovy browser test", "Browser.drive". languages: - Groovy category: e2e-testing license: MIT metadata: author: TestMu AI version: "1.0" --- # Geb Automation Skill For TestMu AI cloud execution, see [reference/cloud-integration.md](reference/cloud-integration.md) and [shared/testmu-cloud-reference.md](../shared/testmu-cloud-reference.md). ## Core Patterns ### Basic Test (Spock) ```groovy import geb.spock.GebSpec class LoginSpec extends GebSpec { def "login with valid credentials"() { when: to LoginPage emailInput.value("[email protected]") passwordInput.value("password123") loginButton.click() then: at DashboardPage welcomeMessage.text().contains("Welcome") } def "login shows error for invalid credentials"() { when: to LoginPage emailInput.value("[email protected]") passwordInput.value("wrong") loginButton.click() then: at LoginPage errorMessage.displayed errorMessage.text().contains("Invalid") } } ``` ### Page Objects ```groovy class LoginPage extends geb.Page { static url = "/login" static at = { title == "Login" } static content = { emailInput { $("#email") } passwordInput { $("#password") } loginButton { $("button[type='submit']") } errorMessage(required: false) { $(".error") } } } class DashboardPage extends geb.Page { static url = "/dashboard" static at = { $(".dashboard").displayed } static content = { welcomeMessage { $(".welcome") } userName { $(".user-name") } } } ``` ### Navigator API ```groovy $("css-selector") $("div", class: "active") $("input", name: "email") $("div.items li", 0) // First match $("div.items li").size() // Count // Actions element.click() element.value("text") element << "text" // Append text element.text() element.displayed element.@href // Attribute ``` ### Cloud: `driver = new RemoteWebDriver(new URL(gridUrl), caps)` ## Setup: Gradle with `geb-spock` and `selenium-support` dependencies ### Cloud Execution on TestMu AI Set environment variables: `LT_USERNAME`, `LT_ACCESS_KEY` ```groovy // GebConfig.groovy environments { lambdatest { driver = { def ltOptions = [ user: System.getenv("LT_USERNAME"), accessKey: System.getenv("LT_ACCESS_KEY"), build: "Geb Build", name: "Geb Test", platformName: "Windows 11", video: true, console: true, network: true, ] def caps = new ChromeOptions() caps.setCapability("LT:Options", ltOptions) new RemoteWebDriver( new URL("https://hub.lambdatest.com/wd/hub"), caps) } } } ``` Run: `./gradlew test -Dgeb.env=lambdatest` ## Run: `./gradlew test` ## Deep Patterns See `reference/playbook.md` for production-grade patterns: | Section | What You Get | |---------|-------------| | §1 Project Setup | build.gradle, GebConfig.groovy, environments, waiting config | | §2 Page Objects | Content DSL, at checks, modules for reusable components | | §3 Spec Tests | Spock integration, data-driven with @Unroll, @Stepwise flows | | §4 Waiting & Async | Waiting presets, JavaScript interaction, alerts/confirms | | §5 Advanced Patterns | File upload/download, windows, frames, custom extensions | | §6 API Testing | REST API specs with Groovy JsonSlurper | | §7 CI/CD Integration | GitHub Actions with headless Chrome, Gradle caching | | §8 Debugging Table | 12 common problems with causes and fixes | | §9 Best Practices | 14-item Geb testing checklist |
Security Status
Verified
Manually verified by security team
Related AI Tools
More Grow Business tools you might like
codex-collab
FreeUse when the user asks to invoke, delegate to, or collaborate with Codex on any task. Also use PROACTIVELY when an independent, non-Claude perspective from Codex would add value — second opinions on code, plans, architecture, or design decisions.
Rails Upgrade Analyzer
FreeAnalyze Rails application upgrade path. Checks current version, finds latest release, fetches upgrade notes and diffs, then performs selective upgrade preserving local customizations.
Asta MCP — Academic Paper Search
FreeDomain expertise for Ai2 Asta MCP tools (Semantic Scholar corpus). Intent-to-tool routing, safe defaults, workflow patterns, and pitfall warnings for academic paper search, citation traversal, and author discovery.
Hand Drawn Diagrams
FreeCreate hand-drawn Excalidraw diagrams, flows, explainers, wireframes, and page mockups. Default to monochrome sketch output; allow restrained color only for page mockups when the user explicitly wants webpage-like fidelity.
Move Code Quality Checker
FreeAnalyzes Move language packages against the official Move Book Code Quality Checklist. Use this skill when reviewing Move code, checking Move 2024 Edition compliance, or analyzing Move packages for best practices. Activates automatically when working
Claude Memory Kit
Free"Persistent memory system for Claude Code. Your agent remembers everything across sessions and projects. Two-layer architecture: hot cache (MEMORY.md) + knowledge wiki. Safety hooks prevent context loss. /close-day captures your day in one command. Z