Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including pumlhorse-browser with all npm packages installed. Try it out:

var pumlhorseBrowser = require("pumlhorse-browser")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

pumlhorse-browser v0.1.0

Headless browser support for Pumlhorse

Pumlhorse-Browser: Automated UI testing in Pumlhorse

Pumlhorse-Browser is a module for Pumlhorse that allows automated UI testing. It uses Zombie as a headless browser, allowing you to write Pumlhorse tests against your websites!

Installing

npm install pumlhorse-browser

Usage

Here is a sample Pumlhorse script that opens a Pumlhorse sandbox and runs a script (so meta!)

name: Open Pumlhorse demo site
modules:
  - ui = pumlhorse-browser
steps:
  # Open the website
  - ui.open: https://pumlhorse-plain.glitch.me/
  # Find the "submit" button
  - button = ui.findFirst: button[type="submit"]
  # And click it
  - ui.click: $button
  # Check the log messages we got back
  - messages = ui.find: "#logs > li"
  - areEqual:
      expected: 2
      actual: $messages.length
  - isTrue: ${messages[0].textContent.endsWith('This is my script!')}
  - areEqual: 
      expected: ------------
      actual: $messages[1].textContent
  
  # Update the textarea for the script with a new script
  - ui.set:
      selector: "#pumlEditor"
      value: |
             name: A test script
             steps:
               - log: Hello there!
  - ui.click: $button
  - messages = ui.find: "#logs > li"
  - areEqual:
      expected: 4
      actual: $messages.length
  - isTrue: ${messages[2].textContent.endsWith('Hello there!')}
  - areEqual: 
      expected: ------------
      actual: $messages[3].textContent

Module functions

##
## Set up ##
##

# Sets the base URL
setBaseUrl: http://www.example.org
# Sets the proxy
setProxy: http://myproxy.com

##
## DOM actions ##
## Note: DOM objects are a read-only subset of properties, { attributes, classList, id, localName, name, prefix, textContent, value }
##

# Returns an array of all DOM objects that match the selector
domObjects = find: <css_selector>
# Returns the first DOM object that matches the selector
domObject = findFirst: <css_selector> 

##
## Browser Actions ##
## Note: selector_or_dom parameters can be a CSS selector or a DOM object
##

# Opens the provided URL
open: http://www.example.org/my_page
# Clicks an item on the page
click: <selector_or_dom>
# Updates a textarea or input value
set:
  selector: <text_selector_or_dom>
  value: new text value
# Checks a checkbox
check: <checkbox_selector_or_dom>
# Unchecks a checkbox
uncheck: <checkbox_selector_or_dom>
# Selects a radio button
choose: <radio_selector_or_dom>

# Selects an option in a dropdown that matches <option_text>
select:
  selector: <select_selector_or_dom>
  value: <option_text>
# Selects an option in a dropdown
select: <option_selector_or_dom>
# Unselects an option in a dropdown that matches <option_text>
unselect:
  selector: <select_selector_or_dom>
  value: <option_text>
# Unselects an option in a dropdown
unselect: <option_selector_or_dom>

# Attaches a file
attachFile:
  selector: <selector_or_dom>
  file:

# Waits until all events are complete
wait
# Wait a specific amount of time (e.g. "5000" and "5s" are both five seconds)
wait: <duration>

##
## Cookies
##

# Get a cookie ({ name, value, domain, path, secure, httpOnly, expires, max-age })
getCookie: <cookie_name>
setCookie:
  name: <cookie_name>
  value: <cookie_value> # Can be a string or an object corresponding to the properties described above

# Delete a cookie
deleteCookie: <cookie_name>
# Delete multiple cookies
deleteCookie:
  - <cookie_name_1>
  - <cookie_name_2>
  - <cookie_name_3>

##
## Assertions
##

# Assert that the current page has the given URL
isUrl: <url>
RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free