javascript - How to get Protractor deferred Promise to work? -


scenario 1) stale element reference error

it("should have elements", function (done) {     var def = protractor.promise.defer();     var prm = browser.findelements(by.css("jive")).then((elements) => {                    elements.foreach((ele) => {             var id = ele.getid();             var loc = ele.getlocation();             var inner = ele.getinnerhtml();             var text = ele.gettext();             var tag = ele.gettagname();         });          def.then((wtf) => {             debugger;         });           });           done(); }); 

i thought code above have ton of promises on queue after running through iteration on elements. when def.then statement runs selenium telling me have stale elements. iteration running through elements css.

i hoping array of resolved promises iteration requested...

scenario 2) gives stale element reference

var promises = array<webdriver.promise.promise<any>>(); var allelements: webdriver.iwebelement[] = []; it("should have elements", function (done) {     var alllinks: webdriver.webelement[];     browser.controlflow().execute(() => {         browser.findelements(by.tagname("a")).then((works) => {             alllinks = works;             alllinks.foreach((ele) => {                 promises.push(ele.getattribute("href"));                 promises.push(ele.getid());                 promises.push(ele.getinnerhtml());                 promises.push(ele.getlocation());             });             //getting stale reference here...             protractor.promise.all(promises).then((wtf) => {                 debugger;             });              debugger;         });     }); 

please advise.

i think need map():

var links = element.all(by.tagname("a")).map(function (link) {     return {         href: link.getattribute("href"),         id: link.getid(),         innerhtml: link.getinnerhtml(),         location: link.getlocation()     } }); 

now links contain promise resolving array of objects.


Comments