A Tab is similar to a tab in a consumer browser. Each Tab drives an underlying document with its own page lifecycle and resources. Many of the tab functions are available from the SecretAgent object.
A default tab is provided in each Agent instance. Navigate by using the agent.goto method.
When a new window is "popped up" (ie, <a href="/new-place" target="_blank"), a tab will automatically be associated with the Agent instance. These can be discovered using the agent.tabs method, or waiting with agent.waitForNewTab().
Returns a CookieStorage instance to get/set/delete cookies in the mainFrameEnvironment of this tab.
Alias for tab.mainFrameEnvironment.cookieStorage.
CookieStorageReturns a reference to the document of the mainFrameEnvironment of this tab.
Alias for tab.mainFrameEnvironment.document.
SuperDocumentReturns a list of Frames loaded for this tab.
Promise<Frame[]>.An execution point that refers to a command run on this Agent instance (waitForElement, click, type, etc). Command ids can be passed to select waitFor* functions to indicate a starting point to listen for changes.
Promise<number>Returns a reference to the Storage object managing localStorage for the mainFrameEnvironment of this tab.
Alias for tab.mainFrameEnvironment.localStorage.
StorageReturns the FrameEnvironment representing the primary content of the loaded tab.
FrameEnvironment.Returns a reference to the Storage object managing sessionStorage for the mainFrameEnvironment of this tab.
Alias for tab.mainFrameEnvironment.sessionStorage.
StorageAn identifier for the tab.
Promise<number>The url of the active tab.
Promise<string>Returns a constructor for a Request object in the mainFrameEnvironment.
Alias for tab.mainFrameEnvironment.Request
RequestCloses the current tab only (will close the whole Agent instance if there are no open tabs).
PromisePerform a native "fetch" request in the mainFrameEnvironment context.
NOTE: You can work around Cross Origin Request (CORS) issues or change your request "origin" by running fetch from a different FrameEnvironment.
IRequestInput A Request object or url.IRequestInit? Optional request initialization parameters. Follows w3c specification.string, ArrayBuffer, null.Blob, FormData, ReadableStream, URLSearchParamsAlias for tab.mainFrameEnvironment.fetch
Promise<Response>const origin = 'https://dataliberationfoundation.org/';
const getUrl = 'https://dataliberationfoundation.org/mission';
await agent.goto(origin);
const response = await agent.fetch(getUrl);Http Post example with a body:
const origin = 'https://dataliberationfoundation.org/';
const postUrl = 'https://dataliberationfoundation.org/nopost';
await agent.goto(origin);
const response = await agent.fetch(postUrl, {
method: 'post',
headers: {
Authorization: 'Basic ZWx1c3VhcmlvOnlsYWNsYXZl',
},
body: JSON.stringify({
...params,
}),
});Get the FrameEnvironment object corresponding to the provided HTMLFrameElement or HTMLIFrameElement. Use this function to interface with the full environment of the given DOM element without cross-domain restrictions.
Alias for FrameEnvironment.getFrameEnvironment
Make this tab the activeTab within a browser, which directs many SecretAgent methods to this tab.
PromisePerform a native Window.getComputedStyle request in the current main FrameEnvironment - it returns an object containing the values of all CSS properties of an element, after applying active stylesheets and resolving any basic computation those values may contain. Individual CSS property values are accessed through APIs provided by the object, or by indexing with CSS property names.
Alias for tab.mainFrameEnvironment.getComputedStyle.
SuperElement An element loaded in this tab environment.string? Optional string specifying the pseudo-element to match (eg, ::before, ::after, etc). More information can be found on w3c.Promise<CssStyleDeclaration>await agent.goto('https://dataliberationfoundation.org');
const { document, getComputedStyle } = agent.activeTab;
const selector = document.querySelector('h1');
const style = await getComputedStyle(selector);
const opacity = await style.getProperty('opacity');Extract any publicly accessible javascript value from the current main FrameEnvironment context.
NOTE: This type of operation could potentially be snooped on by the hosting website as it must run in the main Javascript environment in order to access variables.
Alias for tab.mainFrameEnvironment.getJsValue.
stringPromise<SerializedValue>await agent.goto('https://dataliberationfoundation.org');
const navigatorAgent = await agent.activeTab.getJsValue(`navigator.userAgent`);Navigates to a previous url in the navigation history.
number. Optional timeout milliseconds. Default 30,000. A value of 0 will never timeout.Promise<string> The new document url.Navigates forward in the navigation history stack.
number. Optional timeout milliseconds. Default 30,000. A value of 0 will never timeout.Promise<string> The new document url.Executes a navigation request for the document associated with the parent SecretAgent instance.
string The location to navigate to.number. Optional timeout milliseconds. Default 30,000. A value of 0 will never timeout.Promise<Resource> The loaded resource representing this page.Determines if a node from the mainFrameEnvironment is visible to an end user. This method checks whether a node (or containing element) has:
Alias for tab.mainFrameEnvironment.getComputedVisibility.
SuperNode. The node to determine visibility.Promise<INodeVisibility> Boolean values indicating if the node (or closest element) is visible to an end user.objectboolean. Is the node ultimately visible.boolean. Was the node found in the DOM.boolean. The node is on-screen vertically.boolean. The node is on-screen horizontally.boolean. The node is an Element or has a containing Element providing layout.boolean. The node is connected to the DOM.boolean. The display opacity property is not "0".boolean. The display display property is not "none".boolean. The visibility style property is not "hidden".boolean. The node has width and height.boolean. The node is not hidden or obscured > 50% by another element.Reload the currently loaded url.
number. Optional timeout milliseconds. Default 30,000. A value of 0 will never timeout.Promise<Resource> The loaded resource representing this page.Takes a screenshot of the current contents rendered in the browser.
object Optionaljpeg | png. Image format type to create. Default jpeg.number. Optional compression quality from 1 to 100 for jpeg images (100 is highest quality).IRect. Optionally clip the screenshot to the given rectangle (eg, x, y, width, height). Includes a pixel scale.Promise<Buffer> Buffer with image bytes in base64.Wait until a specific element is present in the dom of the mainFrameEnvironment.
Alias for tab.mainFrameEnvironment.waitForElement.
SuperElementobject Accepts any of the following:number. Timeout in milliseconds. Default 30,000.boolean. Wait until this element is visible to a user (see getComputedVisibility.PromiseWait for the mainFrameEnvironment to be loaded such that a user can see the main content above the fold, including on javascript-rendered pages (eg, Single Page Apps). This load event works around deficiencies in using the Document "load" event, which does not always trigger, and doesn't work for Single Page Apps.
Alias for tab.mainFrameEnvironment.waitForPaintingStable.
object Optionalnumber. Timeout in milliseconds. Default 30,000.number. A commandId from which to look for load status changes.Promise<void>If at the moment of calling this method, the selector already exists, the method will return immediately.
const { activeTab, document } = agent;
const elem = document.querySelector('a.visible');
await activeTab.waitForElement(elem, {
waitForVisible: true,
});Wait for a file chooser dialog to be prompted on the page. This is usually triggered by clicking on an input element with type=file.
object Optionalnumber. Timeout in milliseconds. Default 30,000.number. A commandId from which to look for load status changes. Default is to look back to the command preceding this command (eg, a click or interact event).Promise<FileChooser>Wait for the load status of the mainFrameEnvironment.
Alias for tab.mainFrameEnvironment.waitForLoad.
NavigationRequested | HttpRequested | HttpResponsed | HttpRedirected | DomContentLoaded | PaintingStable The load status event to wait for.objectnumber. Timeout in milliseconds. Default 30,000.number. A commandId from which to look for status changed.Promise<void>The following are possible statuses and their meanings:
| Status | Description |
|---|---|
NavigationRequested | A navigation request is initiated by the page or user |
HttpRequested | The http request for the document has been initiated |
HttpResponded | The http response has been retrieved |
HttpRedirected | The original http request was redirected |
DomContentLoaded | The dom content has been received and loaded into the document |
AllContentLoaded | The page load event has triggered. NOTE: this does not ALWAYS trigger in browser. |
PaintingStable | The page has loaded the main content above the fold. Works on javascript-rendered pages. |
Waits for a navigational change to document.location either because of a reload event or changes to the URL.
Alias for tab.mainFrameEnvironment.waitForLocation.
change | reload The same url has been reloaded, or it's a new url.objectnumber. Timeout in milliseconds. Default 30,000.number. A commandId from which to look for changes.Promise<Resource>Location changes are triggered in one of two ways:
| Trigger | Description |
|---|---|
change | A navigational change to document.location has been triggered. |
reload | A reload of the current document.location has been triggered. |
The following example waits for a new page to load after clicking on an anchor tag:
const { user, activeTab, document } = agent;
await activeTab.goto('http://example.com');
await user.click(document.querySelector('a'));
await activeTab.waitForLocation('change');
const newUrl = await activeTab.url;Wait until a specific image, stylesheet, script, websocket or other resource URL has been received.
object Accepts any of the following:string | RegExp A string or regex to match a url onResourceType A resource type to filter onfunction(resource: Resource, done: Callback): boolean A function to allow further filtering of returned resources. Return true to include resources, false to exclude. Calling done finishes execution.object Accepts any of the following:number. Timeout in milliseconds. Default 60,000.number. A commandId from which to look for resources.boolean. Throw an exception if a timeout occurs. Default true.Promise<Resource[]>const { user, activeTab, document } = agent;
await activeTab.goto('http://example.com');
const elem = document.querySelector('a');
await agent.click(elem);
// get all Fetches that have occurred on the page thus far.
const allFetchResources = await activeTab.waitForResource({
type: 'Fetch',
});
const lastCommandId = activeTab.lastCommandId;
const button = document.querySelector('#submit');
await agent.click(button);
const xhrsAfterSubmit = await activeTab.waitForResource(
{
type: 'Xhr',
},
{
sinceCommandId: lastCommandId,
},
);Waits for the specified number of milliseconds.
numberPromiseWaits for the specified number of milliseconds.
numberPromiseSecretAgent's EventTarget interface deviates from the official W3C implementation in that it adds several additional method aliases such as on and off. Learn more.
Emitted when a dialog is prompted on the screen
Emitted for each resource request received by the webpage.