Sauce Labs
All commands are only supported on Chrome using Sauce Labs Extended Debugging capabilities. You can enable these by setting the following Sauce options:
{
browserName: 'Chrome',
browserVersion: 'latest',
platformName: 'Windows 10',
'sauce:options': {
extendedDebugging: true
}
}
getPageLogs
Get webpage specific log information based on the last page load.
Sauce Labs command. More details can be found in the official protocol docs.
Usage
browser.getPageLogs(type)
Parameters
Name | Type | Details |
---|---|---|
type | string | log type (e.g. sauce:network', 'sauce:performance') |
Examples
- Asynchronous Mode
- Synchronous Mode
// Get Network Logs
console.log(browser.getPageLogs('sauce:network'));
/**
* outputs:
* [{
* "url": "https://app.saucelabs.com/dashboard",
* "statusCode": 200,
* "method": "GET",
* "requestHeaders": {
* ...
* },
* "responseHeaders": {
* ...
* },
* "timing": {
* ...
* }
* }, {,
* ...
* }]
*/
// Get Performance Logs (needs capturePerformance capability see: https://wiki.saucelabs.com/display/DOCS/Measure+Page+Load+Performance+Using+Test+Automation#MeasurePageLoadPerformanceUsingTestAutomation-EnableYourScript)
console.log(browser.getPageLogs('sauce:performance'));
/**
* outputs:
* {
* "speedIndex": 1472.023,
* "timeToFirstInteractive": 1243.214,
* "firstMeaningfulPaint": 892.643,
* ...
* }
*/
// Get Network Logs
console.log(browser.getPageLogs('sauce:network'));
/**
* outputs:
* [{
* "url": "https://app.saucelabs.com/dashboard",
* "statusCode": 200,
* "method": "GET",
* "requestHeaders": {
* ...
* },
* "responseHeaders": {
* ...
* },
* "timing": {
* ...
* }
* }, {,
* ...
* }]
*/
// Get Performance Logs (needs capturePerformance capability see: https://wiki.saucelabs.com/display/DOCS/Measure+Page+Load+Performance+Using+Test+Automation#MeasurePageLoadPerformanceUsingTestAutomation-EnableYourScript)
console.log(browser.getPageLogs('sauce:performance'));
/**
* outputs:
* {
* "speedIndex": 1472.023,
* "timeToFirstInteractive": 1243.214,
* "firstMeaningfulPaint": 892.643,
* ...
* }
*/
caution
Synchronous Mode will depcrecated with Node.js v16. With an update to the
underlying Chromium version it became technically impossible to provide the
same synchronous behavior. We recommend to start transition to asynchronous
command execution. For more information, see our <a href="https://github.com/webdriverio/webdriverio/discussions/6702">RFC</a>.
Returns
- <object> log: log output of desired type (see example)
throttleNetwork
With network conditioning you can test your site on a variety of network connections, including Edge, 3G, and even offline. You can throttle the data throughput, including the maximum download and upload throughput, and use latency manipulation to enforce a minimum delay in connection round-trip time (RTT).
Sauce Labs command. More details can be found in the official protocol docs.
Usage
browser.throttleNetwork(condition)
Parameters
Name | Type | Details |
---|---|---|
condition | string, object | network condition to set (e.g. 'online', 'offline', 'GPRS', 'Regular 2G', 'Good 2G', 'Regular 3G', 'Good 3G', 'Regular 4G', 'DSL', 'Wifi') |
Examples
- Asynchronous Mode
- Synchronous Mode
// predefined network condition
browser.throttleNetwork('offline')
// custom network condition
browser.throttleNetwork({
download: 1000,
upload: 500,
latency: 40'
})
// predefined network condition
browser.throttleNetwork('offline')
// custom network condition
browser.throttleNetwork({
download: 1000,
upload: 500,
latency: 40'
})
caution
Synchronous Mode will depcrecated with Node.js v16. With an update to the
underlying Chromium version it became technically impossible to provide the
same synchronous behavior. We recommend to start transition to asynchronous
command execution. For more information, see our <a href="https://github.com/webdriverio/webdriverio/discussions/6702">RFC</a>.
throttleCPU
You can throttle the CPU in DevTools to understand how your page performs under that constraint.
Sauce Labs command. More details can be found in the official protocol docs.
Usage
browser.throttleCPU(rate)
Parameters
Name | Type | Details |
---|---|---|
rate | number | Rate on how much the CPU should get throttled. |
Examples
- Asynchronous Mode
- Synchronous Mode
// throttle CPU and make it run 4x slower
browser.throttleCPU(4)
// reset CPU throttling
browser.throttleCPU(0)
// throttle CPU and make it run 4x slower
browser.throttleCPU(4)
// reset CPU throttling
browser.throttleCPU(0)
caution
Synchronous Mode will depcrecated with Node.js v16. With an update to the
underlying Chromium version it became technically impossible to provide the
same synchronous behavior. We recommend to start transition to asynchronous
command execution. For more information, see our <a href="https://github.com/webdriverio/webdriverio/discussions/6702">RFC</a>.
interceptRequest
Allows modifying any request made by the browser. You can blacklist, modify, or redirect these as required for your tests.
Sauce Labs command. More details can be found in the official protocol docs.
Usage
browser.interceptRequest(rule)
Parameters
Name | Type | Details |
---|---|---|
rule | object | A rule describing the request interception. |
Examples
- Asynchronous Mode
- Synchronous Mode
// redirect a request
browser.interceptRequest({
url: 'https://saucelabs.com',
redirect: 'https://google.com'
})
// Blacklist requests to 3rd party vendors
browser.interceptRequest({
url: 'https://api.segment.io/v1/p',
error: 'Failed'
})
// Modify requests to REST API (Mock REST API response)
browser.interceptRequest({
url: 'http://sampleapp.appspot.com/api/todos',
response: {
headers: {
'x-custom-headers': 'foobar'
},
body: [{
title: 'My custom todo',
order: 1,
completed: false,
url: 'http://todo-backend-express.herokuapp.com/15727'
}]
}
})
// redirect a request
browser.interceptRequest({
url: 'https://saucelabs.com',
redirect: 'https://google.com'
})
// Blacklist requests to 3rd party vendors
browser.interceptRequest({
url: 'https://api.segment.io/v1/p',
error: 'Failed'
})
// Modify requests to REST API (Mock REST API response)
browser.interceptRequest({
url: 'http://sampleapp.appspot.com/api/todos',
response: {
headers: {
'x-custom-headers': 'foobar'
},
body: [{
title: 'My custom todo',
order: 1,
completed: false,
url: 'http://todo-backend-express.herokuapp.com/15727'
}]
}
})
caution
Synchronous Mode will depcrecated with Node.js v16. With an update to the
underlying Chromium version it became technically impossible to provide the
same synchronous behavior. We recommend to start transition to asynchronous
command execution. For more information, see our <a href="https://github.com/webdriverio/webdriverio/discussions/6702">RFC</a>.
assertPerformance
Assert against the performance baseline of your app.
Sauce Labs command. More details can be found in the official protocol docs.
Usage
browser.assertPerformance(name, metrics)
Parameters
Name | Type | Details |
---|---|---|
name | string | Name of the job you created your baseline with. |
metrics optional | string[] | Name of metrics you want to assert agains the baseline. |
Example
- Asynchronous Mode
- Synchronous Mode
// test performance for a page
browser.url('https://webdriver.io')
const hasRegression = browser.assertPerformance({
name: 'my performance test', // make sure that the name is also set in the sauce options in your capabilities
metrics: ['score', 'firstPaint']
})
// test performance for a page
browser.url('https://webdriver.io')
const hasRegression = browser.assertPerformance({
name: 'my performance test', // make sure that the name is also set in the sauce options in your capabilities
metrics: ['score', 'firstPaint']
})
caution
Synchronous Mode will depcrecated with Node.js v16. With an update to the
underlying Chromium version it became technically impossible to provide the
same synchronous behavior. We recommend to start transition to asynchronous
command execution. For more information, see our <a href="https://github.com/webdriverio/webdriverio/discussions/6702">RFC</a>.
Returns
- <object> hasRegression: An object containing the result as well as metrics about the result.
jankinessCheck
Perform a scroll test that evaluates the jankiness of the application.
Sauce Labs command. More details can be found in the official protocol docs.
Usage
browser.jankinessCheck()
Example
- Asynchronous Mode
- Synchronous Mode
// test performance for a page
browser.url('https://webdriver.io')
browser.jankinessCheck()
// test performance for a page
browser.url('https://webdriver.io')
browser.jankinessCheck()
caution
Synchronous Mode will depcrecated with Node.js v16. With an update to the
underlying Chromium version it became technically impossible to provide the
same synchronous behavior. We recommend to start transition to asynchronous
command execution. For more information, see our <a href="https://github.com/webdriverio/webdriverio/discussions/6702">RFC</a>.
Returns
- <object> testResults: An object containing the score as well as metrics around how smooth the UX of the page was during the test.
mockRequest
Mocks a network resource.
Sauce Labs command. More details can be found in the official protocol docs.
Usage
browser.mockRequest(url, filterOptions)
Parameters
Name | Type | Details |
---|---|---|
url | string | URL glob to match url to mock. |
filterOptions optional | object | Additional filter options for url to mock (e.g. headers, method). |
Returns
- <object> mockId: An object containing the id of a mock resource.
getMockCalls
Receive request information about requests that match the mocked resource.
Sauce Labs command. More details can be found in the official protocol docs.
Usage
browser.getMockCalls(mockId)
Parameters
Name | Type | Details |
---|---|---|
mockId | String | the id of a mock |
Returns
- <object> requests: A list of request information.
clearMockCalls
Clear list of mock calls.
Sauce Labs command. More details can be found in the official protocol docs.
Usage
browser.clearMockCalls(mockId, restore)
Parameters
Name | Type | Details |
---|---|---|
mockId | String | the id of a mock |
restore optional | boolean | Set to true if mock should be restored as well. |
respondMock
Respond if mock matches a specific resource.
Sauce Labs command. More details can be found in the official protocol docs.
Usage
browser.respondMock(mockId, payload)
Parameters
Name | Type | Details |
---|---|---|
mockId | String | the id of a mock |
payload optional | object | Information on mock response. |