Error when calling findElement method after findElements in webdriver.WebElement (using Protractor, JS)

I use Protractor (Angular JS webdriver wrapper), and although I can findElement chain unlimitedly removed from one WebElement instance, I get an error when trying to bind findElement after using findElements (plural).

Error (stack trace below):

TypeError: Object [object Object] does not have a "findElement" method

FindElement chain :

 var elementPromise = browser.findElement(by.css('body')).findElement(by.css('ul')).findElement(by.css('li')); elementPromise.findElement(by.css('.icon-meter')); // does not raise error 

Using findElement after findElements :

 var arrayPromise = browser.findElement(by.css('ul')).findElements(by.css('li')); elementPromise = arrayPromise.then(function(elems) { return elems[0]; }); elementPromise.findElement(by.css('.icon-meter')); // => raises error 

Error message with string

 TypeError: Object [object Object] has no method 'findElement' at repl:1:16 at /home/markham/src/dataraptor-rails4/spec/node_modules/elementexplorer-convenience.js:83:19 at webdriver.promise.ControlFlow.runInNewFrame_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1598:20) at webdriver.promise.ControlFlow.runEventLoop_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1463:8) at wrapper [as _onTimeout] (timers.js:252:14) at Timer.listOnTimeout [as ontimeout] (timers.js:110:15) 
+6
source share
1 answer

I have the same problem with version 0.24 of the protractor.

As a workaround, I replaced all calls to findElement() with element() and all findElements() with all() .

Chain element :

 var elementPromise = browser.element(by.css('body')).element(by.css('ul')).element(by.css('li')); elementPromise.element(by.css('.icon-meter')); 

Using findElement after findElements :

 var arrayPromise = browser.element(by.css('ul')).all(by.css('li')); elementPromise = arrayPromise.then(function(elems) { return elems[0]; }); elementPromise.element(by.css('.icon-meter')); 

More details about this release in this g + post

+16
source

Source: https://habr.com/ru/post/970475/


All Articles