• /
  • Log in
  • Free account
Docs

Introduction to scripted browser monitors

You can use synthetic monitoring's scripted browsers to emulate and monitor a custom user experience by scripting browsers that navigate your website, take specific actions, and ensure specific elements are present. For a list of all available functions, see Scripted browser reference.

Scripted monitors are driven by Selenium WebDriverJS. Each time your script runs, New Relic creates a fully virtualized Selenium-driven Google Chrome browser that navigates your website and follows each step of the script. Synthetic monitoring includes an IDE-style script editor what suggests functions, locators, and other elements to simplify scripting.

Visit a URL

All scripts begin by specifying which URL the monitor should navigate to. To specify a URL, call $browser.get("url"):

$browser.get("https://mywebsite.com");

Sequence actions

Because WebDriverJS is asynchronous, scripting actions can sometimes execute out of order. To force script actions to execute in order, wrap each action in a then(function(){}) call:

$browser.get("https://my-website.com").then(function(){
    return $browser.findElement($driver.By.linkText("Configuration Panel"));
});

To connect multiple actions in sequence, wrap each action in a then(function(){}) call, and chain the calls together:

$browser.get("https://my-website.com").then(function(){
    return $browser.findElement($driver.By.linkText("Configuration Panel"));
}).then(function(){
    return $browser.findElement($driver.By.partialLinkText("Configuration Pa"));
});

Locate elements

Once you have specified a URL to monitor, you will usually want to locate a particular element on the page. Locating an element verifies its presence on the page, and also allows you to interact with page elements.

You can locate elements by their class, id, link text, name or even XPath. To find these attributes, use your browser's developer tools or view your website's source code. For a list of all locator functions, see Locators: Find page elements.

Interact with elements

Because a scripted monitor drives a real, Selenium-powered Google Chrome browser, scripted monitors can interact with page elements in the same way a user would. For example, the monitor can click a link, enter text in a search box, etc. For a list of available actions, see ActionSequence: Link multiple actions.

First, locate the page element, then call an interaction function:

Waiting and timeouts

Large page elements, such as images or complex dynamic content, can take a long time to load. This can cause your script to fail when the monitor attempts to interact with or locate an element that hasn't been loaded yet.

To avoid these issues, set wait conditions that will pause the script until the specified page element is present, or sequence actions manually. For a list of conditions, see Conditions: Pause and wait for conditions.

Important

After a maximum run time of three minutes, New Relic manually stops the script.

Log script results

You can also manually log monitor results to the script log. Use logging to troubleshoot a script: to discover which step of your script is failing, include a log function along with each key step in your script.

Unblock analytics services

Synthetics blocks popular analytics services' scripts from running by default. You can allow scripts to run for a specified service(s). This allows the service's scripts to run and collect data like it would for a real user.

//Allow Google Analytics scripts to run
$browser.addHostnameToWhitelist(hostnameArr: ['google-analytics.com']);

//Visit https://my-website.com
$browser.get('https://my-website.com');

Customize the user agent

You can customize the scripted browser's user agent to ensure any browser-specific fixes in your app are working properly, or to bypass a security mechanism in order to filter an internal site.

//Simulate Internet Explorer 10.6
$browser.addHeader('User-Agent', 'Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0');
//Visit http://httpbin.org/user-agent
$browser.get('http://httpbin.org/user-agent');

Important

This only spoofs the user-agent HTTP header for the request to the server. It does not change the value of navigator.userAgent.

Import optional modules

You can also import many popular Node.js modules to enhance your test suite, automate the insertion of test data, and simplify complex functions. For more information, see Importing Node.js modules.

For more help

If you need more help, check out these support and learning resources:

Docs
Create issueEdit page
Copyright © 2021 New Relic Inc.