diff --git a/test/smoke/src/spectron/client.ts b/test/smoke/src/spectron/client.ts index 1d3d1c821c4..325757feb3f 100644 --- a/test/smoke/src/spectron/client.ts +++ b/test/smoke/src/spectron/client.ts @@ -14,6 +14,13 @@ export interface APIElement { export interface Driver { keys(keys: string[]): Promise; + click(selector: string, xoffset?: number, yoffset?: number): Promise; + doubleClick(selector: string): Promise; + move(selector: string): Promise; + setValue(selector: string, text: string): Promise; + getTitle(): Promise; + + isActiveElement(selector: string): Promise; getElements(selector: string): Promise; } @@ -26,6 +33,31 @@ export class SpectronDriver implements Driver { return Promise.resolve(); } + async click(selector: string, xoffset?: number | undefined, yoffset?: number | undefined): Promise { + await this.spectronClient.leftClick(selector, xoffset, yoffset); + } + + async doubleClick(selector: string): Promise { + await this.spectronClient.doubleClick(selector); + } + + async move(selector: string): Promise { + await this.spectronClient.moveToObject(selector); + } + + async setValue(selector: string, text: string): Promise { + await this.spectronClient.setValue(selector, text); + } + + async getTitle(): Promise { + return await this.spectronClient.getTitle(); + } + + async isActiveElement(selector: string): Promise { + const result = await (this.spectronClient.execute(s => document.activeElement.matches(s), selector) as any as Promise<{ value: boolean; }>); + return result.value; + } + async getElements(selector: string): Promise { const result = await (this.spectronClient.execute(selector => { const query = document.querySelectorAll(selector); @@ -75,28 +107,29 @@ export class API { } async waitAndClick(selector: string, xoffset?: number, yoffset?: number): Promise { - return this.waitFor(() => this.spectronClient.leftClick(selector, xoffset, yoffset), void 0, `click with selector ${selector}`); + return this.waitFor(() => this.driver.click(selector, xoffset, yoffset), () => true, `click with selector ${selector}`); } async waitAndDoubleClick(selector: string, capture: boolean = true): Promise { - return this.waitFor(() => this.spectronClient.doubleClick(selector), void 0, `doubleClick with selector ${selector}`); + return this.waitFor(() => this.driver.doubleClick(selector), () => true, `doubleClick with selector ${selector}`); } async waitAndMove(selector: string): Promise { - return this.waitFor(() => this.spectronClient.moveToObject(selector), void 0, `move to object with selector ${selector}`); + return this.waitFor(() => this.driver.move(selector), () => true, `move to object with selector ${selector}`); } async setValue(selector: string, text: string, capture: boolean = true): Promise { - return this.spectronClient.setValue(selector, text); + return this.driver.setValue(selector, text); } async doesElementExist(selector: string): Promise { - return this.spectronClient.element(selector).then(result => !!result.value); + const elements = await this.driver.getElements(selector); + return elements.length > 0; } async getElementCount(selector: string): Promise { - const result = await this.spectronClient.elements(selector); - return result.value.length; + const elements = await this.driver.getElements(selector); + return elements.length; } async waitForElements(selector: string, accept: (result: APIElement[]) => boolean = result => result.length > 0): Promise { @@ -108,15 +141,11 @@ export class API { } async waitForActiveElement(selector: string): Promise { - return this.waitFor( - () => this.spectronClient.execute(s => document.activeElement.matches(s), selector), - r => r.value, - `wait for active element: ${selector}` - ); + return this.waitFor(() => this.driver.isActiveElement(selector), undefined, `wait for active element: ${selector}`); } async getTitle(): Promise { - return this.spectronClient.getTitle(); + return this.driver.getTitle(); } selectorExecute

(