Skip to content

Instantly share code, notes, and snippets.

@mkutz
Last active April 26, 2019 15:45
Show Gist options
  • Save mkutz/58d3ae2f07c8c519c8900ab5b25f5e87 to your computer and use it in GitHub Desktop.
Save mkutz/58d3ae2f07c8c519c8900ab5b25f5e87 to your computer and use it in GitHub Desktop.
Standalone script using Geb to automate a browser
#!/usr/bin/env groovy
@Grab("org.gebish:geb-core:2.3.1")
@Grab("io.github.bonigarcia:webdrivermanager:3.4.0")
@Grab("org.seleniumhq.selenium:selenium-java:3.141.59")
@Grab("ch.qos.logback:logback-classic:1.2.3")
import geb.Browser
import geb.Configuration
import groovy.cli.OptionField
import groovy.cli.picocli.CliBuilder
import io.github.bonigarcia.wdm.WebDriverManager
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
import org.openqa.selenium.firefox.FirefoxDriver
import org.openqa.selenium.firefox.FirefoxOptions
import org.slf4j.Logger
import org.slf4j.LoggerFactory
Logger log = LoggerFactory.getLogger(this.class)
@OptionField(shortName = "h", description = "display usage")
boolean help
@OptionField(shortName = "b", description = "browser to be used", defaultValue = "firefox")
String browser
@OptionField(shortName = "m", description = "wait for additional manual actions")
boolean manual
@OptionField(description = "run the browser in headless mode")
boolean headless
CliBuilder cli = new CliBuilder(name: "${this.class}")
cli.parseFromInstance(this, args)
if (help) {
cli.usage()
System.exit(0)
}
log.info("Setting up the browser…")
Closure<WebDriver> driverClosure
switch (browser) {
case ["chrome", "c"]:
WebDriverManager.chromedriver().setup()
driverClosure = { new ChromeDriver(new ChromeOptions(headless: headless)) }
break
case ["firefox", "ff"]:
WebDriverManager.firefoxdriver().setup()
driverClosure = { new FirefoxDriver(new FirefoxOptions(headless: headless)) }
break
default:
log.error("Unknown browser \"${browser}\"")
System.exit(1)
break
}
log.info("…done")
log.info("Executing automated steps…")
Browser.drive(new Configuration(driver: driverClosure)) {
go "http://gebish.org"
assert title == "Geb - Very Groovy Browser Automation"
}
log.info("…done")
if (manual && !headless) {
System.out << "\n\nPress enter when you're done…"
System.console().readLine()
}
System.exit(0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment