2016-06-28 28 views
0

Die App, die ich testen, gibt eine Liste mit einem Repeater und ich möchte in der Lage sein, eine bestimmte Zeile und den Klick auf die Bearbeitungsschaltfläche in dieser Zeile zu finden.Klicken auf ein Element in einem Repeater mit einem vorhandenen Locator

Ich verwende .filter die entsprechende Zeile zu finden und klicken Sie dann auf die Schaltfläche Bearbeiten, aber das funktioniert nur, wenn ich den Locator für die Schaltfläche festlegen, und nicht, ob ich auf eine vorhandene Definition siehe:

this.editWineButton = element(by.buttonText('edit')); 

this.editWine = function (wineName) { 
    this.wineListEntries.filter(function(row){ 
     return row.element(by.binding('wine.name')).getText().then(function(name){ 
      return name === wineName; 
     }); 
    }).then(function (elem) { 
    //THIS WORKS 
     var button = elem[0].element(by.buttonText('edit')); 
    //THIS FAILS 
     //var button = elem[0].editWineButton; 
     button.click(); 
    }); 
}; 

Nachdem ich den Locator für die Bearbeitungsschaltfläche bereits definiert habe, was muss ich tun, um ihn mit dem Ergebnis des Filters wiederverwenden zu können?

Wenn ich die fehlerhafte Version des Codes laufen erhalte ich die Fehler

„Fehler: Kann nicht Eigenschaft‚Klick‘undefinierter lesen“.

Ich bin sicher, dass die Antwort offensichtlich sein muss, aber ich kann meinen Fehler nicht sehen. Irgendwelche Vorschläge wären sehr willkommen.

Antwort

0

ich igniteram1 Vorschlag von Elem versucht [0] .this.editWineButton aber es hat das Problem nicht lösen. Ich habe jedoch die Lösung gefunden. Die beiden Schlüsselteile verwenden element.locator() wie in Protractor Chained Elements by Using Variables? beschrieben. Zweitens, das Hinzufügen

_this = this; 

Der überarbeitete Code ist:

this.editWineButton = element(by.buttonText('edit')); 

this.editWine = function (wineName) { 
    var _this = this; 
    this.wineListEntries.filter(function(row){ 
     return row.element(by.binding('wine.name')).getText().then(function(name){ 
      return name === wineName; 
     }); 
    }) 
    .then(function (elem) { 
     var button = elem[0].element(_this.editWineButton.locator()); 
     button.click(); 
    }); 
};