12
12
// See the License for the specific language governing permissions and
13
13
// limitations under the License.
14
14
15
+ var waitForCondition = require ( './plugins/wait_for_transitions.js' ) . waitForCondition ;
15
16
var MM = { } ,
16
17
currentNavBar = '.nav-bar-block[nav-bar="active"]' ,
17
18
currentView = 'ion-view[nav-view="active"]' ;
@@ -25,13 +26,18 @@ var MM = {},
25
26
* @param {Element } container The container in which the node should be found.
26
27
* @return {Promise }
27
28
*/
28
- MM . clickOn = function ( text , container ) {
29
+ MM . clickOn = function ( text , container ) {
30
+ waitForCondition ( ) ;
29
31
var locator = by . xpath ( '(//a | //button | //*[contains(concat(" ",normalize-space(@class)," ")," item ")])[contains(.,"' + text + '") or contains(@aria-label,"' + text + '")]' ) ;
32
+
30
33
if ( container ) {
34
+ waitForCondition ( ) ;
35
+ browser . wait ( EC . presenceOf ( container ) , 5000 ) ;
31
36
node = container . element ( locator ) ;
32
37
} else {
33
38
node = element ( locator ) ;
34
39
}
40
+ waitForCondition ( ) ;
35
41
return MM . clickOnElement ( node ) ;
36
42
} ;
37
43
@@ -43,20 +49,49 @@ MM.clickOn = function(text, container) {
43
49
* @param {Element } el
44
50
* @return {Promise }
45
51
*/
46
- MM . clickOnElement = function ( el ) {
52
+ MM . clickOnElement = function ( el ) {
53
+ waitForCondition ( ) ;
54
+ browser . sleep ( 2000 ) ;
55
+ browser . wait ( EC . presenceOf ( el ) , 50000 ) ;
47
56
browser . executeScript ( 'arguments[0].scrollIntoView(true)' , el . getWebElement ( ) ) ;
57
+ browser . wait ( EC . elementToBeClickable ( el ) , 13000 ) ;
48
58
return el . click ( ) ;
49
59
} ;
50
60
61
+ /**
62
+ * Go to bottom of page and Click on a element.
63
+ *
64
+ * This will scroll the view if required.
65
+ *
66
+ * @param {Element } text
67
+ * @return {Promise }
68
+ */
69
+ MM . goToBottomAndClick = function ( text ) {
70
+ waitForCondition ( ) ;
71
+ browser . sleep ( 2000 ) ; // This is must, due to slow page rendering issues.
72
+ var locator = by . xpath ( '(//a | //button | //*[contains(concat(" ",normalize-space(@class)," ")," item ")])[contains(.,"' + text + '") or contains(@aria-label,"' + text + '")]' ) ;
73
+ browser . wait ( EC . presenceOf ( element ( locator ) ) , 5000 ) ;
74
+ node = element ( locator ) ;
75
+
76
+ waitForCondition ( ) ;
77
+ browser . sleep ( 2000 ) ;
78
+ browser . executeScript ( 'arguments[0].scrollIntoView(false)' , node . getWebElement ( ) ) ;
79
+ browser . wait ( EC . elementToBeClickable ( node ) , 15000 ) ;
80
+ return node . click ( ) ;
81
+ }
82
+
51
83
/**
52
84
* Click on a link in the side menu.
53
85
*
54
86
* @param {String } text The link name
55
87
* @return {Promise }
56
88
*/
57
- MM . clickOnInSideMenu = function ( text ) {
58
- return MM . openSideMenu ( ) . then ( function ( ) {
89
+ MM . clickOnInSideMenu = function ( text ) {
90
+ return MM . openSideMenu ( ) . then ( function ( ) {
91
+ waitForCondition ( ) ;
59
92
var menu = $ ( 'ion-side-menu[side="left"]' ) ;
93
+ browser . wait ( EC . visibilityOf ( menu ) , 7000 ) ;
94
+ browser . wait ( EC . elementToBeClickable ( menu ) , 5000 ) ;
60
95
return MM . clickOn ( text , menu ) ;
61
96
} ) ;
62
97
} ;
@@ -66,7 +101,10 @@ MM.clickOnInSideMenu = function(text) {
66
101
*
67
102
* @return {Element }
68
103
*/
69
- MM . getNavBar = function ( ) {
104
+ MM . getNavBar = function ( ) {
105
+ waitForCondition ( ) ;
106
+ browser . wait ( EC . visibilityOf ( $ ( currentNavBar ) ) , 10000 ) ;
107
+ browser . sleep ( 7000 ) ; // Wait for contents to render.
70
108
return $ ( currentNavBar ) ;
71
109
} ;
72
110
@@ -75,7 +113,10 @@ MM.getNavBar = function() {
75
113
*
76
114
* @return {Element }
77
115
*/
78
- MM . getView = function ( ) {
116
+ MM . getView = function ( ) {
117
+ waitForCondition ( ) ;
118
+ browser . wait ( EC . visibilityOf ( $ ( currentView ) ) , 50000 ) ;
119
+ browser . sleep ( 7000 ) ; // Wait for contents to render.
79
120
return $ ( currentView ) ;
80
121
} ;
81
122
@@ -84,15 +125,17 @@ MM.getView = function() {
84
125
*
85
126
* @return {Promise }
86
127
*/
87
- MM . goBack = function ( ) {
128
+ MM . goBack = function ( ) {
88
129
var backBtn = $ ( currentNavBar + ' .back-button' ) ;
89
- return backBtn . isPresent ( ) . then ( function ( present ) {
130
+ waitForCondition ( ) ;
131
+ browser . wait ( EC . visibilityOf ( backBtn ) , 15000 ) ;
132
+ return backBtn . isPresent ( ) . then ( function ( present ) {
90
133
if ( present ) {
91
- return backBtn . isDisplayed ( ) . then ( function ( displayed ) {
134
+ return backBtn . isDisplayed ( ) . then ( function ( displayed ) {
92
135
if ( displayed ) {
93
136
return backBtn . click ( ) ;
94
137
}
95
- throw new Error ( 'Could not find the back button.' ) ;
138
+ throw new Error ( 'Could not find back button.' ) ;
96
139
} ) ;
97
140
}
98
141
throw new Error ( 'Could not find the back button.' ) ;
@@ -106,27 +149,34 @@ MM.goBack = function() {
106
149
* @param {String } password The password
107
150
* @return {Promise }
108
151
*/
109
- MM . loginAs = function ( username , password ) {
152
+ MM . loginAs = function ( username , password ) {
153
+
154
+ browser . ignoreSynchronization = true ;
155
+ browser . waitForAngular ( ) ;
156
+ browser . wait ( EC . visibilityOf ( element ( by . model ( 'siteurl' ) ) ) , 15000 ) ;
157
+
110
158
element ( by . model ( 'siteurl' ) )
111
159
. sendKeys ( SITEURL ) ;
112
-
160
+ browser . wait ( EC . elementToBeClickable ( $ ( '[ng-click="connect(siteurl)"]' ) ) , 15000 ) ;
113
161
return $ ( '[ng-click="connect(siteurl)"]' ) . click ( )
114
- . then ( function ( ) {
115
- element ( by . model ( 'credentials.username' ) )
116
- . sendKeys ( username ) ;
117
- element ( by . model ( 'credentials.password' ) )
118
- . sendKeys ( password ) ;
119
-
120
- return $ ( '[ng-click="login()"]' ) . click ( ) ;
121
- } ) ;
162
+ . then ( function ( ) {
163
+ waitForCondition ( ) ;
164
+ browser . wait ( EC . visibilityOf ( $ ( '[ng-click="login()"]' ) ) , 15000 ) ;
165
+ element ( by . model ( 'credentials.username' ) )
166
+ . sendKeys ( username ) ;
167
+ element ( by . model ( 'credentials.password' ) )
168
+ . sendKeys ( password ) ;
169
+ browser . wait ( EC . elementToBeClickable ( $ ( '[ng-click="login()"]' ) ) , 15000 ) ;
170
+ return $ ( '[ng-click="login()"]' ) . click ( ) ;
171
+ } ) ;
122
172
} ;
123
173
124
174
/**
125
175
* Login as admin.
126
176
*
127
177
* @return {Promise }
128
178
*/
129
- MM . loginAsAdmin = function ( ) {
179
+ MM . loginAsAdmin = function ( ) {
130
180
return MM . loginAs ( USERS . ADMIN . LOGIN , USERS . ADMIN . PASSWORD ) ;
131
181
} ;
132
182
@@ -135,7 +185,7 @@ MM.loginAsAdmin = function() {
135
185
*
136
186
* @return {Promise }
137
187
*/
138
- MM . loginAsStudent = function ( ) {
188
+ MM . loginAsStudent = function ( ) {
139
189
return MM . loginAs ( USERS . STUDENT . LOGIN , USERS . STUDENT . PASSWORD ) ;
140
190
} ;
141
191
@@ -145,7 +195,7 @@ MM.loginAsStudent = function() {
145
195
*
146
196
* @return {Promise }
147
197
*/
148
- MM . loginAsTeacher = function ( ) {
198
+ MM . loginAsTeacher = function ( ) {
149
199
return MM . loginAs ( USERS . TEACHER . LOGIN , USERS . TEACHER . PASSWORD ) ;
150
200
} ;
151
201
@@ -154,7 +204,7 @@ MM.loginAsTeacher = function() {
154
204
*
155
205
* @return {Promise }
156
206
*/
157
- MM . logout = function ( ) {
207
+ MM . logout = function ( ) {
158
208
return MM . clickOnInSideMenu ( 'Change site' ) ;
159
209
} ;
160
210
@@ -163,17 +213,22 @@ MM.logout = function() {
163
213
*
164
214
* @return {Promise }
165
215
*/
166
- MM . openSideMenu = function ( ) {
216
+ MM . openSideMenu = function ( ) {
167
217
var menuBtn = $ ( currentNavBar + ' [menu-toggle="left"]:not(.hide)' ) ;
218
+ waitForCondition ( ) ;
219
+ browser . wait ( EC . visibilityOf ( menuBtn ) , 10000 ) ;
220
+ browser . wait ( EC . elementToBeClickable ( menuBtn ) , 50000 ) ;
221
+
168
222
function navigateBack ( ) {
169
- return MM . goBack ( ) . then ( function ( ) {
223
+ return MM . goBack ( ) . then ( function ( ) {
170
224
return openMenu ( ) ;
171
225
} ) ;
172
226
}
227
+
173
228
function openMenu ( ) {
174
- return menuBtn . isPresent ( ) . then ( function ( present ) {
229
+ return menuBtn . isPresent ( ) . then ( function ( present ) {
175
230
if ( present ) {
176
- return menuBtn . isDisplayed ( ) . then ( function ( displayed ) {
231
+ return menuBtn . isDisplayed ( ) . then ( function ( displayed ) {
177
232
if ( displayed ) {
178
233
return menuBtn . click ( ) ;
179
234
}
@@ -186,4 +241,4 @@ MM.openSideMenu = function() {
186
241
return openMenu ( ) ;
187
242
} ;
188
243
189
- global . MM = global . MM || MM ;
244
+ global . MM = global . MM || MM ;
0 commit comments