diff --git a/src/vs/platform/driver/electron-browser/driver.ts b/src/vs/platform/driver/electron-browser/driver.ts index 8075f851c6b..55202755fea 100644 --- a/src/vs/platform/driver/electron-browser/driver.ts +++ b/src/vs/platform/driver/electron-browser/driver.ts @@ -10,6 +10,8 @@ import { IDisposable } from 'vs/base/common/lifecycle'; import { IWindowDriver, IElement, WindowDriverChannel, WindowDriverRegistryChannelClient } from 'vs/platform/driver/common/driver'; import { IPCClient } from 'vs/base/parts/ipc/common/ipc'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { getTopLeftOffset, getClientArea } from 'vs/base/browser/dom'; +import * as electron from 'electron'; function serializeElement(element: Element, recursive: boolean): IElement { const attributes = Object.create(null); @@ -40,8 +42,31 @@ class WindowDriver implements IWindowDriver { constructor() { } - click(selector: string, xoffset?: number, yoffset?: number): TPromise { - throw new Error('Method not implemented.'); + async click(selector: string, xoffset?: number, yoffset?: number): TPromise { + const element = document.querySelector(selector); + + if (!element) { + throw new Error('Element not found'); + } + + await TPromise.timeout(500); + const { left, top } = getTopLeftOffset(element as HTMLElement); + const { width, height } = getClientArea(element as HTMLElement); + let x: number, y: number; + + if ((typeof xoffset === 'number') || (typeof yoffset === 'number')) { + x = left + xoffset; + y = top + yoffset; + } else { + x = left + (width / 2); + y = top + (height / 2); + } + + const webContents = electron.remote.getCurrentWebContents(); + webContents.sendInputEvent({ type: 'mouseDown', x, y, button: 'left', clickCount: 1 } as any); + webContents.sendInputEvent({ type: 'mouseUp', x, y, button: 'left', clickCount: 1 } as any); + + await TPromise.timeout(100); } doubleClick(selector: string): TPromise { diff --git a/test/smoke/src/areas/editor/editors.ts b/test/smoke/src/areas/editor/editors.ts index 574b1b48aec..300e57bf965 100644 --- a/test/smoke/src/areas/editor/editors.ts +++ b/test/smoke/src/areas/editor/editors.ts @@ -11,8 +11,7 @@ export class Editors { constructor(private api: API, private commands: Commands) { } async saveOpenedFile(): Promise { - await this.api.waitForElement('.tabs-container div.tab.active.dirty'); - await this.commands.runCommand('File: Save'); + await this.commands.runCommand('workbench.action.files.save'); } async selectTab(tabName: string, untitled: boolean = false): Promise { diff --git a/test/smoke/test/mocha.opts b/test/smoke/test/mocha.opts index ce88473e86b..9f769655625 100644 --- a/test/smoke/test/mocha.opts +++ b/test/smoke/test/mocha.opts @@ -1,3 +1,3 @@ --timeout 20000 ---slow 2000 +--slow 20000 out/main.js \ No newline at end of file