2016-04-18 8 views
3

Das Problem ist sehr ähnlich zu diesem "More than one element found for locator" warning: Ich habe ng-repeat, darin habe ich zwei div s, mit ng-if auf ihnen, so dass nur eine div angezeigt wird. Jede div in ng-repeat hat die gleiche Klasse login__cell-link.Wie verkettet man "element" und "element.all"?

brauche ich Wert in diesem div s zu überprüfen, so wähle ich den Block mit ihnen

element.all(by.repeater('item in array')).then(allElements => { 
    allElements[i].element(by.className('login__cell-link')).getText(); 
}); 

Das Problem mit warnt:

WARNING - more than one element found for locator By(css selector, .login__cell-link) - the first result will be used

Diese Antwort https://stackoverflow.com/a/28464809/4753661 sagt zu verwenden: element.all(by.css("ul.nav button")).first()

Aber ich bekomme Fehler:

[TypeError: allElements[i].element.all is not a function]

Wie kann ich element und element.all verketten, oder gibt es bessere Lösungen, um in diesem Fall eine div zu überprüfen? Vielen Dank.

Antwort

7

Verwenden .all() nicht .element.all() wenn Verkettungs:

allElements[i].all(by.className('login__cell-link')).first().getText(); 

By the way, brauchen Sie nicht das Versprechen explizit zu lösen und können Kette es den ganzen Weg:

element 
    .all(by.repeater('item in array')) 
    .get(i) 
    .all(by.className('login__cell-link')) 
    .first() 
    .getText(); 

Shameless Selbst -Promotion: Wenn Sie diese Art von Fehlern früh erkennen möchten, können Sie ESLint statische Code-Analyse-Tool zusammen mit eslint-plugin-protractorcorrect-chaining rule verwenden.

+0

Danke, es funktioniert gut. Auf dem letzten Teil - in meinem Code habe ich eine Wrapper-Funktion und einen Iterator, um 'allElements.length' divs zu überprüfen, das ist nur eine kleinere Version des Codes, deshalb löse ich das Versprechen auf diese Weise. Nochmals vielen Dank für Ihre Hilfe! – Georgy

Verwandte Themen