2016-06-17 11 views
1

Ich versuche, die Anzahl der Elemente, die eine Klasse von btn btn-ok haben, und dann über jede von ihnen zu durchlaufen. anstelle von DOM-ElementeFor-Schleife in einem Versprechen

element.all(by.css('.btn.btn-ok')).count() 
 
    .then(function(count) { 
 
    for (var i = 0; i < count; i++) { 
 
     element.all(by.css(".btn.btn-ok")).get(i).click(); // <-- error! 
 
     element(by.css(".icon-issue-in-active-dropdown")).click(); 
 
     element(by.css(".icon-check-round")).click(); 
 
    } 
 
    });

Allerdings bekomme ich einen Fehler, der die Leitung besagt nicht

+2

Ich würde vorschlagen, '.each()' anstelle einer for-Schleife [Verweis hier] (http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.each). Dann können Sie etwas tun wie 'element.all (by.css (". Btn.btn-ok ")). Je (function (elem) {elem.click()});' Würde auch Ihren Code reduzieren, indem Sie das entfernen Schleife, und machen Sie es mehr DRY, da Sie diesen Element-Locator nicht zweimal aufrufen müssen. Denn du benutzt sowieso nur '.count()' für deine Schleife – Gunderson

Antwort

0

Nutzung erreicht werden kann eq statt get, die ehemaligen Objekt, das Ihnen das jQuery/jqLite gibt. Und verwenden Sie trigger (in eckigen jqLite heißt es triggerHandler).

element.all(by.css('.btn.btn-ok')).count() 
    .then(function(count) { 
    for(var i = 0; i < count; i++) { 
     element.all(by.css(".btn.btn-ok")).eq(i).triggerHandler("click") 
     element(by.css(".icon-issue-in-active-dropdown")).triggerHandler("click"); 
     element(by.css(".icon-check-round")).triggerHandler("click"); 
    } 
}); 

den Kommentar lesen, aber angular.element ruft jQuery zu klären, ob Sie es aufgenommen haben, sonst verwendet es eine abgeschwächte Version davon jqLite genannt. Here is more detail about this.

+0

er benutzt keine jquery - er benutzt angular jqlite. –

+0

@ DanielA.White Bearbeitete die Antwort – fahadash

+2

@ DanielA.White Übrigens, wenn jQuery in Ihrem Projekt enthalten ist, sperrt angular alle diese Aufrufe von jQuery. Aus Angular Docs: Wenn jQuery verfügbar ist, ist angle.element ein Alias ​​für die jQuery-Funktion. Wenn jQuery nicht verfügbar ist, delegiert angular.element an Angulars integrierte Teilmenge von jQuery mit der Bezeichnung "jQuery lite" oder "jqLite". Quelle: https://docs.angularjs.org/api/ng/function/angular. Element – fahadash