2014-06-06 2 views
6

Ich verwende Winkelmesser (Angular JS 's Webdriver Wrapper), und obwohl ich findElement unbegrenzt von einer einzigen WebElement Instanz verketten kann, erhalte ich einen Fehler wenn Ich versuche, findElement nach der Verwendung findElements (Plural) zu verketten.Fehler beim Aufruf von findElements nach findElements auf webdriver.WebElement (mit Winkelmesser, JS)

Fehler(Stapelüberwachung unten angegeben):

TypeError: Object [object Object] has no method 'findElement'

Chaining findElement:

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 

Verwendung nach findElement 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 

Fehlermeldung mit Spuren

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) 

Antwort

16

bekam ich das gleiche Problem mit der Version 0.24 von Winkelmesser.

Als Workaround habe ich alle Aufrufe von findElement() durch element() und alle findElements() durch all() ersetzt.

Chaining Element:

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

Mit findElement nach 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')); 

Es gibt mehr Details zu diesem Release in diesem g+ post

+1

Ach, zu oft ist die Antwort 'Aktualisierung'. Sieht so aus, als würde dies einige nicht rückwärtskompatible Änderungen einleiten. Ich muss ziemlich umstrukturieren. – JellicleCat

Verwandte Themen