@@ -217,6 +217,80 @@ module.exports = {
217
217
} , timeout , timeoutMessage ) ;
218
218
} ,
219
219
220
+ /**
221
+ * Waits until an css element exists and returns it
222
+ * @param {string } elementSelector - HTML element CSS selector
223
+ * @param {integer } waitInMilliseconds - (optional) number of milliseconds to wait for the element
224
+ * @returns {Promise } a promisse that will resolve if the element is found within timeout
225
+ * @example
226
+ * helpers.waitForCssXpathElement('#login-button', 5000);
227
+ */
228
+ waitForCssXpathElement : function ( elementSelector , waitInMilliseconds ) {
229
+ // use either passed in timeout or global default
230
+ var timeout = waitInMilliseconds || DEFAULT_TIMEOUT ;
231
+
232
+ // if the locator starts with '//' assume xpath, otherwise css
233
+ var selector = ( localizador . indexOf ( '//' ) === 0 ) ? "xpath" : "css" ;
234
+
235
+ // readable error message
236
+ var timeoutMessage = attributeName + ' still exists after ' + waitInMilliseconds + ' milliseconds' ;
237
+
238
+ // wait until the element exists
239
+ return driver . wait ( selenium . until . elementLocated ( { [ selector ] : elementSelector } ) , timeout , timeoutMessage ) ;
240
+ } ,
241
+
242
+ /**
243
+ * Scroll until element is visible
244
+ * @param {WebElement } elemento - selenium web element
245
+ * @returns {Promise } a promise that will resolve to the scripts return value.
246
+ * @example
247
+ * helpers.scrollToElement(webElement);
248
+ */
249
+ scrollToElement : function ( element ) {
250
+ return driver . executeScript ( 'return arguments[0].scrollIntoView(false);' , element ) ;
251
+ } ,
252
+
253
+ /**
254
+ * Select a value inside a dropdown list by its text
255
+ * @param {string } elementSelector - css or xpath selector
256
+ * @param {string } optionName - name of the option to be chosen
257
+ * @param {Promise } a promise that will resolve when the click command has completed
258
+ * @example
259
+ * helpers.selectByVisibleText('#country', 'Brazil');
260
+ */
261
+ selectDropdownValueByVisibleText : async function ( elementSelector , optionName ) {
262
+ var select = await helpers . waitForCssXpathElement ( elementSelector ) ;
263
+ var selectElements = await select . findElements ( { css : 'option' } ) ;
264
+ var options = [ ] ;
265
+
266
+ for ( var option of selectElements ) {
267
+ options . push ( ( await option . getText ( ) ) . toUpperCase ( ) ) ;
268
+ }
269
+ optionName = optionName . toUpperCase ( ) ;
270
+
271
+ return selectElements [ options . indexOf ( optionName ) ] . click ( ) ;
272
+ } ,
273
+
274
+ /**
275
+ * Awaits and returns an array of all windows opened
276
+ * @param {integer } waitInMilliseconds - (optional) number of milliseconds to wait for the result
277
+ * @returns {Promise } a promise that will resolve with an array of window handles.
278
+ * @example
279
+ * helpers.waitForNewWindows();
280
+ */
281
+ waitForNewWindows : async function ( waitInMilliseconds ) {
282
+ // use either passed in timeout or global default
283
+ var timeout = waitInMilliseconds || DEFAULT_TIMEOUT ;
284
+
285
+ var windows = [ ] ;
286
+ for ( var i = 0 ; i < timeout ; i += 1000 ) {
287
+ windows = await driver . getAllWindowHandles ( ) ; // procura por todas as windows abertas
288
+ if ( windows . length > 1 ) return windows ;
289
+
290
+ await driver . sleep ( 1000 ) ;
291
+ }
292
+ } ,
293
+
220
294
/**
221
295
* Get the content value of a :before pseudo element
222
296
* @param {string } cssSelector - css selector of element to inspect
0 commit comments