@@ -40,7 +40,7 @@ class BasePage {
40
40
} ;
41
41
42
42
async goToUrl ( theURL ) {
43
- this . logger . info ( ' BasePage::goToUrl is called' ) ;
43
+ this . logger . info ( ` BasePage::goToUrl is called. " ${ theURL } "` ) ;
44
44
await this . driver . get ( theURL ) ;
45
45
}
46
46
async refreshPage ( ) {
@@ -63,7 +63,18 @@ class BasePage {
63
63
}
64
64
async click ( locator ) {
65
65
this . logger . info ( `BasePage::click is called. Locator: ${ JSON . stringify ( locator ) } ` ) ;
66
- await this . driver . findElement ( getByLocator ( locator ) ) . click ( ) ;
66
+ let element = await this . driver . findElement ( getByLocator ( locator ) ) ;
67
+ try {
68
+ await element . click ( ) ;
69
+ } catch ( error ) {
70
+ if ( error . name === 'StaleElementReferenceError' ) {
71
+ this . logger . info ( `BasePage::click Re-try because of StaleElementReferenceError` ) ;
72
+ element = await this . driver . findElement ( getByLocator ( locator ) ) ;
73
+ await element . click ( ) ;
74
+ } else {
75
+ throw error ;
76
+ }
77
+ }
67
78
}
68
79
async clickByScript ( locator ) {
69
80
this . logger . info ( `BasePage::clickByScript is called. Locator: ${ JSON . stringify ( locator ) } ` ) ;
@@ -86,6 +97,10 @@ class BasePage {
86
97
const clickable = await this . findElement ( locator ) ;
87
98
await this . driver . executeScript ( 'arguments[0].scrollIntoView()' , clickable ) ;
88
99
}
100
+ async scrollIntoViewElement ( webElement ) {
101
+ this . logger . info ( `BasePage::scrollIntoViewElement is called.` ) ;
102
+ await this . driver . executeScript ( 'arguments[0].scrollIntoView()' , webElement ) ;
103
+ }
89
104
async findElement ( locator ) {
90
105
this . logger . info ( `BasePage::findElement is called. Locator: ${ JSON . stringify ( locator ) } ` ) ;
91
106
return await this . driver . findElement ( getByLocator ( locator ) ) ;
@@ -96,13 +111,20 @@ class BasePage {
96
111
}
97
112
async getText ( locator ) {
98
113
this . logger . info ( `BasePage::getText is called. Locator: ${ JSON . stringify ( locator ) } ` ) ;
99
- return await this . waitPresentedAndAct (
100
- locator ,
101
- async ( ) => {
102
- const locatorElem = await this . findElement ( locator ) ;
103
- return await locatorElem . getText ( ) ;
114
+ return await this . waitPresentedAndAct ( locator , async ( ) => {
115
+ let element = await this . findElement ( locator ) ;
116
+ try {
117
+ return await element . getText ( ) ;
118
+ } catch ( error ) {
119
+ if ( error . name === 'StaleElementReferenceError' ) {
120
+ this . logger . info ( `BasePage::getText Re-try because of StaleElementReferenceError` ) ;
121
+ element = await this . findElement ( locator ) ;
122
+ return await element . getText ( ) ;
123
+ } else {
124
+ throw error ;
125
+ }
104
126
}
105
- ) ;
127
+ } ) ;
106
128
}
107
129
async getCssValue ( locator , cssStyleProperty ) {
108
130
this . logger . info (
@@ -167,9 +189,7 @@ class BasePage {
167
189
await input . sendKeys ( value ) ;
168
190
}
169
191
async inputElem ( webElement , value ) {
170
- this . logger . info (
171
- `BasePage::inputElem is called. Value: ${ value } `
172
- ) ;
192
+ this . logger . info ( `BasePage::inputElem is called. Value: ${ value } ` ) ;
173
193
await webElement . sendKeys ( value ) ;
174
194
}
175
195
async clearInput ( locator ) {
@@ -200,7 +220,9 @@ class BasePage {
200
220
await input . sendKeys ( Key . BACK_SPACE ) ;
201
221
}
202
222
async setImplicitTimeout ( timeoutMs , functionName ) {
203
- this . logger . info ( `BasePage::setImplicitTimeout is called. Function: ${ functionName } . Timeout: ${ timeoutMs } ` ) ;
223
+ this . logger . info (
224
+ `BasePage::setImplicitTimeout is called. Function: ${ functionName } . Timeout: ${ timeoutMs } `
225
+ ) ;
204
226
await this . driver . manage ( ) . setTimeouts ( { implicit : timeoutMs } ) ;
205
227
}
206
228
async getFromLocalStorage ( key ) {
@@ -252,7 +274,7 @@ class BasePage {
252
274
const jsonLogsStrings = logEntries . map ( l => {
253
275
const splitMsg = l . message . split ( ' ' ) ;
254
276
const message = splitMsg . slice ( 2 ) . join ( ' ' ) ;
255
- return `[${ l . level } ] [${ l . timestamp } ] ${ message } `
277
+ return `[${ l . level } ] [${ l . timestamp } ] ${ message } ` ;
256
278
} ) ;
257
279
await writeFile ( logsPaths , jsonLogsStrings . join ( ',\n' ) ) ;
258
280
}
@@ -266,7 +288,9 @@ class BasePage {
266
288
. manage ( )
267
289
. logs ( )
268
290
. get ( logging . Type . DRIVER , logging . Level . INFO ) ;
269
- const driverLogsStrings = driverLogEntries . map ( l => `[${ l . level } ] [${ l . timestamp } ] ${ l . message } ` ) ;
291
+ const driverLogsStrings = driverLogEntries . map (
292
+ l => `[${ l . level } ] [${ l . timestamp } ] ${ l . message } `
293
+ ) ;
270
294
await writeFile ( driverLogsPaths , driverLogsStrings . join ( '' ) ) ;
271
295
}
272
296
async waitForElementLocated ( locator ) {
@@ -447,22 +471,22 @@ class BasePage {
447
471
}
448
472
async getInfoFromIndexedDBFF ( tableName ) {
449
473
this . logger . info ( `BasePage::getInfoFromIndexedDBFF Table name "${ tableName } "` ) ;
450
- await this . driver . executeScript (
451
- ( table ) => {
452
- const dbName = 'yoroi-schema' ;
453
- const dbRequest = window . indexedDB . open ( dbName ) ;
454
- dbRequest . onsuccess = function ( event ) {
455
- const db = event . target . result ;
456
- // without that it doesn't work
457
- window . dataBase = db ;
458
- const tableContentRequest = db . transaction ( table , 'readonly' ) . objectStore ( table ) . mozGetAll ( ) ;
459
- tableContentRequest . onsuccess = function ( event ) {
460
- window . tableData = event . target . result ;
461
- } ;
474
+ await this . driver . executeScript ( table => {
475
+ const dbName = 'yoroi-schema' ;
476
+ const dbRequest = window . indexedDB . open ( dbName ) ;
477
+ dbRequest . onsuccess = function ( event ) {
478
+ const db = event . target . result ;
479
+ // without that it doesn't work
480
+ window . dataBase = db ;
481
+ const tableContentRequest = db
482
+ . transaction ( table , 'readonly' )
483
+ . objectStore ( table )
484
+ . mozGetAll ( ) ;
485
+ tableContentRequest . onsuccess = function ( event ) {
486
+ window . tableData = event . target . result ;
462
487
} ;
463
- } ,
464
- tableName
465
- ) ;
488
+ } ;
489
+ } , tableName ) ;
466
490
let tableContent ;
467
491
try {
468
492
// without that it doesn't work
@@ -601,7 +625,7 @@ class BasePage {
601
625
} ,
602
626
'yoroi-schema' ,
603
627
tableName ,
604
- valueItem ,
628
+ valueItem
605
629
) ;
606
630
}
607
631
}
0 commit comments