11'use strict' ;
2- let By , EC , Runner ;
2+ let By ;
3+ let EC ;
4+ let Runner ;
5+ let Key ;
36
47const requireg = require ( 'requireg' ) ;
58const Helper = require ( '../helper' ) ;
@@ -108,19 +111,13 @@ class Protractor extends Helper {
108111 this . options . waitForTimeout /= 1000 ; // convert to seconds
109112 }
110113
111- _init ( ) {
114+ async _init ( ) {
112115 Runner = requireg ( 'protractor/built/runner' ) . Runner ;
113116 By = requireg ( 'protractor' ) . ProtractorBy ;
114- this . isProtractor5 = ! requireg ( 'protractor' ) . wrapDriver ;
117+ Key = requireg ( 'protractor' ) . Key ;
118+
115119 this . context = this . options . rootElement ;
116- try {
117- // get selenium-webdriver
118- this . webdriver = requireg ( 'selenium-webdriver' ) ;
119- } catch ( e ) {
120- // maybe it is installed as protractor dependency?
121- this . webdriver = requireg ( 'protractor/node_modules/selenium-webdriver' ) ;
122- }
123- return Promise . resolve ( Runner ) ;
120+ return Promise . resolve ( ) ;
124121 }
125122
126123 static _checkRequirements ( ) {
@@ -237,6 +234,7 @@ class Protractor extends Helper {
237234 }
238235
239236 _withinEnd ( ) {
237+ if ( ! Object . keys ( withinStore ) . length ) return ;
240238 this . browser . findElement = withinStore . elFn ;
241239 this . browser . findElements = withinStore . elsFn ;
242240 withinStore = { } ;
@@ -308,7 +306,9 @@ class Protractor extends Helper {
308306 async click ( locator , context = null ) {
309307 let matcher = this . browser ;
310308 if ( context ) {
311- matcher = await this . _locate ( context ) ;
309+ let els = await this . _locate ( context , true ) ;
310+ assertElementExists ( els , context ) ;
311+ matcher = els [ 0 ] ;
312312 }
313313 let el = await findClickable . call ( this , matcher , locator ) ;
314314 return el . click ( ) ;
@@ -320,7 +320,7 @@ class Protractor extends Helper {
320320 async doubleClick ( locator , context = null ) {
321321 let matcher = this . browser ;
322322 if ( context ) {
323- let els = await this . _locate ( guessLocator ( locator ) || global . by . css ( locator ) ) ;
323+ let els = await this . _locate ( context , true ) ;
324324 assertElementExists ( els , context ) ;
325325 matcher = els [ 0 ] ;
326326 }
@@ -336,7 +336,7 @@ class Protractor extends Helper {
336336 if ( offsetX !== null || offsetY !== null ) {
337337 offset = { x : offsetX , y : offsetY } ;
338338 }
339- let els = await this . _locate ( guessLocator ( locator ) || global . by . css ( locator ) ) ;
339+ let els = await this . _locate ( locator , true ) ;
340340 assertElementExists ( els , locator ) ;
341341 return this . browser . actions ( ) . mouseMove ( els [ 0 ] , offset ) . perform ( ) ;
342342 }
@@ -396,13 +396,13 @@ class Protractor extends Helper {
396396 async pressKey ( key ) {
397397 let modifier ;
398398 if ( Array . isArray ( key ) && ~ [ 'Control' , 'Command' , 'Shift' , 'Alt' ] . indexOf ( key [ 0 ] ) ) {
399- modifier = this . browser . Key [ key [ 0 ] . toUpperCase ( ) ] ;
399+ modifier = Key [ key [ 0 ] . toUpperCase ( ) ] ;
400400 key = key [ 1 ] ;
401401 }
402402
403403 // guess special key in Selenium Webdriver list
404- if ( this . browser . Key [ key . toUpperCase ( ) ] ) {
405- key = this . browser . Key [ key . toUpperCase ( ) ] ;
404+ if ( Key [ key . toUpperCase ( ) ] ) {
405+ key = Key [ key . toUpperCase ( ) ] ;
406406 }
407407
408408 let action = this . browser . actions ( ) ;
@@ -467,7 +467,9 @@ class Protractor extends Helper {
467467 async checkOption ( field , context = null ) {
468468 let matcher = this . browser ;
469469 if ( context ) {
470- matcher = await matcher . findElement ( guessLocator ( context ) || global . by . css ( context ) ) ;
470+ let els = await this . _locate ( context , true ) ;
471+ assertElementExists ( els , context ) ;
472+ matcher = els [ 0 ] ;
471473 }
472474 let els = await findCheckable ( matcher , field ) ;
473475 assertElementExists ( els , field , "Checkbox or radio" ) ;
@@ -887,7 +889,7 @@ async function findCheckable(client, locator) {
887889 if ( els . length ) {
888890 return els ;
889891 }
890- return await client . findElements ( global . by . css ( locator ) ) ;
892+ return client . findElements ( global . by . css ( locator ) ) ;
891893}
892894
893895async function findFields ( client , locator ) {
@@ -970,7 +972,6 @@ async function findClickable(matcher, locator) {
970972 return els [ 0 ] ;
971973 }
972974 let literal = xpathLocator . literal ( locator . value ) ;
973-
974975 let narrowLocator = Locator . clickable . narrow ( literal ) ;
975976 let els = await matcher . findElements ( global . by . xpath ( narrowLocator ) ) ;
976977 if ( els . length ) {
0 commit comments