diff --git a/src/vs/platform/driver/common/driver.ts b/src/vs/platform/driver/common/driver.ts index 998b5c4d648..d22ba362654 100644 --- a/src/vs/platform/driver/common/driver.ts +++ b/src/vs/platform/driver/common/driver.ts @@ -28,8 +28,8 @@ export interface IDriver { 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; + 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

; } @@ -42,8 +42,8 @@ export interface IDriverChannel extends IChannel { 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: '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; @@ -64,7 +64,9 @@ export class DriverChannel implements IDriverChannel { 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]); + + // TODO@joao + case 'selectorExecute': return this.driver.selectorExecute(arg[0], arg[1], arg[1], ...arg[2]); } return undefined; @@ -101,11 +103,11 @@ export class DriverChannelClient implements IDriver { return this.channel.call('setValue', [windowId, selector, text]); } - getTitle(windowId: number): TPromise { + getTitle(windowId: number): TPromise { return this.channel.call('getTitle', [windowId]); } - isActiveElement(windowId: number, selector: string): TPromise { + isActiveElement(windowId: number, selector: string): TPromise { return this.channel.call('isActiveElement', [windowId, selector]); } @@ -114,6 +116,7 @@ export class DriverChannelClient implements IDriver { } selectorExecute

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

{ + // TODO@joao return this.channel.call('selectorExecute', [windowId, selector, script.toString(), args]); } } @@ -157,8 +160,8 @@ export interface IWindowDriver { doubleClick(selector: string): TPromise; move(selector: string): TPromise; setValue(selector: string, text: string): TPromise; - getTitle(): TPromise; - isActiveElement(selector: string): TPromise; + getTitle(): TPromise; + isActiveElement(selector: string): TPromise; getElements(selector: string): TPromise; selectorExecute

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

; } @@ -169,8 +172,8 @@ export interface IWindowDriverChannel extends IChannel { 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: '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; @@ -190,7 +193,8 @@ export class WindowDriverChannel implements IWindowDriverChannel { 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]); + // TODO@joao + case 'selectorExecute': return this.driver.selectorExecute(arg[0], arg[1], ...arg[2]); } return undefined; @@ -203,11 +207,40 @@ export class WindowDriverChannelClient implements IWindowDriver { constructor(private channel: IWindowDriverChannel) { } + dispatchKeybinding(keybinding: string): TPromise { + return this.channel.call('dispatchKeybinding', keybinding); + } + + click(selector: string, xoffset?: number, yoffset?: number): TPromise { + return this.channel.call('click', [selector, xoffset, yoffset]); + } + + doubleClick(selector: string): TPromise { + return this.channel.call('doubleClick', selector); + } + + move(selector: string): TPromise { + return this.channel.call('move', selector); + } + + setValue(selector: string, text: string): TPromise { + return this.channel.call('setValue', [selector, text]); + } + + getTitle(): TPromise { + return this.channel.call('getTitle'); + } + + isActiveElement(selector: string): TPromise { + return this.channel.call('isActiveElement', selector); + } + getElements(selector: string): TPromise { return this.channel.call('getElements', selector); } - dispatchKeybinding(keybinding: string): TPromise { - return this.channel.call('dispatchKeybinding', keybinding); + selectorExecute

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

{ + // TODO@joao + return this.channel.call('selectorExecute', [selector, script.toString(), args]); } } \ No newline at end of file diff --git a/src/vs/platform/driver/electron-browser/driver.ts b/src/vs/platform/driver/electron-browser/driver.ts index 2e6d60b0903..094e607e5ee 100644 --- a/src/vs/platform/driver/electron-browser/driver.ts +++ b/src/vs/platform/driver/electron-browser/driver.ts @@ -56,6 +56,38 @@ class WindowDriver implements IWindowDriver { // document.activeElement.dispatchEvent(new KeyboardEvent('keyup', event)); } + + click(selector: string, xoffset?: number, yoffset?: number): TPromise { + throw new Error('Method not implemented.'); + } + + doubleClick(selector: string): TPromise { + throw new Error('Method not implemented.'); + } + + move(selector: string): TPromise { + throw new Error('Method not implemented.'); + } + + async setValue(selector: string, text: string): TPromise { + const element = document.querySelector(selector); + + if (!element) { + throw new Error('Element not found'); + } + + (element as HTMLInputElement).value = text; + } + + async getTitle(): TPromise { + return document.title; + } + + async isActiveElement(selector: string): TPromise { + const element = document.querySelector(selector); + return element === document.activeElement; + } + async getElements(selector: string): TPromise { const query = document.querySelectorAll(selector); const result: IElement[] = []; @@ -72,6 +104,10 @@ class WindowDriver implements IWindowDriver { return result; } + + selectorExecute

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

{ + return TPromise.wrapError(new Error('not implemented')); + } } export async function registerWindowDriver( diff --git a/src/vs/platform/driver/electron-main/driver.ts b/src/vs/platform/driver/electron-main/driver.ts index f456136c777..8c5e7d57bc8 100644 --- a/src/vs/platform/driver/electron-main/driver.ts +++ b/src/vs/platform/driver/electron-main/driver.ts @@ -44,14 +44,49 @@ export class Driver implements IDriver, IWindowDriverRegistry { .filter(id => this.registeredWindowIds.has(id)); } - getElements(windowId: number, selector: string): TPromise { + dispatchKeybinding(windowId: number, keybinding: string): TPromise { + const windowDriver = this.getWindowDriver(windowId); + return windowDriver.dispatchKeybinding(keybinding); + } + + click(windowId: number, selector: string, xoffset?: number, yoffset?: number): TPromise { + const windowDriver = this.getWindowDriver(windowId); + return windowDriver.click(selector, xoffset, yoffset); + } + + doubleClick(windowId: number, selector: string): TPromise { + const windowDriver = this.getWindowDriver(windowId); + return windowDriver.doubleClick(selector); + } + + move(windowId: number, selector: string): TPromise { + const windowDriver = this.getWindowDriver(windowId); + return windowDriver.move(selector); + } + + setValue(windowId: number, selector: string, text: string): TPromise { + const windowDriver = this.getWindowDriver(windowId); + return windowDriver.setValue(selector, text); + } + + getTitle(windowId: number): TPromise { + const windowDriver = this.getWindowDriver(windowId); + return windowDriver.getTitle(); + } + + isActiveElement(windowId: number, selector: string): TPromise { + const windowDriver = this.getWindowDriver(windowId); + return windowDriver.isActiveElement(selector); + } + + getElements(windowId: number, selector: string): TPromise { const windowDriver = this.getWindowDriver(windowId); return windowDriver.getElements(selector); } - dispatchKeybinding(windowId: number, keybinding: string): TPromise { + selectorExecute

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

{ const windowDriver = this.getWindowDriver(windowId); - return windowDriver.dispatchKeybinding(keybinding); + return windowDriver.selectorExecute(selector, script, ...args); } private getWindowDriver(windowId: number): IWindowDriver {