/// import { ActionSequence, Capabilities, Command as WdCommand, FileDetector, Options, promise as wdpromise, Session, TargetLocator, TouchSequence, until, WebDriver, WebElement } from 'selenium-webdriver'; import { DebugHelper } from './debugger'; import { ElementArrayFinder, ElementFinder } from './element'; import { ProtractorExpectedConditions } from './expectedConditions'; import { Locator, ProtractorBy } from './locators'; import { Plugins } from './plugins'; export declare class Webdriver { actions: () => ActionSequence; call: (fn: (...var_args: any[]) => any, opt_scope?: any, ...var_args: any[]) => wdpromise.Promise; close: () => void; controlFlow: () => wdpromise.ControlFlow; executeScript: (script: string | Function, ...var_args: any[]) => wdpromise.Promise; executeAsyncScript: (script: string | Function, ...var_args: any[]) => wdpromise.Promise; getCapabilities: () => wdpromise.Promise; getCurrentUrl: () => wdpromise.Promise; getPageSource: () => wdpromise.Promise; getSession: () => wdpromise.Promise; getTitle: () => wdpromise.Promise; getWindowHandle: () => wdpromise.Promise; getAllWindowHandles: () => wdpromise.Promise; manage: () => Options; quit: () => void; schedule: (command: WdCommand, description: string) => wdpromise.Promise; setFileDetector: (detector: FileDetector) => void; sleep: (ms: number) => wdpromise.Promise; switchTo: () => TargetLocator; takeScreenshot: () => wdpromise.Promise; touchActions: () => TouchSequence; wait: (condition: wdpromise.Promise | until.Condition | Function, opt_timeout?: number, opt_message?: string) => wdpromise.Promise; } export interface ElementHelper extends Function { (locator: Locator): ElementFinder; all: (locator: Locator) => ElementArrayFinder; } /** * @alias browser * @constructor * @extends {webdriver.WebDriver} * @param {webdriver.WebDriver} webdriver * @param {string=} opt_baseUrl A base URL to run get requests against. * @param {string=} opt_rootElement Selector element that has an ng-app in * scope. * @param {boolean=} opt_untrackOutstandingTimeouts Whether Protractor should * stop tracking outstanding $timeouts. */ export declare class ProtractorBrowser extends Webdriver { /** * @type {ProtractorBy} */ static By: ProtractorBy; /** * @type {ExpectedConditions} */ ExpectedConditions: ProtractorExpectedConditions; /** * The wrapped webdriver instance. Use this to interact with pages that do * not contain Angular (such as a log-in screen). * * @type {webdriver.WebDriver} */ driver: WebDriver; /** * Helper function for finding elements. * * @type {function(webdriver.Locator): ElementFinder} */ element: ElementHelper; /** * Shorthand function for finding elements by css. * * @type {function(string): ElementFinder} */ $: (query: string) => ElementFinder; /** * Shorthand function for finding arrays of elements by css. * * @type {function(string): ElementArrayFinder} */ $$: (query: string) => ElementArrayFinder; /** * All get methods will be resolved against this base URL. Relative URLs are = * resolved the way anchor tags resolve. * * @type {string} */ baseUrl: string; /** * The css selector for an element on which to find Angular. This is usually * 'body' but if your ng-app is on a subsection of the page it may be * a subelement. * * @type {string} */ rootEl: string; /** * If true, Protractor will not attempt to synchronize with the page before * performing actions. This can be harmful because Protractor will not wait * until $timeouts and $http calls have been processed, which can cause * tests to become flaky. This should be used only when necessary, such as * when a page continuously polls an API using $timeout. * * @type {boolean} */ ignoreSynchronization: boolean; /** * Timeout in milliseconds to wait for pages to load when calling `get`. * * @type {number} */ getPageTimeout: number; /** * An object that holds custom test parameters. * * @type {Object} */ params: any; /** * Set by the runner. * * @type {q.Promise} Done when the new browser is ready for use */ ready: wdpromise.Promise; plugins_: Plugins; /** * The reset URL to use between page loads. * * @type {string} */ resetUrl: string; /** * If true, Protractor will track outstanding $timeouts and report them in the * error message if Protractor fails to synchronize with Angular in time. * @private {boolean} */ trackOutstandingTimeouts_: boolean; /** * If set, will be the universal timeout applied to all tests run by * Protractor. */ allScriptsTimeout: number; /** * Information about mock modules that will be installed during every * get(). * * @type {Array<{name: string, script: function|string, args: * Array.}>} */ mockModules_: { name: string; script: string | Function; args: any[]; }[]; /** * If specified, start a debugger server at specified port instead of repl * when running element explorer. * @public {number} */ debuggerServerPort: number; /** * If true, Protractor will interpret any angular apps it comes across as * hybrid angular1/angular2 apps. * * @type {boolean} */ ng12Hybrid: boolean; /** * A helper that manages debugging tests. */ debugHelper: DebugHelper; [key: string]: any; constructor(webdriverInstance: WebDriver, opt_baseUrl?: string, opt_rootElement?: string, opt_untrackOutstandingTimeouts?: boolean); /** * Get the processed configuration object that is currently being run. This * will contain the specs and capabilities properties of the current runner * instance. * * Set by the runner. * * @returns {webdriver.promise.Promise} A promise which resolves to the * capabilities object. */ getProcessedConfig(): wdpromise.Promise; /** * Fork another instance of browser for use in interactive tests. * * Set by the runner. * * @param {boolean} opt_useSameUrl Whether to navigate to current url on * creation * @param {boolean} opt_copyMockModules Whether to apply same mock modules on * creation * @returns {Browser} A browser instance. */ forkNewDriverInstance(opt_useSameUrl?: boolean, opt_copyMockModules?: boolean): ProtractorBrowser; /** * Restart the browser instance. * * Set by the runner. */ restart(): void; /** * Instead of using a single root element, search through all angular apps * available on the page when finding elements or waiting for stability. * Only compatible with Angular2. */ useAllAngular2AppRoots(): void; /** * The same as {@code webdriver.WebDriver.prototype.executeScript}, * but with a customized description for debugging. * * @private * @param {!(string|Function)} script The script to execute. * @param {string} description A description of the command for debugging. * @param {...*} var_args The arguments to pass to the script. * @returns {!webdriver.promise.Promise.} A promise that will resolve to * the scripts return value. * @template T */ executeScriptWithDescription(script: string | Function, description: string, ...scriptArgs: any[]): wdpromise.Promise; /** * The same as {@code webdriver.WebDriver.prototype.executeAsyncScript}, * but with a customized description for debugging. * * @private * @param {!(string|Function)} script The script to execute. * @param {string} description A description for debugging purposes. * @param {...*} var_args The arguments to pass to the script. * @returns {!webdriver.promise.Promise.} A promise that will resolve to * the * scripts return value. * @template T */ private executeAsyncScript_(script, description, ...scriptArgs); /** * Instruct webdriver to wait until Angular has finished rendering and has * no outstanding $http or $timeout calls before continuing. * Note that Protractor automatically applies this command before every * WebDriver action. * * @param {string=} opt_description An optional description to be added * to webdriver logs. * @returns {!webdriver.promise.Promise} A promise that will resolve to the * scripts return value. */ waitForAngular(opt_description?: string): wdpromise.Promise; /** * Waits for Angular to finish rendering before searching for elements. * @see webdriver.WebDriver.findElement * @returns {!webdriver.promise.Promise} A promise that will be resolved to * the located {@link webdriver.WebElement}. */ findElement(locator: Locator): WebElement; /** * Waits for Angular to finish rendering before searching for elements. * @see webdriver.WebDriver.findElements * @returns {!webdriver.promise.Promise} A promise that will be resolved to an * array of the located {@link webdriver.WebElement}s. */ findElements(locator: Locator): wdpromise.Promise; /** * Tests if an element is present on the page. * @see webdriver.WebDriver.isElementPresent * @returns {!webdriver.promise.Promise} A promise that will resolve to whether * the element is present on the page. */ isElementPresent(locatorOrElement: ProtractorBy | WebElement): wdpromise.Promise; /** * Add a module to load before Angular whenever Protractor.get is called. * Modules will be registered after existing modules already on the page, * so any module registered here will override preexisting modules with the * same name. * * @example * browser.addMockModule('modName', function() { * angular.module('modName', []).value('foo', 'bar'); * }); * * @param {!string} name The name of the module to load or override. * @param {!string|Function} script The JavaScript to load the module. * Note that this will be executed in the browser context, so it cannot * access variables from outside its scope. * @param {...*} varArgs Any additional arguments will be provided to * the script and may be referenced using the `arguments` object. */ addMockModule(name: string, script: string | Function, ...moduleArgs: any[]): void; /** * Clear the list of registered mock modules. */ clearMockModules(): void; /** * Remove a registered mock module. * * @example * browser.removeMockModule('modName'); * * @param {!string} name The name of the module to remove. */ removeMockModule(name: string): void; /** * Get a list of the current mock modules. * * @returns {Array.} The list of mock modules. */ getRegisteredMockModules(): Array; /** * Add the base mock modules used for all Protractor tests. * * @private */ private addBaseMockModules_(); /** * @see webdriver.WebDriver.get * * Navigate to the given destination and loads mock modules before * Angular. Assumes that the page being loaded uses Angular. * If you need to access a page which does not have Angular on load, use * the wrapped webdriver directly. * * @example * browser.get('https://angularjs.org/'); * expect(browser.getCurrentUrl()).toBe('https://angularjs.org/'); * * @param {string} destination Destination URL. * @param {number=} opt_timeout Number of milliseconds to wait for Angular to * start. */ get(destination: string, timeout?: number): wdpromise.Promise; /** * @see webdriver.WebDriver.refresh * * Makes a full reload of the current page and loads mock modules before * Angular. Assumes that the page being loaded uses Angular. * If you need to access a page which does not have Angular on load, use * the wrapped webdriver directly. * * @param {number=} opt_timeout Number of milliseconds to wait for Angular to start. */ refresh(opt_timeout?: number): wdpromise.Promise; /** * Mixin navigation methods back into the navigation object so that * they are invoked as before, i.e. driver.navigate().refresh() */ navigate(): any; /** * Browse to another page using in-page navigation. * * @example * browser.get('http://angular.github.io/protractor/#/tutorial'); * browser.setLocation('api'); * expect(browser.getCurrentUrl()) * .toBe('http://angular.github.io/protractor/#/api'); * * @param {string} url In page URL using the same syntax as $location.url() * @returns {!webdriver.promise.Promise} A promise that will resolve once * page has been changed. */ setLocation(url: string): wdpromise.Promise; /** * Returns the current absolute url from AngularJS. * * @example * browser.get('http://angular.github.io/protractor/#/api'); * expect(browser.getLocationAbsUrl()) * .toBe('http://angular.github.io/protractor/#/api'); * @returns {webdriver.promise.Promise} The current absolute url from * AngularJS. */ getLocationAbsUrl(): wdpromise.Promise; /** * Adds a task to the control flow to pause the test and inject helper * functions * into the browser, so that debugging may be done in the browser console. * * This should be used under node in debug mode, i.e. with * protractor debug * * @example * While in the debugger, commands can be scheduled through webdriver by * entering the repl: * debug> repl * > element(by.input('user')).sendKeys('Laura'); * > browser.debugger(); * Press Ctrl + c to leave debug repl * debug> c * * This will run the sendKeys command as the next task, then re-enter the * debugger. */ debugger(): void; /** * Beta (unstable) enterRepl function for entering the repl loop from * any point in the control flow. Use browser.enterRepl() in your test. * Does not require changes to the command line (no need to add 'debug'). * Note, if you are wrapping your own instance of Protractor, you must * expose globals 'browser' and 'protractor' for pause to work. * * @example * element(by.id('foo')).click(); * browser.enterRepl(); * // Execution will stop before the next click action. * element(by.id('bar')).click(); * * @param {number=} opt_debugPort Optional port to use for the debugging * process */ enterRepl(opt_debugPort?: number): void; /** * Beta (unstable) pause function for debugging webdriver tests. Use * browser.pause() in your test to enter the protractor debugger from that * point in the control flow. * Does not require changes to the command line (no need to add 'debug'). * Note, if you are wrapping your own instance of Protractor, you must * expose globals 'browser' and 'protractor' for pause to work. * * @example * element(by.id('foo')).click(); * browser.pause(); * // Execution will stop before the next click action. * element(by.id('bar')).click(); * * @param {number=} opt_debugPort Optional port to use for the debugging * process */ pause(opt_debugPort?: number): wdpromise.Promise; /** * Create a new instance of Browser by wrapping a webdriver instance. * * @param {webdriver.WebDriver} webdriver The configured webdriver instance. * @param {string=} baseUrl A URL to prepend to relative gets. * @param {string=} rootElement The css selector for the element which is the * root of the Angular app. * @param {boolean=} untrackOutstandingTimeouts Whether Browser should * stop tracking outstanding $timeouts. * @returns {Browser} a new Browser instance */ static wrapDriver(webdriver: WebDriver, baseUrl?: string, rootElement?: string, untrackOutstandingTimeouts?: boolean): ProtractorBrowser; }