diff --git a/src/vs/platform/driver/common/driver.ts b/src/vs/platform/driver/common/driver.ts index 826415b59f3..998b5c4d648 100644 --- a/src/vs/platform/driver/common/driver.ts +++ b/src/vs/platform/driver/common/driver.ts @@ -21,16 +21,31 @@ export interface IElement { export interface IDriver { _serviceBrand: any; + getWindowIds(): TPromise; - getElements(windowId: number, selector: string): TPromise; dispatchKeybinding(windowId: number, keybinding: string): TPromise; + click(windowId: number, selector: string, xoffset?: number | undefined, yoffset?: number | undefined): TPromise; + doubleClick(windowId: number, selector: string): TPromise; + move(windowId: number, selector: string): TPromise; + setValue(windowId: number, selector: string, text: string): TPromise; + getTitle(windowId: number): TPromise; + isActiveElement(windowId: number, selector: string): TPromise; + getElements(windowId: number, selector: string): TPromise; + selectorExecute

(windowId: number, selector: string, script: (elements: HTMLElement[], ...args: any[]) => P, ...args: any[]): TPromise

; } //*END export interface IDriverChannel extends IChannel { call(command: 'getWindowIds'): TPromise; - call(command: 'getElements', arg: [number, string]): TPromise; call(command: 'dispatchKeybinding', arg: [number, string]): TPromise; + call(command: 'click', arg: [number, string, number | undefined, number | undefined]): TPromise; + call(command: 'doubleClick', arg: [number, string]): TPromise; + call(command: 'move', arg: [number, string]): TPromise; + call(command: 'setValue', arg: [number, string, string]): TPromise; + call(command: 'getTitle', arg: [number]): TPromise; + call(command: 'isActiveElement', arg: [number, string]): TPromise; + call(command: 'getElements', arg: [number, string]): TPromise; + call(command: 'selectorExecute', arg: [number, string, string, any[]]): TPromise; call(command: string, arg: any): TPromise; } @@ -41,8 +56,15 @@ export class DriverChannel implements IDriverChannel { call(command: string, arg?: any): TPromise { switch (command) { case 'getWindowIds': return this.driver.getWindowIds(); - case 'getElements': return this.driver.getElements(arg[0], arg[1]); case 'dispatchKeybinding': return this.driver.dispatchKeybinding(arg[0], arg[1]); + case 'click': return this.driver.click(arg[0], arg[1], arg[2], arg[3]); + case 'doubleClick': return this.driver.doubleClick(arg[0], arg[1]); + case 'move': return this.driver.move(arg[0], arg[1]); + case 'setValue': return this.driver.setValue(arg[0], arg[1], arg[2]); + case 'getTitle': return this.driver.getTitle(arg[0]); + case 'isActiveElement': return this.driver.isActiveElement(arg[0], arg[1]); + case 'getElements': return this.driver.getElements(arg[0], arg[1]); + case 'selectorExecute': return this.driver.selectorExecute(arg[0], arg[1], new Function(arg[2]), ...arg[2]); } return undefined; @@ -59,12 +81,40 @@ export class DriverChannelClient implements IDriver { return this.channel.call('getWindowIds'); } + dispatchKeybinding(windowId: number, keybinding: string): TPromise { + return this.channel.call('dispatchKeybinding', [windowId, keybinding]); + } + + click(windowId: number, selector: string, xoffset: number | undefined, yoffset: number | undefined): TPromise { + return this.channel.call('click', [windowId, selector, xoffset, yoffset]); + } + + doubleClick(windowId: number, selector: string): TPromise { + return this.channel.call('doubleClick', [windowId, selector]); + } + + move(windowId: number, selector: string): TPromise { + return this.channel.call('move', [windowId, selector]); + } + + setValue(windowId: number, selector: string, text: string): TPromise { + return this.channel.call('setValue', [windowId, selector, text]); + } + + getTitle(windowId: number): TPromise { + return this.channel.call('getTitle', [windowId]); + } + + isActiveElement(windowId: number, selector: string): TPromise { + return this.channel.call('isActiveElement', [windowId, selector]); + } + getElements(windowId: number, selector: string): TPromise { return this.channel.call('getElements', [windowId, selector]); } - dispatchKeybinding(windowId: number, keybinding: string): TPromise { - return this.channel.call('dispatchKeybinding', [windowId, keybinding]); + selectorExecute

(windowId: number, selector: string, script: (elements: HTMLElement[], ...args: any[]) => P, ...args: any[]): TPromise

{ + return this.channel.call('selectorExecute', [windowId, selector, script.toString(), args]); } } @@ -102,13 +152,27 @@ export class WindowDriverRegistryChannelClient implements IWindowDriverRegistry } export interface IWindowDriver { - getElements(selector: string): TPromise; dispatchKeybinding(keybinding: string): TPromise; + click(selector: string, xoffset?: number | undefined, yoffset?: number | undefined): TPromise; + doubleClick(selector: string): TPromise; + move(selector: string): TPromise; + setValue(selector: string, text: string): TPromise; + getTitle(): TPromise; + isActiveElement(selector: string): TPromise; + getElements(selector: string): TPromise; + selectorExecute

(selector: string, script: (elements: HTMLElement[], ...args: any[]) => P, ...args: any[]): TPromise

; } export interface IWindowDriverChannel extends IChannel { - call(command: 'getElements', arg: string): TPromise; call(command: 'dispatchKeybinding', arg: string): TPromise; + call(command: 'click', arg: [string, number | undefined, number | undefined]): TPromise; + call(command: 'doubleClick', arg: string): TPromise; + call(command: 'move', arg: string): TPromise; + call(command: 'setValue', arg: [string, string]): TPromise; + call(command: 'getTitle'): TPromise; + call(command: 'isActiveElement', arg: string): TPromise; + call(command: 'getElements', arg: string): TPromise; + call(command: 'selectorExecute', arg: [string, string, any[]]): TPromise; call(command: string, arg: any): TPromise; } @@ -118,8 +182,15 @@ export class WindowDriverChannel implements IWindowDriverChannel { call(command: string, arg?: any): TPromise { switch (command) { - case 'getElements': return this.driver.getElements(arg); case 'dispatchKeybinding': return this.driver.dispatchKeybinding(arg); + case 'click': return this.driver.click(arg[0], arg[1], arg[2]); + case 'doubleClick': return this.driver.doubleClick(arg); + case 'move': return this.driver.move(arg); + case 'setValue': return this.driver.setValue(arg[0], arg[1]); + case 'getTitle': return this.driver.getTitle(); + case 'isActiveElement': return this.driver.isActiveElement(arg); + case 'getElements': return this.driver.getElements(arg); + case 'selectorExecute': return this.driver.selectorExecute(arg[0], arg[1], arg[2], ...arg[2]); } return undefined; diff --git a/test/smoke/src/driver.ts b/test/smoke/src/driver.ts index b3f0e72c77f..5c4652a46d5 100644 --- a/test/smoke/src/driver.ts +++ b/test/smoke/src/driver.ts @@ -133,15 +133,6 @@ export class CodeDriver implements Driver { private _activeWindowId: number | undefined = undefined; - private async getWindowId(): Promise { - if (typeof this._activeWindowId !== 'number') { - const windows = await this.driver.getWindowIds(); - this._activeWindowId = windows[0]; - } - - return this._activeWindowId; - } - async dispatchKeybinding(keybinding: string): Promise { if (this.verbose) { console.log('- dispatchKeybinding:', keybinding); @@ -216,4 +207,13 @@ export class CodeDriver implements Driver { throw new Error('Method not implemented.'); } + + private async getWindowId(): Promise { + if (typeof this._activeWindowId !== 'number') { + const windows = await this.driver.getWindowIds(); + this._activeWindowId = windows[0]; + } + + return this._activeWindowId; + } } \ No newline at end of file diff --git a/test/smoke/src/vscode/driver.d.ts b/test/smoke/src/vscode/driver.d.ts index dce79062e31..c51f9b5b248 100644 --- a/test/smoke/src/vscode/driver.d.ts +++ b/test/smoke/src/vscode/driver.d.ts @@ -12,8 +12,15 @@ export interface IElement { export interface IDriver { _serviceBrand: any; getWindowIds(): Promise; - getElements(windowId: number, selector: string): Promise; dispatchKeybinding(windowId: number, keybinding: string): Promise; + click(windowId: number, selector: string, xoffset: number | undefined, yoffset: number | undefined): Promise; + doubleClick(windowId: number, selector: string): Promise; + move(windowId: number, selector: string): Promise; + setValue(windowId: number, selector: string, text: string): Promise; + getTitle(windowId: number): Promise; + isActiveElement(windowId: number, selector: string): Promise; + getElements(windowId: number, selector: string): Promise; + selectorExecute

(selector: string, script: (elements: HTMLElement[], ...args: any[]) => P, ...args: any[]): Promise

; } export interface IDisposable {