@browserstack/testcafe
Version:
Automated browser testing for the modern web development stack.
1,101 lines (1,056 loc) • 93.7 kB
TypeScript
declare module 'testcafe' {
global {
interface KeyModifiers {
ctrl?: boolean;
alt?: boolean;
shift?: boolean;
meta?: boolean
}
interface CropOptions {
/**
* The top edge of the cropping rectangle. The coordinate is calculated from the element's top edge.
* If a negative number is passed, the coordinate is calculated from the element's bottom edge.
*/
left?: number;
/**
* The left edge of the cropping rectangle. The coordinate is calculated from the element's left edge.
* If a negative number is passed, the coordinate is calculated from the element's right edge.
*/
right?: number;
/**
* The bottom edge of the cropping rectangle. The coordinate is calculated from the element's top edge.
* If a negative number is passed, the coordinate is calculated from the element's bottom edge.
*/
top?: number;
/**
* The right edge of the cropping rectangle. The coordinate is calculated from the element's left edge.
* If a negative number is passed, the coordinate is calculated from the element's right edge.
*/
bottom?: number;
}
interface ActionOptions {
/**
* The speed of action emulation. Defines how fast TestCafe performs the action when running tests.
* A value between 1 (the maximum speed) and 0.01 (the minimum speed). If test speed is also specified in the CLI or
* programmatically, the action speed setting overrides test speed. Default is 1.
*/
speed?: number;
}
interface TakeScreenshotOptions {
/**
* Specifies the path where the screenshots are saved.
*/
path?: string;
/**
* Specifies that TestCafe should take full-page screenshots.
*/
fullPage?: boolean;
}
interface TakeElementScreenshotOptions extends ActionOptions {
/**
* Allows to crop the target element on the screenshot.
*/
crop?: CropOptions;
/**
* Controls if element's margins should be included in the screenshot.
* Set this property to `true` to include target element's margins in the screenshot.
* When it is enabled, the `scrollTargetX`, `scrollTargetY` and `crop` rectangle coordinates are calculated from
* the corners where top and left (or bottom and right) margins intersect
*/
includeMargins?: boolean;
/**
* Controls if element's borders should be included in the screenshot.
* Set this property to `true` to include target element's borders in the screenshot.
* When it is enabled, the `scrollTargetX`, `scrollTargetY` and `crop` rectangle coordinates are calculated from
* the corners where top and left (or bottom and right) internal edges of the element intersect
*/
includeBorders?: boolean;
/**
* Controls if element's paddings should be included in the screenshot.
* Set this property to `true` to include target element's paddings in the screenshot.
* When it is enabled, the `scrollTargetX`, `scrollTargetY` and `crop` rectangle coordinates are calculated from
* the corners where top and left (or bottom and right) edges of the element's content area intersect
*/
includePaddings?: boolean;
/**
* Specifies the X coordinate of the scrolling target point.
* If the target element is too big to fit into the browser window, the page will be scrolled to put this point
* to the center of the viewport. The coordinates of this point are calculated relative to the target element.
* If the numbers are positive, the point is positioned relative to the top-left corner of the element.
* If the numbers are negative, the point is positioned relative to the bottom-right corner.
* If the target element fits into the browser window, these properties have no effect.
*/
scrollTargetX?: number;
/**
* Specifies the Y coordinate of the scrolling target point.
* If the target element is too big to fit into the browser window, the page will be scrolled to put this point
* to the center of the viewport. The coordinates of this point are calculated relative to the target element.
* If the numbers are positive, the point is positioned relative to the top-left corner of the element.
* If the numbers are negative, the point is positioned relative to the bottom-right corner.
* If the target element fits into the browser window, these properties have no effect.
*/
scrollTargetY?: number;
}
interface MouseActionOptions extends ActionOptions {
/**
* Mouse pointer X coordinate that define a point where the action is performed or started.
* If an offset is a positive integer, coordinates are calculated relative to the top-left corner of the target element.
* If an offset is a negative integer, they are calculated relative to the bottom-right corner.
* The default is the center of the target element.
*/
offsetX?: number;
/**
* Mouse pointer Y coordinate that define a point where the action is performed or started.
* If an offset is a positive integer, coordinates are calculated relative to the top-left corner of the target element.
* If an offset is a negative integer, they are calculated relative to the bottom-right corner.
* The default is the center of the target element.
*/
offsetY?: number;
/**
* Indicate which modifier keys are to be pressed during the mouse action.
*/
modifiers?: KeyModifiers;
}
interface ClickActionOptions extends MouseActionOptions {
/**
* The initial caret position if the action is performed on a text input field. A zero-based integer.
* The default is the length of the input field content.
*/
caretPos?: number;
}
interface TypeActionOptions extends ClickActionOptions {
/**
* `true` to remove the current text in the target element, and false to leave the text as it is.
*/
replace?: boolean;
/**
* `true` to insert the entire block of current text in a single keystroke (similar to a copy & paste function),
* and false to insert the current text character by character.
*/
paste?: boolean;
}
interface DragToElementOptions extends MouseActionOptions {
/**
* Mouse pointer X coordinate that defines a point where the dragToElement action is finished.
* If an offset is a positive integer, coordinates are calculated relative to the top-left corner of the destination element.
* If an offset is a negative integer, they are calculated relative to the bottom-right corner.
* By default, the dragToElement action is finished in the center of the destination element.
*/
destinationOffsetX?: number;
/**
* Mouse pointer Y coordinate that defines a point where the dragToElement action is finished.
* If an offset is a positive integer, coordinates are calculated relative to the top-left corner of the destination element.
* If an offset is a negative integer, they are calculated relative to the bottom-right corner.
* By default, the dragToElement action is finished in the center of the destination element.
*/
destinationOffsetY?: number;
}
interface ResizeToFitDeviceOptions {
/**
* `true` for portrait screen orientation; `false` for landscape.
*/
portraitOrientation?: boolean;
}
interface AssertionOptions {
/**
* The amount of time, in milliseconds, allowed for an assertion to pass before the test fails if a
* selector property or a client function was used in assertion.
*/
timeout?: number;
/**
* By default, a Promise is not allowed to be passed to an assertion unless it is a selector property
* or the result of a client function. Setting this property to `true` overrides that default.
*/
allowUnawaitedPromise?: boolean;
}
interface Assertion<E = any> {
/**
* Asserts that `actual` is deeply equal to `expected`.
*
* @param expected - An expected value.
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
eql(expected: E, message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that actual is deeply equal to expected.
*
* @param expected - An expected value.
* @param options - Assertion options.
*/
eql(expected: E, options?: AssertionOptions): TestControllerPromise;
/**
* Assert that `actual` is not deeply equal to `unexpected`.
*
* @param unexpected - An unexpected value.
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
notEql(unexpected: E, message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Assert that `actual` is not deeply equal to `unexpected`.
*
* @param unexpected - An unexpected value.
* @param options - Assertion options.
*/
notEql(unexpected: E, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is truthy.
*
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
ok(message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is truthy.
*
* @param options - Assertion options.
*/
ok(options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is falsy.
*
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
notOk(message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is falsy.
*
* @param options - Assertion options.
*/
notOk(options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` contains `expected`.
*
* @param expected - An expected value.
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
contains<R>(expected: EnsureString<E> | ElementOf<E> | Extend<E, R>, message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` contains `expected`.
*
* @param expected - An expected value.
* @param options - Assertion options.
*/
contains<R>(expected: EnsureString<E> | ElementOf<E> | Extend<E, R>, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` not contains `unexpected`.
*
* @param unexpected - An unexpected value.
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
notContains<R>(unexpected: EnsureString<E> | ElementOf<E> | Extend<E, R>, message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` not contains `unexpected`.
*
* @param unexpected - An unexpected value.
* @param options - Assertion options.
*/
notContains<R>(unexpected: EnsureString<E> | ElementOf<E> | Extend<E, R>, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that type of `actual` is `typeName`.
*
* @param typeName - The expected type of an `actual` value.
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
typeOf(typeName: 'function' | 'object' | 'number' | 'string' | 'boolean' | 'undefined' | 'regex', message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that type of `actual` is `typeName`.
*
* @param typeName - The expected type of an `actual` value.
* @param options - Assertion options.
*/
typeOf(typeName: 'function' | 'object' | 'number' | 'string' | 'boolean' | 'undefined' | 'regex', options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that type of `actual` is not `typeName`.
*
* @param typeName - An unexpected type of an `actual` value.
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
notTypeOf(typeName: 'function' | 'object' | 'number' | 'string' | 'boolean' | 'undefined' | 'regex', message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that type of `actual` is not `typeName`.
*
* @param typeName - An unexpected type of an `actual` value.
* @param options - Assertion options.
*/
notTypeOf(typeName: 'function' | 'object' | 'number' | 'string' | 'boolean' | 'undefined' | 'regex', options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is strictly greater than `expected`.
*
* @param expected - A value that should be less than or equal to `actual`.
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
gt(expected: number, message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is strictly greater than `expected`.
*
* @param expected - A value that should be less than or equal to `actual`.
* @param options - Assertion options.
*/
gt(expected: number, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is greater than or equal to `expected`.
*
* @param expected - A value that should be less than `actual`.
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
gte(expected: number, message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is greater than or equal to `expected`.
*
* @param expected - A value that should be less than `actual`.
* @param options - Assertion options.
*/
gte(expected: number, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is less than `expected`.
*
* @param expected - A value that should be greater than or equal to `actual`.
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
lt(expected: number, message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is less than `expected`.
*
* @param expected - A value that should be greater than or equal to `actual`.
* @param options - Assertion options.
*/
lt(expected: number, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is less than or equal to `expected`.
*
* @param expected - A value that should be greater than `actual`.
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
lte(expected: number, message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is less than or equal to `expected`.
*
* @param expected - A value that should be greater than `actual`.
* @param options - Assertion options.
*/
lte(expected: number, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is within a range from `start` to `finish`. Bounds are inclusive.
*
* @param start - A lower bound of range (included).
* @param finish - An upper bound of range (included).
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
within(start: number, finish: number, message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is within a range from `start` to `finish`. Bounds are inclusive.
*
* @param start - A lower bound of range (included).
* @param finish - An upper bound of range (included).
* @param options - Assertion options.
*/
within(start: number, finish: number, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is not within a range from `start` to `finish`. Bounds are inclusive.
*
* @param start - A lower bound of range (included).
* @param finish - An upper bound of range (included).
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
notWithin(start: number, finish: number, message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` is not within a range from `start` to `finish`. Bounds are inclusive.
*
* @param start - A lower bound of range (included).
* @param finish - An upper bound of range (included).
* @param options - Assertion options.
*/
notWithin(start: number, finish: number, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` matches the regular expression.
*
* @param re - A regular expression that is expected to be matched.
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
match(re: RegExp, message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` matches the regular expression.
*
* @param re - A regular expression that is expected to be matched.
* @param options - Assertion options.
*/
match(re: RegExp, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` does not match the regular expression.
*
* @param re - A regular expression that is expected to be matched.
* @param message - An assertion message that will be displayed in the report if the test fails.
* @param options - Assertion options.
*/
notMatch(re: RegExp, message?: string, options?: AssertionOptions): TestControllerPromise;
/**
* Asserts that `actual` does not match the regular expression.
*
* @param re - A regular expression that is expected to be matched.
* @param options - Assertion options.
*/
notMatch(re: RegExp, options?: AssertionOptions): TestControllerPromise;
}
interface ClientFunctionOptions {
/**
* Contains functions, variables or objects used by the client function internally.
* Properties of the `dependencies` object will be added to the client function's scope as variables.
*/
dependencies?: {[key: string]: any},
/**
* If you need to call a client function from a Node.js callback, assign the current test controller to the `boundTestRun` option.
*/
boundTestRun?: TestController
}
interface ClientFunction<R = any, A extends any[]= any[]> {
/**
* Client function
*
* @param args - Function arguments.
*/
(...args: A): Promise<R>;
/**
* Returns a new client function with a different set of options that includes options from the
* original function and new `options` that overwrite the original ones.
*
* @param options - New options.
*/
with(options: ClientFunctionOptions): ClientFunction<R, A>;
}
interface ClientFunctionFactory {
<R, A extends any[]>(fn: (...args: A) => R, options?: ClientFunctionOptions): ClientFunction<R, A>
}
interface ClientScriptCommon {
page?: any;
}
interface ClientScriptContent extends ClientScriptCommon {
content?: string;
}
interface ClientScriptModule extends ClientScriptCommon {
module?: string;
}
interface ClientScriptPath extends ClientScriptCommon {
path?: string;
}
type ClientScript = ClientScriptContent | ClientScriptModule | ClientScriptPath;
interface TextRectangle {
/**
* Y-coordinate, relative to the viewport origin, of the bottom of the rectangle box.
*/
bottom: number;
/**
* X-coordinate, relative to the viewport origin, of the left of the rectangle box.
*/
left: number;
/**
* X-coordinate, relative to the viewport origin, of the right of the rectangle box.
*/
right: number;
/**
* Y-coordinate, relative to the viewport origin, of the top of the rectangle box.
*/
top: number;
/**
* Width of the rectangle box (This is identical to `right` minus `left`).
*/
width: number;
/**
* Height of the rectangle box (This is identical to `bottom` minus `top`).
*/
height: number;
}
interface NodeSnapshot {
/**
* The number of child HTML elements.
*/
childElementCount: number;
/**
* The number of child nodes.
*/
childNodeCount: number;
/**
* `true` if this node has child HTML elements.
*/
hasChildElements: boolean;
/**
* `true` if this node has child nodes.
*/
hasChildNodes: boolean;
/**
* The type of the node.
* See https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType
*/
nodeType: number;
/**
* The text content of the node and its descendants.
* See https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent
*/
textContent: string;
/**
* Attributes of the element.
*/
attributes?: {[name: string]: string};
/**
* The size of the element and its position relative to the viewport.
*/
boundingClientRect?: TextRectangle;
/**
* For checkbox and radio input elements, their current state. For other elements, `undefined`.
*/
checked?: boolean | undefined;
/**
* The list of element's classes.
*/
classNames?: string[];
/**
* The inner height of the element, including padding but not the horizontal scrollbar height, border, or margin.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/clientHeight
*/
clientHeight?: number;
/**
* The width of the left border of the element.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/clientLeft
*/
clientLeft?: number;
/**
* The width of the top border of the element.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/clientTop
*/
clientTop?: number;
/**
* The inner width of the element, including padding but not the vertical scrollbar width, border, or margin.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/clientWidth
*/
clientWidth?: number;
/**
* `true` if the element is focused.
*/
focused?: boolean;
/**
* The element's identifier.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/id
*/
id?: string;
/**
* The element's text content "as rendered".
* See https://html.spec.whatwg.org/multipage/dom.html#the-innertext-idl-attribute
*/
innerText?: string;
/**
* The namespace URI of the element. If the element does not have a namespace, this property is set to null.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/namespaceURI
*/
namespaceURI?: string | null;
/**
* The height of the element including vertical padding and borders.
* See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight
*/
offsetHeight?: number;
/**
* The number of pixels that the upper left corner of the element is offset by to the left within the `offsetParent` node.
* See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetLeft
*/
offsetLeft?: number;
/**
* The number of pixels that the upper left corner of the element is offset by to the top within the offsetParent node.
* See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop
*/
offsetTop?: number;
/**
* The width of the element including vertical padding and borders.
* See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth
*/
offsetWidth?: number;
/**
* Indicates that `<option>` element is currently selected. For other elements, `undefined`.
*/
selected?: boolean | undefined;
/**
* For `<select>` element, the index of the first selected `<option>` element. For other elements, `undefined`.
*/
selectedIndex?: number | undefined;
/**
* The height of the element's content, including content not visible on the screen due to overflow.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight
*/
scrollHeight?: number;
/**
* The number of pixels that the element's content is scrolled to the left.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft
*/
scrollLeft?: number;
/**
* The number of pixels that the element's content is scrolled upward.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollTop
*/
scrollTop?: number;
/**
* Either the width in pixels of the element's content or the width of the element itself, whichever is greater.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollWidth
*/
scrollWidth?: number;
/**
* The computed values of element's CSS properties.
*/
style?: {[prop: string]: string};
/**
* The name of the element.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/tagName
*/
tagName?: string;
/**
* For input elements, the current value in the control. For other elements, `undefined`.
*/
value?: string | undefined;
/**
* `true` if the element is visible.
*/
visible?: boolean;
/**
* `true` if the element has the specified class name.
*
* @param className - Name of the class.
*/
hasClass?(className: string): boolean;
/**
* Returns the computed value of the CSS property.
*
* @param propertyName - The name of the CSS property.
*/
getStyleProperty?(propertyName: string): string;
/**
* Returns the value of the attribute.
*
* @param attributeName - The name of the attribute.
*/
getAttribute?(attributeName: string): string;
/**
* Returns the value of the property from the `boundingClientRect` object.
*
* @param propertyName - The name of the property.
*/
getBoundingClientRectProperty?(propertyName: string): number;
/**
* `true` if the element has the attribute.
*
* @param attributeName - The name of the attribute.
*/
hasAttribute?(attributeName: string): boolean;
}
// Request Hook
//----------------------------------------------------------------------------------------------------------------------
interface RequestHook {
/**
* The `onRequest` method is called before sending the request.
*/
onRequest(requestEvent: object): Promise<void>;
/**
* The `onResponse` method is called after sending the request
*/
onResponse(responseEvent: object): Promise<void>;
}
interface RequestHookConstructor {
/**
* Creates a request hook
* @param requestFilterRules - determines which requests the hook handles
* @param responseEventConfigureOpts - defines whether to pass the response headers and body to the onResponse method
* @returns {RequestHook}
*/
new (requestFilterRules?: Array<any>, responseEventConfigureOpts?: object): RequestHook;
}
// Request Logger
//----------------------------------------------------------------------------------------------------------------------
interface RequestLoggerOptions {
/**
* Specifies whether the request headers should be logged.
*/
logRequestHeaders?: boolean;
/**
* Specifies whether the request body should be logged.
*/
logRequestBody?: boolean;
/**
* Specifies whether the request body should be stored as a String or a Buffer.
*/
stringifyRequestBody?: boolean;
/**
* Specifies whether the response headers should be logged.
*/
logResponseHeaders?: boolean;
/**
* Specifies whether the response body should be logged.
*/
logResponseBody?: boolean;
/**
* Specifies whether the response body should be stored as a string or a Buffer.
*/
stringifyResponseBody?: boolean;
}
interface LoggedRequest {
/**
* The user agent that sent the request.
*/
userAgent: string;
/**
* The request part of the logged request
*/
request: RequestData;
/**
* The response part of the logged request
*/
response: ResponseData;
}
interface RequestData {
/**
* The URL where the request is sent.
*/
url: string;
/**
* The request's HTTP method.
*/
method: string;
/**
* Request headers in the property-value form. Logged if the `logRequestHeaders` option is set to `true`.
*/
headers: object;
/**
* The response body. Logged if the `logResponseBody` option is set to `true`.
* A [Buffer](https://nodejs.org/api/buffer.html) or string depending on the `stringifyResponseBody` option.
*/
body: string | any;
/**
* The timestamp that specifies when the request was intercepted.
*/
timestamp: number;
}
interface ResponseData {
/**
* The status code received in the response.
*/
statusCode: number;
/**
* Response headers in the property-value form. Logged if the `logResponseHeaders` option is set to true.
*/
headers: object;
/**
* The response body.
* Logged if the `logResponseBody` option is set to true.
* A Buffer or string depending on the `stringifyResponseBody` option.
*/
body: string | any;
/**
* The timestamp that specifies when the response was intercepted.
*/
timestamp: number;
}
interface RequestLogger extends RequestHook {
/**
* Returns whether the logger contains a request that matches the predicate.
* @param predicate - The predicate
*/
contains(predicate: (request: LoggedRequest) => boolean): Promise<boolean>;
/**
* Returns the number of requests that match the predicate.
* @param predicate - The predicate
*/
count(predicate: (request: LoggedRequest) => boolean): Promise<number>;
/**
* Clears all logged requests.
*/
clear(): void;
/**
* Returns an array of logged requests.
*/
requests: Array<LoggedRequest>;
}
interface RequestLoggerFactory {
(
filter?: string | RegExp | object | ((req: any) => boolean),
options?: RequestLoggerOptions
): RequestLogger;
}
// Request Mock
//----------------------------------------------------------------------------------------------------------------------
interface RequestMock {
/**
* Specifies requests to intercept
* @param filter - Specifies which requests should be mocked with a response that follows in the `respond` method.
*/
onRequestTo(filter: string | RegExp | object | ((req: RequestOptions) => boolean)): RequestMock;
/**
* Specifies the mocked response.
* @param body - The mocked response body.
* @param statusCode - The response status code.
* @param headers - Custom headers added to the response in the property-value form.
*/
respond(body?: object | string | ((req: RequestOptions, res: ResponseMock) => any), statusCode?: number, headers?: object): RequestMock;
}
interface RequestMockFactory {
(): RequestMock;
}
/**
* {@link https://devexpress.github.io/testcafe/documentation/reference/test-api/requestmock/respond.html#requestoptions See documentation}.
*/
interface RequestOptions {
/** The request headers in the property-value form. */
headers: Object;
/** The request body. */
body: Buffer;
/** The URL to which the request is sent. */
url: string;
/** The protocol to use. Default: http:. */
protocol: string;
/** The alias for the host. */
hostname: string;
/** The domain name or IP address of the server to issue the request to. Default: localhost. */
host: string;
/** The port of the remote server. Default: 80. */
port: number;
/**
* The request path. Should include query string if any. E.G. '/index.html?page=12'. An exception
* is thrown when the request path contains illegal characters. Currently, only spaces are
* rejected but that may change in the future. Default: '/'.
*/
path: string;
/** The string specifying the HTTP request method. Default: 'GET'. */
method: string;
/**
* Credentials that were used for authentication in the current session using NTLM or Basic
* authentication. For HTTP Basic authentication, these are `username` and `password`. NTLM
* authentication additionally specifies `workstation` and `domain`.
* See {@link https://devexpress.github.io/testcafe/documentation/guides/advanced-guides/authentication.html#http-authentication HTTP Authentication}.
*/
credentials: object;
/**
* If a proxy is used, the property contains information about its `host`, `hostname`, `port`,
* `proxyAuth`, `authHeader` and `bypassRules`.
*/
proxy: object;
}
interface ResponseMock {
headers: object;
statusCode: number;
setBody(value: string): void;
}
interface Role {
}
interface RoleOptions {
/**
* Use this option to control which page is opened after you switch to the role.
*
* By default, TestCafe navigates back to the page that was opened previously to switching to the role.
* Set the `preserveUrl` option to true to save the URL to which the browser was redirected after logging in.
* TestCafe will navigate to the saved URL each time after you switch to this role.
*
* This option is useful if you store session-related data (like session ID) in the URL.
*/
preserveUrl?: boolean;
}
interface RoleFactory {
(url: String, fn: (t: TestController) => Promise<any>, options?: RoleOptions): Role;
/**
* Creates an anonymous user role.
*/
anonymous(): Role;
}
interface SelectorOptions {
/**
* If you need to call a selector from a Node.js callback, assign the current test
* controller to the `boundTestRun` option.
*/
boundTestRun?: TestController;
/**
* The amount of time, in milliseconds, allowed for an element returned by the
* selector to appear in the DOM before the test fails.
*/
timeout?: number;
/**
* Use this option to pass functions, variables or objects to selectors initialized with a function.
* The `dependencies` object's properties are added to the function's scope as variables.
*/
dependencies?: {[key: string]: any};
/**
* `true` to additionally require the returned element to become visible within `options.timeout`.
*/
visibilityCheck?: boolean;
}
interface SelectorAPI {
/**
* The number of child HTML elements.
*/
childElementCount: Promise<number>;
/**
* The number of child nodes.
*/
childNodeCount: Promise<number>;
/**
* `true` if this node has child HTML elements.
*/
hasChildElements: Promise<boolean>;
/**
* `true` if this node has child nodes.
*/
hasChildNodes: Promise<boolean>;
/**
* The type of the node.
* See https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType
*/
nodeType: Promise<number>;
/**
* The text content of the node and its descendants.
* See https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent
*/
textContent: Promise<string>;
/**
* Attributes of the element.
*/
attributes: Promise<{[name: string]: string}>;
/**
* The size of the element and its position relative to the viewport.
*/
boundingClientRect: Promise<TextRectangle>;
/**
* For checkbox and radio input elements, their current state. For other elements, `undefined`.
*/
checked: Promise<boolean | undefined>;
/**
* The list of element's classes.
*/
classNames: Promise<string[]>;
/**
* The inner height of the element, including padding but not the horizontal scrollbar height, border, or margin.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/clientHeight
*/
clientHeight: Promise<number>;
/**
* The width of the left border of the element.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/clientLeft
*/
clientLeft: Promise<number>;
/**
* The width of the top border of the element.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/clientTop
*/
clientTop: Promise<number>;
/**
* The inner width of the element, including padding but not the vertical scrollbar width, border, or margin.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/clientWidth
*/
clientWidth: Promise<number>;
/**
* `true` if the element is focused.
*/
focused: Promise<boolean>;
/**
* The element's identifier.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/id
*/
id: Promise<string>;
/**
* The element's text content "as rendered".
* See https://html.spec.whatwg.org/multipage/dom.html#the-innertext-idl-attribute
*/
innerText: Promise<string>;
/**
* The namespace URI of the element. If the element does not have a namespace, this property is set to null.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/namespaceURI
*/
namespaceURI: Promise<string | null>;
/**
* The height of the element including vertical padding and borders.
* See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight
*/
offsetHeight: Promise<number>;
/**
* The number of pixels that the upper left corner of the element is offset by to the left within the `offsetParent` node.
* See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetLeft
*/
offsetLeft: Promise<number>;
/**
* The number of pixels that the upper left corner of the element is offset by to the top within the offsetParent node.
* See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop
*/
offsetTop: Promise<number>;
/**
* The width of the element including vertical padding and borders.
* See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth
*/
offsetWidth: Promise<number>;
/**
* Indicates that `<option>` element is currently selected. For other elements, `undefined`.
*/
selected: Promise<boolean | undefined>;
/**
* For `<select>` element, the index of the first selected `<option>` element. For other elements, `undefined`.
*/
selectedIndex: Promise<number | undefined>;
/**
* The height of the element's content, including content not visible on the screen due to overflow.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight
*/
scrollHeight: Promise<number>;
/**
* The number of pixels that the element's content is scrolled to the left.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft
*/
scrollLeft: Promise<number>;
/**
* The number of pixels that the element's content is scrolled upward.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollTop
*/
scrollTop: Promise<number>;
/**
* Either the width in pixels of the element's content or the width of the element itself, whichever is greater.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollWidth
*/
scrollWidth: Promise<number>;
/**
* The computed values of element's CSS properties.
*/
style: Promise<{[prop: string]: string}>;
/**
* The name of the element.
* See https://developer.mozilla.org/en-US/docs/Web/API/Element/tagName
*/
tagName: Promise<string>;
/**
* For input elements, the current value in the control. For other elements, `undefined`.
*/
value: Promise<string | undefined>;
/**
* `true` if the element is visible.
*/
visible: Promise<boolean>;
/**
* `true` if the element has the specified class name.
*
* @param className - The name of the class.
*/
hasClass(className: string): Promise<boolean>;
/**
* Returns the computed value of the CSS property.
*
* @param propertyName - The name of the CSS property.
*/
getStyleProperty(propertyName: string): Promise<string>;
/**
* Returns the value of the attribute.
*
* @param attributeName - The name of the attribute.
*/
getAttribute(attributeName: string): Promise<string>;
/**