UNPKG

spectron

Version:

Easily test your Electron apps using ChromeDriver and WebdriverIO.

319 lines (293 loc) 9.79 kB
// Type definitions for spectron v3.6.0 // Project: https://github.com/electron/spectron // Definitions by: deerares <https://github.com/deerares> /// <reference types="node" /> declare module 'spectron' { import * as Electron from 'electron'; import * as WebdriverIO from 'webdriverio'; interface AccessibilityAuditOptions { /** * true to ignore failures with a severity of 'Warning' and only * include failures with a severity of 'Severe'. Defaults to false. */ ignoreWarnings?: boolean; /** * Rule code values such as AX_COLOR_01 to ignore failures for. */ ignoreRules?: string[]; } interface AccessibilityAuditResult { /** * False when the audit has failures */ failed: boolean; /** * A detailed message about the results */ message: string; /** * An array of detail objects for each failed rule */ results: { /** * A unique accessibility rule identifier */ code: string; /** * Selector path of each HTML element that failed the rule */ elements: string[]; /** * A String message about the failed rule */ message: string; /** * 'Warning' or 'Severe' */ severity: 'Warning' | 'Severe'; /** * URL providing more details about the failed rule */ url: string; }[]; } export interface SpectronClient extends WebdriverIO.Browser<'async'> { /** * Wait until the window is no longer loading. * Takes an optional timeout in milliseconds that defaults to 5000. */ waitUntilWindowLoaded(timeout?: number): Promise<void>; /** * Wait until the element matching the given selector contains the given text. * Takes an optional timeout in milliseconds that defaults to 5000. */ waitUntilTextExists( selector: string, text: string, timeout?: number ): Promise<void>; /** * Gets the number of open windows. <webview> tags are also counted as separate windows. */ getWindowCount(): Promise<number>; /** * Focus a window using its index from the windowHandles() array. * <webview> tags can also be focused as a separate window. */ windowByIndex(index: number): Promise<void>; /** * Get the selected text in the current window. */ getSelectedText(): Promise<string>; /** * Gets the console log output from the render process. * The logs are cleared after they are returned. */ getRenderProcessLogs(): Promise<object[]>; /** * Gets the console log output from the main process. * The logs are cleared after they are returned. */ getMainProcessLogs(): Promise<string[]>; /** * Run an accessibility audit in the focused window with the specified options. */ auditAccessibility( options?: AccessibilityAuditOptions ): Promise<AccessibilityAuditResult>; } export type SpectronWindow = { [P in keyof Electron.BrowserWindow]: Electron.BrowserWindow[P] extends ( ...args: infer A ) => infer R ? (...args: A) => Promise<R> : undefined; }; export interface SpectronWebContents extends Electron.WebContents { savePage( fullPath: string, saveType: 'HTMLOnly' | 'HTMLComplete' | 'MHTML', callback?: (error: Error) => void ): boolean; savePage( fullPath: string, saveType: 'HTMLOnly' | 'HTMLComplete' | 'MHTML' ): Promise<void>; savePage( fullPath: string, saveType: 'HTMLOnly' | 'HTMLComplete' | 'MHTML' ): any; executeJavaScript(code: string, userGesture?: boolean): Promise<any>; } type BasicAppSettings = { /** * String host name of the launched chromedriver process. Defaults to 'localhost'. */ host?: string; /** * Number port of the launched chromedriver process. Defaults to 9515. */ port?: number; /** * Number in milliseconds to wait for application quitting. * Defaults to 1000 milliseconds. */ quitTimeout?: number; /** * Number in milliseconds to wait for ChromeDriver to start. * Defaults to 5000 milliseconds. */ startTimeout?: number; /** * Number in milliseconds to wait for calls like waitUntilTextExists and * waitUntilWindowLoaded to complete. * Defaults to 5000 milliseconds. */ waitTimeout?: number; /** * Number of retry attempts to make when connecting to ChromeDriver. * Defaults to 10 attempts. */ connectionRetryCount?: number; /** * Number in milliseconds to wait for connections to ChromeDriver to be made. * Defaults to 30000 milliseconds. */ connectionRetryTimeout?: number; /** * String path to a node executable to launch ChromeDriver with. * Defaults to process.execPath. */ nodePath?: string; /** String path to the Electron application executable to launch. * Note: If you want to invoke electron directly with your app's main script then you should * specify path as electron via electron-prebuilt and specify your app's main script path as * the first argument in the args array. */ path: string; /** * Array of arguments to pass to the Electron application. */ args?: string[]; /** * Array of arguments to pass to ChromeDriver. * See here (https://sites.google.com/chromium.org/driver/capabilities) for details * on the Chrome arguments. */ chromeDriverArgs?: string[]; /** * Object of additional environment variables to set in the launched application. */ env?: object; /** * String address of a Chrome debugger server to connect to. */ debuggerAddress?: string; /** * String path to file to store ChromeDriver logs in. * Setting this option enables --verbose logging when starting ChromeDriver. */ chromeDriverLogPath?: string; /** * String path to a directory where Webdriver will write logs to. * Setting this option enables verbose logging from Webdriver. */ webdriverLogPath?: string; /** * Extra Webdriver options */ webdriverOptions?: object; /** * Custom property name to use when requiring modules. * Defaults to require. * This should only be used if your application deletes the main window.require function * and assigns it to another property name on window. */ requireName?: string; }; type AppConstructorOptions = BasicAppSettings & { /** * String path to the working directory to use for the launched application. * Defaults to process.cwd(). */ cwd?: string; }; export type ApplicationSettings = BasicAppSettings & { /** * String path to the working directory to use for the launched application. * Defaults to process.cwd(). */ workingDirectory?: string; }; /** * Start and stop your Electron application. */ export class Application { /** * Spectron uses WebdriverIO and exposes the managed client property on the created * Application instances. * The full client API provided by WebdriverIO can be found here * http://webdriver.io/api.html * Several additional commands are provided specific to Electron. */ client: SpectronClient; /** * The electron property is your gateway to accessing the full Electron API. * Each Electron module is exposed as a property on the electron property so you can * think of it as an alias for require('electron') from within your app. */ electron: typeof Electron; /** * The browserWindow property is an alias for require('electron').remote.getCurrentWindow(). * It provides you access to the current BrowserWindow and contains all the APIs. * https://electron.atom.io/docs/api/browser-window/ */ browserWindow: SpectronWindow; /** * The webContents property is an alias for * require('electron').remote.getCurrentWebContents(). * It provides you access to the WebContents for the current window * and contains all the APIs. * https://electron.atom.io/docs/api/web-contents/ */ webContents: SpectronWebContents; /** * The mainProcess property is an alias for require('electron').remote.process. * It provides you access to the main process's process global. * https://nodejs.org/api/process.html */ mainProcess: NodeJS.Process; /** *The rendererProcess property is an alias for global.process. * It provides you access to the main process's process global. * https://nodejs.org/api/process.html */ rendererProcess: NodeJS.Process; constructor(options: AppConstructorOptions); /** * Starts the application. * Returns a Promise that will be resolved when the application is ready to use. * You should always wait for start to complete before running any commands. */ start(): Promise<Application>; /** * Stops the application. * Returns a Promise that will be resolved once the application has stopped. */ stop(): Promise<Application>; /** * Stops the application and then starts it. * Returns a Promise that will be resolved once the application has started again. */ restart(): Promise<Application>; /** * Checks to determine if the application is running or not. */ isRunning(): boolean; /** * Get all the configured options passed to the new Application() constructor. * This will include the default options values currently being used. */ getSettings(): ApplicationSettings; } }