@@ -14,6 +14,13 @@ export interface APIElement {
1414
1515export interface Driver {
1616 keys ( keys : string [ ] ) : Promise < void > ;
17+ click ( selector : string , xoffset ?: number , yoffset ?: number ) : Promise < any > ;
18+ doubleClick ( selector : string ) : Promise < any > ;
19+ move ( selector : string ) : Promise < any > ;
20+ setValue ( selector : string , text : string ) : Promise < void > ;
21+ getTitle ( ) : Promise < string > ;
22+
23+ isActiveElement ( selector : string ) : Promise < boolean > ;
1724 getElements ( selector : string ) : Promise < APIElement [ ] > ;
1825}
1926
@@ -26,6 +33,31 @@ export class SpectronDriver implements Driver {
2633 return Promise . resolve ( ) ;
2734 }
2835
36+ async click ( selector : string , xoffset ?: number | undefined , yoffset ?: number | undefined ) : Promise < void > {
37+ await this . spectronClient . leftClick ( selector , xoffset , yoffset ) ;
38+ }
39+
40+ async doubleClick ( selector : string ) : Promise < void > {
41+ await this . spectronClient . doubleClick ( selector ) ;
42+ }
43+
44+ async move ( selector : string ) : Promise < void > {
45+ await this . spectronClient . moveToObject ( selector ) ;
46+ }
47+
48+ async setValue ( selector : string , text : string ) : Promise < void > {
49+ await this . spectronClient . setValue ( selector , text ) ;
50+ }
51+
52+ async getTitle ( ) : Promise < string > {
53+ return await this . spectronClient . getTitle ( ) ;
54+ }
55+
56+ async isActiveElement ( selector : string ) : Promise < boolean > {
57+ const result = await ( this . spectronClient . execute ( s => document . activeElement . matches ( s ) , selector ) as any as Promise < { value : boolean ; } > ) ;
58+ return result . value ;
59+ }
60+
2961 async getElements ( selector : string ) : Promise < APIElement [ ] > {
3062 const result = await ( this . spectronClient . execute ( selector => {
3163 const query = document . querySelectorAll ( selector ) ;
@@ -75,28 +107,29 @@ export class API {
75107 }
76108
77109 async waitAndClick ( selector : string , xoffset ?: number , yoffset ?: number ) : Promise < any > {
78- return this . waitFor ( ( ) => this . spectronClient . leftClick ( selector , xoffset , yoffset ) , void 0 , `click with selector ${ selector } ` ) ;
110+ return this . waitFor ( ( ) => this . driver . click ( selector , xoffset , yoffset ) , ( ) => true , `click with selector ${ selector } ` ) ;
79111 }
80112
81113 async waitAndDoubleClick ( selector : string , capture : boolean = true ) : Promise < any > {
82- return this . waitFor ( ( ) => this . spectronClient . doubleClick ( selector ) , void 0 , `doubleClick with selector ${ selector } ` ) ;
114+ return this . waitFor ( ( ) => this . driver . doubleClick ( selector ) , ( ) => true , `doubleClick with selector ${ selector } ` ) ;
83115 }
84116
85117 async waitAndMove ( selector : string ) : Promise < any > {
86- return this . waitFor ( ( ) => this . spectronClient . moveToObject ( selector ) , void 0 , `move to object with selector ${ selector } ` ) ;
118+ return this . waitFor ( ( ) => this . driver . move ( selector ) , ( ) => true , `move to object with selector ${ selector } ` ) ;
87119 }
88120
89121 async setValue ( selector : string , text : string , capture : boolean = true ) : Promise < any > {
90- return this . spectronClient . setValue ( selector , text ) ;
122+ return this . driver . setValue ( selector , text ) ;
91123 }
92124
93125 async doesElementExist ( selector : string ) : Promise < boolean > {
94- return this . spectronClient . element ( selector ) . then ( result => ! ! result . value ) ;
126+ const elements = await this . driver . getElements ( selector ) ;
127+ return elements . length > 0 ;
95128 }
96129
97130 async getElementCount ( selector : string ) : Promise < number > {
98- const result = await this . spectronClient . elements ( selector ) ;
99- return result . value . length ;
131+ const elements = await this . driver . getElements ( selector ) ;
132+ return elements . length ;
100133 }
101134
102135 async waitForElements ( selector : string , accept : ( result : APIElement [ ] ) => boolean = result => result . length > 0 ) : Promise < APIElement [ ] > {
@@ -108,15 +141,11 @@ export class API {
108141 }
109142
110143 async waitForActiveElement ( selector : string ) : Promise < any > {
111- return this . waitFor (
112- ( ) => this . spectronClient . execute ( s => document . activeElement . matches ( s ) , selector ) ,
113- r => r . value ,
114- `wait for active element: ${ selector } `
115- ) ;
144+ return this . waitFor ( ( ) => this . driver . isActiveElement ( selector ) , undefined , `wait for active element: ${ selector } ` ) ;
116145 }
117146
118147 async getTitle ( ) : Promise < string > {
119- return this . spectronClient . getTitle ( ) ;
148+ return this . driver . getTitle ( ) ;
120149 }
121150
122151 selectorExecute < P > (
0 commit comments