Skip to content

Execute Actions

When taking a screenshot of your Application, you are often eager to set it up in a specific state before taking the screenshot. We support this by allowing you to execute a set of automated actions before the screenshot is captured. And if you think about it, this is essentially what is needed for password-gated Web Applications where you need to log in to see the feature you want to capture.

The bare minimum required to take an Action

POST /screenshot

Request

json
{
  "elementSelector": [
    [
      "xpath//html/body/div[1]/div[2]/section/main/section"
    ]
  ],
  "steps": [
    {
      "type": "navigate",
      "url": "https://demo.baremetrics.com/stats/mrr"
    }
  ]
}

Steps reference:

Typically, before taking a screenshot, you might need to log in to a website, navigate to a specific page and click on a link. The screenshot API allows you to compose a series of steps that mimic the behavior of a user browsing.

The following step types can be combined to build a user flow before capturing a screenshot:

Step: change

Allows you to change the input field e.g when filling an email or password

json
{
  "type": "change",
  "value": "hello@example.org",
  "selectors": [
    "input#email"
  ]
}

Step: click

Click on an html element e.g a button or a hyperlink.

json
{
  "type": "click",
  "selectors": [
    "button.m-r-small > span > span",
    "xpath///*[@id=\"content\"]/div/span"
  ]
}

Step: hover

Hover over an html element e.g a menu item or a button

json
 {
  "type": "hover",
  "selectors": [
    ".menu#ul li:nth-child(1)"
  ]
}

Step: keyDown

A keyDown event is fired when a key is pressed.

json
{
  "type": "keyDown",
  "key": "Enter"
}

The key field can also support an array of keys to type.

json
{
  "type": "keyDown",
  "key": [
    "KeyH",
    "KeyE",
    "KeyL",
    "KeyL",
    "KeyO"
  ]
}

The list of key values can be found here (third-column: Code)

Step: keyUp

A keyUp event is fired when a key is released.

json
{
  "type": "keyUp",
  "key": "Enter"
}

The key field can also support an array of keys to type.

json
{
  "type": "keyUp",
  "key": [
    "KeyH",
    "KeyE",
    "KeyL",
    "KeyL",
    "KeyO"
  ]
}

The list of key values can be found here (third-column: Code)

Step: write

The write step mimics continuous typing of texts with a 200ms delay in between each typed character. This is useful in cases where you are typing in a search box that dynamically shows results as you are typing.

json
{
  "type": "write",
  "text": "Hello World",
  "selectors": [
    "input#search"
  ]
}

Step: navigate

Navigates to a specific web page.

json
{
  "type": "navigate",
  "url": "https://example.org"
}

Step: waitFor

Allows you to pause for x milliseconds.

json
{
  "type": "waitFor",
  "value": 3000
}

Step: waitForElement

This step wait for the presence (or absence) of a number of elements identified by a selector. For example, the following step waits for the presence of css class .button#login.

json
{
  "type": "waitForElement",
  "selectors": [
    ".button#login"
  ],
  "visible": true
}

Step: hideElement

This step hides an HTML element by setting its CSS property to display: none. You can either specify a CSS selector or an XPath expression.

json
 {
  "type": "hideElement",
  "selectors": [
    "body > div > h1",
    "xpath//html/body/div/header"
  ]
}

Step: removeElement

This step completely removes the HTML element from the DOM, which will eventually hide the element. The main difference compared to a hideElement step is that this will cause a change in the layout. You can either specify a CSS selector or an XPath expression.

json
 {
  "type": "removeElement",
  "selectors": [
    "body > div > h1",
    "xpath//html/body/div/header"
  ]
}

Usage

Below is a series of examples demonstrating various properties of the screenshot API endpoint.

Example 1: Login to baremetrics.com, capture a screenshot and add some styling.

json
{
  "elementSelector": [
    "body > div.app-shell > div > div"
  ],
  "prefersColorScheme": "light",
  "responseType": "image",
  "deviceScaleFactor": 1,
  "margin": 10,
  "backgroundColor": "purple",
  "borderRadius": 25,
  "steps": [
    {
      "type": "navigate",
      "url": "https://app.baremetrics.com/users/sign_in"
    },
    {
      "type": "change",
      "value": "hyder+trial1@launchbrightly.com",
      "selectors": [
        "#signin-email-address",
        "xpath///*[@id=\"signin-email-address\"]"
      ]
    },
    {
      "type": "change",
      "value": "12345678",
      "selectors": [
        "aria/Password",
        "xpath///*[@id=\"signin-password\"]"
      ]
    },
    {
      "type": "click",
      "waitForNavigation": 1000,
      "selectors": [
        "aria/Sign in[role=\"button\"]",
        "#new_user > button",
        "xpath///*[@id=\"new_user\"]/button"
      ]
    },
    {
      "type": "navigate",
      "url": "https://app.baremetrics.com/setup"
    }
  ]
}