@@ -2,148 +2,67 @@ const { By, Key, until, Builder } = require('selenium-webdriver')
2
2
3
3
module . exports = class BasePage {
4
4
driver
5
+ timeout
6
+ polling
5
7
6
8
constructor ( webdriver ) {
7
9
this . driver = webdriver
10
+ // this is another timeout (--timeout 10000) which is the maximum test execution time
11
+ this . timeout = parseInt ( process . env . TIMEOUT ) || 5000 // max time waiting to locate an element. Should be less that test timeout
12
+ this . polling = parseInt ( process . env . POLLING ) || 1000 // how frequent selenium searches for an element
8
13
}
9
14
10
- async waitForLocated ( locator , retries = 3 ) {
11
- try {
12
- await this . driver . wait ( until . elementLocated ( locator ) , 2000 )
13
- } catch ( err ) {
14
- if ( retries === 0 ) {
15
- throw new Error ( `Still not able to locate element ${ locator . toString ( ) } after maximum retries, Error message: ${ err . message . toString ( ) } ` )
16
- }
17
- await this . driver . sleep ( 250 )
18
- return this . waitForLocated ( driver , locator , retries - 1 )
19
- }
15
+ async waitForLocated ( locator ) {
16
+ return this . driver . wait ( until . elementLocated ( locator ) , this . timeout , 'Timed out after 30 seconds' , this . polling ) ;
20
17
}
21
18
22
- async waitForVisible ( locator , retries = 3 ) {
23
- try {
24
- const element = await this . driver . findElement ( locator )
25
- await this . driver . wait ( until . elementIsVisible ( element ) , 2000 )
26
- } catch ( err ) {
27
- if ( retries === 0 ) {
28
- throw new Error ( `Element ${ locator . toString ( ) } still not visible after maximum retries, Error message: ${ err . message . toString ( ) } ` )
29
- }
30
- await this . driver . sleep ( 250 )
31
- return this . waitForVisible ( driver , locator , retries - 1 )
32
- }
19
+ async waitForVisible ( element ) {
20
+ return this . driver . wait ( until . elementIsVisible ( element ) , this . timeout , 'Timed out after 30 seconds' , this . polling ) ;
33
21
}
34
22
35
- async waitForDisplayed ( locator , retries = 3 ) {
36
- await this . waitForLocated ( locator , retries )
37
- await this . waitForVisible ( locator , retries )
38
- return this . driver . findElement ( locator )
23
+ async waitForDisplayed ( locator ) {
24
+ return this . waitForVisible ( await this . waitForLocated ( locator ) )
39
25
}
40
26
41
- async hasElement ( locator ) {
42
- const count = await this . driver . findElements ( locator ) . size ( )
43
- throw new Error ( 'there are ' + count + ' warnings' )
44
- return count > 0
27
+ async getText ( locator ) {
28
+ const element = await this . waitForDisplayed ( locator )
29
+ return element . getText ( )
45
30
}
46
31
47
- async getText ( locator , retries = 1 ) {
48
- try {
49
- const element = await this . driver . findElement ( locator )
50
- const text = element . getText ( )
51
- return text
52
- } catch ( err ) {
53
- if ( retries === 0 ) {
54
- throw new Error ( `Unable to get ${ locator . toString ( ) } text after maximum retries, error : ${ err . message } ` )
55
- }
56
- await this . driver . sleep ( 250 )
57
- return this . getText ( locator , retries - 1 )
58
- }
32
+ async getValue ( locator ) {
33
+ const element = await this . waitForDisplayed ( locator )
34
+ return element . getAttribute ( 'value' )
59
35
}
60
36
61
- async getValue ( locator , retries = 1 ) {
62
- try {
63
- const element = await this . driver . findElement ( locator )
64
- const value = element . getAttribute ( 'value' )
65
- return value
66
- } catch ( err ) {
67
- if ( retries === 0 ) {
68
- throw new Error ( `Unable to get ${ locator . toString ( ) } text after maximum retries, error : ${ err . message } ` )
69
- }
70
- await this . driver . sleep ( 250 )
71
- return this . getValue ( locator , retries - 1 )
72
- }
37
+ async click ( locator ) {
38
+ const element = await this . waitForDisplayed ( locator )
39
+ return element . click ( )
73
40
}
74
41
75
- async click ( locator , retries = 1 ) {
76
- try {
77
- const element = await this . driver . findElement ( locator )
78
- return element . click ( )
79
- } catch ( err ) {
80
- if ( retries === 0 ) {
81
- throw new Error ( `Still not able to click ${ locator . toString ( ) } after maximum retries, Error message: ${ err . message . toString ( ) } ` )
82
- }
83
- await this . driver . sleep ( 250 )
84
- return this . click ( locator , retries - 1 )
85
- }
42
+ async submit ( locator ) {
43
+ const element = await this . waitForDisplayed ( locator )
44
+ return element . submit ( )
86
45
}
87
46
88
- async submit ( locator , retries = 1 ) {
89
- try {
90
- const element = await this . driver . findElement ( locator )
91
- return element . submit ( )
92
- } catch ( err ) {
93
- if ( retries === 0 ) {
94
- throw new Error ( `Still not able to submit ${ locator . toString ( ) } after maximum retries, Error message: ${ err . message . toString ( ) } ` )
95
- }
96
- await this . driver . sleep ( 250 )
97
- return this . submit ( locator , retries - 1 )
98
- }
47
+ async sendKeys ( locator , keys ) {
48
+ const element = await this . waitForDisplayed ( locator )
49
+ await element . click ( )
50
+ await element . clear ( )
51
+ return element . sendKeys ( keys )
99
52
}
100
53
101
- async sendKeys ( locator , keys , retries = 1 ) {
102
- try {
103
- const element = await this . driver . findElement ( locator )
104
- await element . click ( )
105
- await element . clear ( )
106
- return element . sendKeys ( keys )
107
- } catch ( err ) {
108
- console . log ( err )
109
- if ( retries === 0 ) {
110
- throw new Error ( `Unable to send keys to ${ locator . toString ( ) } after maximum retries, error : ${ err . message } ` )
111
- }
112
- await this . driver . sleep ( 250 )
113
- return this . sendKeys ( locator , keys , retries - 1 )
114
- }
54
+ async chooseFile ( locator , file ) {
55
+ const element = await this . waitForDisplayed ( locator )
56
+ var remote = require ( 'selenium-webdriver/remote' ) ;
57
+ driver . setFileDetector ( new remote . FileDetector ) ;
58
+ return element . sendKeys ( file )
115
59
}
116
-
117
- async chooseFile ( locator , file , retries = 1 ) {
118
- try {
119
- const element = await this . driver . findElement ( locator )
120
- var remote = require ( 'selenium-webdriver/remote' ) ;
121
- driver . setFileDetector ( new remote . FileDetector ) ;
122
- return element . sendKeys ( file )
123
- } catch ( err ) {
124
- console . log ( err )
125
- if ( retries === 0 ) {
126
- throw new Error ( `Unable to send keys to ${ locator . toString ( ) } after maximum retries, error : ${ err . message } ` )
127
- }
128
- await this . driver . sleep ( 250 )
129
- return this . chooseFile ( locator , file , retries - 1 )
130
- }
131
- }
132
- async acceptAlert ( retries = 3 ) {
133
- try {
134
- await this . driver . wait ( until . alertIsPresent ( ) ) ;
135
- await this . driver . sleep ( 250 )
136
- let alert = await this . driver . switchTo ( ) . alert ( ) ;
137
- await this . driver . sleep ( 250 )
138
- return alert . accept ( ) ;
139
- } catch ( err ) {
140
- console . log ( err )
141
- if ( retries === 0 ) {
142
- throw new Error ( `Unable to send keys to ${ locator . toString ( ) } after maximum retries, error : ${ err . message } ` )
143
- }
144
- await this . driver . sleep ( 250 )
145
- return this . alertAccept ( retries - 1 )
146
- }
60
+ async acceptAlert ( ) {
61
+ await this . driver . wait ( until . alertIsPresent ( ) , this . timeout ) ;
62
+ await this . driver . sleep ( 250 )
63
+ let alert = await this . driver . switchTo ( ) . alert ( ) ;
64
+ await this . driver . sleep ( 250 )
65
+ return alert . accept ( ) ;
147
66
}
148
67
149
68
capture ( ) {
0 commit comments