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.
CookieStorage
Returns a reference to the document of the mainFrameEnvironment of this tab.
Alias for tab.mainFrameEnvironment.document.
SuperDocument
Returns 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.
Storage
Returns 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.
Storage
An 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
Request
Closes the current tab only (will close the whole Agent instance if there are no open tabs).
Promise
Perform 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
, URLSearchParams
Alias 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.
Promise
Perform 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.
string
Promise<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.object
boolean
. 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.
SuperElement
object
Accepts any of the following:number
. Timeout in milliseconds. Default 30,000
.boolean
. Wait until this element is visible to a user (see getComputedVisibility.Promise
Wait 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.object
number
. 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.object
number
. 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.
number
Promise
Waits for the specified number of milliseconds.
number
Promise
SecretAgent'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.