Skip to content

Commit 5be3af2

Browse files
committed
verbose, cleanup
1 parent d25c6c4 commit 5be3af2

3 files changed

Lines changed: 82 additions & 24 deletions

File tree

test/smoke/src/main.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,13 @@ const opts = minimist(args, {
4141
'wait-time',
4242
'test-repo',
4343
'keybindings'
44-
]
44+
],
45+
boolean: [
46+
'verbose'
47+
],
48+
default: {
49+
verbose: false
50+
}
4551
});
4652

4753
const artifactsPath = opts.log || '';
@@ -261,7 +267,8 @@ function createApp(quality: Quality): SpectronApplication | null {
261267
extensionsPath,
262268
artifactsPath,
263269
workspaceFilePath,
264-
waitTime: parseInt(opts['wait-time'] || '0') || 20
270+
waitTime: parseInt(opts['wait-time'] || '0') || 20,
271+
verbose: opts.verbose
265272
});
266273
}
267274
before(async function () {

test/smoke/src/spectron/application.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export interface SpectronApplicationOptions {
4242
artifactsPath: string;
4343
workspaceFilePath: string;
4444
waitTime: number;
45+
verbose: boolean;
4546
}
4647

4748
/**
@@ -270,7 +271,7 @@ export class SpectronApplication {
270271
}
271272

272273
this._screenCapturer = new ScreenCapturer(this.spectron, this._suiteName, screenshotsDirPath);
273-
this._api = new API(this.spectron.client, this.screenCapturer, this.options.waitTime);
274+
this._api = new API(this.spectron.client, this.screenCapturer, this.options.waitTime, this.options.verbose);
274275
this._workbench = new Workbench(this._api, this.keybindings, this.userDataPath);
275276
}
276277

test/smoke/src/spectron/client.ts

Lines changed: 71 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,43 +22,83 @@ export interface Driver {
2222

2323
isActiveElement(selector: string): Promise<boolean>;
2424
getElements(selector: string): Promise<APIElement[]>;
25+
selectorExecute<P>(selector: string, script: (elements: HTMLElement[], ...args: any[]) => P, ...args: any[]): Promise<P>;
2526
}
2627

2728
export class SpectronDriver implements Driver {
2829

29-
constructor(private spectronClient: SpectronClient) { }
30+
constructor(
31+
private spectronClient: SpectronClient,
32+
private verbose: boolean
33+
) { }
3034

3135
keys(keys: string[]): Promise<void> {
36+
if (this.verbose) {
37+
console.log('- keys:', keys);
38+
}
39+
3240
this.spectronClient.keys(keys);
3341
return Promise.resolve();
3442
}
3543

3644
async click(selector: string, xoffset?: number | undefined, yoffset?: number | undefined): Promise<void> {
45+
if (this.verbose) {
46+
console.log('- click:', selector, xoffset, yoffset);
47+
}
48+
3749
await this.spectronClient.leftClick(selector, xoffset, yoffset);
50+
51+
if (this.verbose) {
52+
console.log('- click DONE');
53+
}
3854
}
3955

4056
async doubleClick(selector: string): Promise<void> {
57+
if (this.verbose) {
58+
console.log('- doubleClick:', selector);
59+
}
60+
4161
await this.spectronClient.doubleClick(selector);
4262
}
4363

4464
async move(selector: string): Promise<void> {
65+
if (this.verbose) {
66+
console.log('- move:', selector);
67+
}
68+
4569
await this.spectronClient.moveToObject(selector);
4670
}
4771

4872
async setValue(selector: string, text: string): Promise<void> {
73+
if (this.verbose) {
74+
console.log('- setValue:', selector, text);
75+
}
76+
4977
await this.spectronClient.setValue(selector, text);
5078
}
5179

5280
async getTitle(): Promise<string> {
81+
if (this.verbose) {
82+
console.log('- getTitle');
83+
}
84+
5385
return await this.spectronClient.getTitle();
5486
}
5587

5688
async isActiveElement(selector: string): Promise<boolean> {
89+
if (this.verbose) {
90+
console.log('- isActiveElement:', selector);
91+
}
92+
5793
const result = await (this.spectronClient.execute(s => document.activeElement.matches(s), selector) as any as Promise<{ value: boolean; }>);
5894
return result.value;
5995
}
6096

6197
async getElements(selector: string): Promise<APIElement[]> {
98+
if (this.verbose) {
99+
console.log('- getElements:', selector);
100+
}
101+
62102
const result = await (this.spectronClient.execute(selector => {
63103
const query = document.querySelectorAll(selector);
64104
const result: APIElement[] = [];
@@ -78,6 +118,15 @@ export class SpectronDriver implements Driver {
78118

79119
return result.value;
80120
}
121+
122+
async selectorExecute<P>(selector: string, script: (elements: HTMLElement[], ...args: any[]) => P, ...args: any[]): Promise<P> {
123+
if (this.verbose) {
124+
console.log('- selectorExecute:', selector);
125+
}
126+
127+
let _script = (element, script, ...args) => script(Array.isArray(element) ? element : [element], ...args);
128+
return this.spectronClient.selectorExecute(selector, _script, script, ...args);
129+
}
81130
}
82131

83132
export class API {
@@ -89,37 +138,42 @@ export class API {
89138
private driver: Driver;
90139

91140
constructor(
92-
private spectronClient: SpectronClient,
141+
spectronClient: SpectronClient,
93142
private screenCapturer: ScreenCapturer,
94-
waitTime: number
143+
waitTime: number,
144+
verbose: boolean
95145
) {
96-
this.driver = new SpectronDriver(spectronClient);
146+
this.driver = new SpectronDriver(spectronClient, verbose);
97147
this.retryCount = (waitTime * 1000) / this.retryDuration;
98148
}
99149

100150
keys(keys: string[]): Promise<void> {
101151
return this.driver.keys(keys);
102152
}
103153

104-
async waitForTextContent(selector: string, textContent?: string, accept?: (result: string) => boolean): Promise<string> {
154+
waitForTextContent(selector: string, textContent?: string, accept?: (result: string) => boolean): Promise<string> {
105155
accept = accept ? accept : (result => textContent !== void 0 ? textContent === result : !!result);
106156
return this.waitFor(() => this.driver.getElements(selector).then(els => els[0].textContent), s => accept!(typeof s === 'string' ? s : ''), `getTextContent with selector ${selector}`);
107157
}
108158

109159
async waitAndClick(selector: string, xoffset?: number, yoffset?: number): Promise<any> {
110-
return this.waitFor(() => this.driver.click(selector, xoffset, yoffset), () => true, `click with selector ${selector}`);
160+
await this.waitForElement(selector);
161+
return await this.driver.click(selector, xoffset, yoffset);
111162
}
112163

113-
async waitAndDoubleClick(selector: string, capture: boolean = true): Promise<any> {
114-
return this.waitFor(() => this.driver.doubleClick(selector), () => true, `doubleClick with selector ${selector}`);
164+
async waitAndDoubleClick(selector: string): Promise<any> {
165+
await this.waitForElement(selector);
166+
return await this.driver.doubleClick(selector);
115167
}
116168

117169
async waitAndMove(selector: string): Promise<any> {
118-
return this.waitFor(() => this.driver.move(selector), () => true, `move to object with selector ${selector}`);
170+
await this.waitForElement(selector);
171+
return await this.driver.move(selector);
119172
}
120173

121-
async setValue(selector: string, text: string, capture: boolean = true): Promise<any> {
122-
return this.driver.setValue(selector, text);
174+
async setValue(selector: string, text: string): Promise<any> {
175+
await this.waitForElement(selector);
176+
return await this.driver.setValue(selector, text);
123177
}
124178

125179
async doesElementExist(selector: string): Promise<boolean> {
@@ -132,28 +186,24 @@ export class API {
132186
return elements.length;
133187
}
134188

135-
async waitForElements(selector: string, accept: (result: APIElement[]) => boolean = result => result.length > 0): Promise<APIElement[]> {
189+
waitForElements(selector: string, accept: (result: APIElement[]) => boolean = result => result.length > 0): Promise<APIElement[]> {
136190
return this.waitFor(() => this.driver.getElements(selector), accept, `elements with selector ${selector}`) as Promise<any>;
137191
}
138192

139-
async waitForElement(selector: string, accept: (result: APIElement | undefined) => boolean = result => !!result): Promise<void> {
193+
waitForElement(selector: string, accept: (result: APIElement | undefined) => boolean = result => !!result): Promise<void> {
140194
return this.waitFor(() => this.driver.getElements(selector).then(els => els[0]), accept, `element with selector ${selector}`) as Promise<any>;
141195
}
142196

143-
async waitForActiveElement(selector: string): Promise<any> {
197+
waitForActiveElement(selector: string): Promise<any> {
144198
return this.waitFor(() => this.driver.isActiveElement(selector), undefined, `wait for active element: ${selector}`);
145199
}
146200

147-
async getTitle(): Promise<string> {
201+
getTitle(): Promise<string> {
148202
return this.driver.getTitle();
149203
}
150204

151-
selectorExecute<P>(
152-
selectors: string | string[],
153-
script: (elements: HTMLElement | HTMLElement[], ...args: any[]) => P,
154-
...args: any[]
155-
): Promise<P> {
156-
return this.spectronClient.selectorExecute(selectors, script, ...args);
205+
selectorExecute<P>(selector: string, script: (elements: HTMLElement[], ...args: any[]) => P, ...args: any[]): Promise<P> {
206+
return this.driver.selectorExecute(selector, script, ...args);
157207
}
158208

159209
private running = false;

0 commit comments

Comments
 (0)