The Sauce Labs Cookbook

Sauce Headless

Front End Performance Testing


External Resources

More Info

Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »


Extended Debugging Required

This feature is only available for customers that are executing their tests on Chrome with Extended Debugging enabled. Click here to learn more

Custom Commands are in Beta

The feature is currently in beta and some commands might not work as expected. Please at your own risk.

As part of our effort to help our customers improve the quality and coverage of their tests, we have released a series new custom commands. Once extended debugging is enabled users should be able to invoke custom commands of their choice by using a javascript executor command. 

Custom Commands

Intercepting Network Requests

Allows modifying any request made by the browser. The customer can blacklist, modify or redirect these for testing needs.


  • Blacklist requests to 3rd party vendors
  • Modify requests to REST API (Mock REST API response)
  • Redirect certain parts of the app 
  • Insert/change headers
JavaScript ExecutorRequired ParametersSample Code

Request Parameters

  • url: a string that matches outgoing request URL (wildcards are supported, e.g.* would match all v1 rest API requests)
  • redirect | respond: action on request
    • redirect: string representing an absolute url that the original request gets redirected to
    • respond:object containing:
    • statusCode: number representing the request status
      headers: list of key/value pairs that is set as header variables
      rawResponse: actual response payload as string
driver.execute_script('sauce:intercept', {
    "url": "",
    "redirect": ""


Python example
driver.execute_script('sauce:intercept', {
    "url": "",
    "redirect": ""
# or
driver.execute_script('sauce:intercept', {
    "url": "",
    "respond": {
        "statusCode": 200,
        "headers": {
            "etag": 3244224432,
            "Cookie: "foo=bar",
        "rawResponse": "{\"username\":\"..."

Throttle Network Capabilities

Network conditioning allows the customer to test his site on a variety of network connections, including Edge, 3G, and even offline. It throttles the maximum download and upload throughput (rate of data transfer). Latency manipulation enforces a minimum delay in connection round-trip time (RTT).

JavaScript ExecutorRequired ParametersSample Code
  • Request Parameters
    • condition: can be a string or object representing the network condition of the browser
      • if a string is detected: the customer is choosing one of the predefined profiles, e.g.

        where the columns in this order specify the profile name, download speed in kb/s, upload speed in kb/s and delay in connection round-trip time (RTT)
      • if an object is detected: the customer is defining a custom profile, the object requires to be the following format:
        • upload
        • download
        • latency
driver.execute_script('sauce:throttle', {
	"condition": "GPRS"
# or
driver.execute_script('sauce:throttle', {
	"condition": {
		"download": 1000,
		"upload": 500,
		"latency": 40

Custom Log Types

Network Timing Log

By using a custom sauce log type called "timing" a user can receive page metrics on network timings defined by the PerformanceTiming. All timings are relative to "navigationStart" for simplification purposes (absolute timings as described in the API are useless for the cusomer for testing purposes).

JavaScript ExecutorResponse
Sample response
    "navigationStart": 0
    "unloadEventStart": -1
    "unloadEventEnd": -1
    "redirectStart": 0
    "redirectEnd": 312
    "fetchStart": 312
    "domainLookupStart": 312
    "domainLookupEnd": 312
    "connectStart": 312
    "connectEnd": 312
    "secureConnectionStart": -1
    "requestStart": 39
    "responseStart": 309
    "responseEnd": 312
    "domLoading": 316
    "domInteractive": 359
    "domContentLoadedEventStart": 560
    "domContentLoadedEventEnd": 560
    "domComplete": 622
    "loadEventStart": 622
    "loadEventEnd": 622

Application Metrics Log

By using a custom sauce log type called "metrics" a user can receive application related metrics. All timings metrics are similar to the timings log relative to the page load time.


JavaScript ExecutorResponse
Sample response
    "timestamp": 35037.202627,
    "audioHandlers": 0,
    "documents": 3,
    "frames": 2,
    "jsEventListeners": 63,
    "layoutObjects": 435,
    "nodes": 506,
    "resources": 11,
    "layoutCount": 2,
    "recalcStyleCount": 5,
    "layoutDuration": 0.0860430000029737,
    "recalcStyleDuration": 0.00374899999587797,
    "scriptDuration": 0.0770069999925909,
    "taskDuration": 0.297364000020025,
    "jsHeapUsedSize": 6295344,
    "jsHeapTotalSize": 10891264,
    "firstMeaningfulPaint": 35036.03356,
    "domContentLoaded": 35036.122972,
    "navigationStart": 35035.833805

Network Log

By using a custom sauce log type called "network" a user can receive comprehensive information on all network request being made by the page he is currently on.

JavaScript ExecutorResponse
Sample response
    "url": "",
    "requests": [{
        "url": "",
        "statusCode": 200,
        "method": "GET",
        "requestHeaders": {
        "responseHeaders": {
        "timing": {
            "blocked": -1,
            "connect": -1,
            "dns": -1,
            "receive": 0,
            "send": 0,
            "ssl": -1,
            "wait": 0
    }, {
  • No labels