2016-08-26 3 views
1

Meine Anwendung verwendet unendlich scrollen auf Reihe von Datensätzen was bedeutet, dass ein Locator für einen bestimmten Datensatz, sagen wir letzten Datensatz, wird immer gleich, aber der Datensatz darunter wird jedes Mal anders sein Ich mache eine Schriftrolle.Winkelmesser - Vergleichen Sie zwei Elemente mit dem gleichen Locator

Ich wünsche den das Element zum Vergleich zum letzten Elemente entspricht, bevor es auf das gleiche Element entsprechend letztes Element gescrollt wird, nachdem es

gescrollt wird

Protractor hat eine Funktion ‚gleich‘, aber ich nehme an, es auf der Basis vergleicht Locator, weshalb es immer als wahr ergibt, wenn ich die letzten Elemente vergleiche, die denselben Lokator aber unterschiedliche Aufzeichnung haben.

Gibt es eine andere Möglichkeit, zwei Elemente direkt zu vergleichen?

Antwort

1

Es ist sehr einfach. Bevor Sie scrollen, speichern Sie den Text in einer Variablen. Verwenden Sie nach dem erneuten Scrollen denselben Locator, um den neuesten Datensatztext zu erhalten. Sehen Sie sich den folgenden Beispielcode an.

1

Sie müssen wahrscheinlich die Informationen aus dem ersten Element speichern, dann blättern, die Informationen aus der zweiten holen und dann vergleichen.

it('Has different elements after infinite scrolling', function(){ 
 
    var elementOfInterest = $$('.infiniteScrollElement').last(); 
 

 
    // Get the text of the first element and pass it down 
 
    elementOfInterest.getText().then(function(firstElementsText){ 
 
     // Scroll however far you need to 
 
     browser.executeScript('window.scrollTo(0,500);').then(function(){ 
 
     // Compare the current elements text with the past elements text 
 
     expect(elementOfInterest.getText()).not.toEqual(firstElementsText, 'Error: The text should be different between the two elements, but was not'); 
 
     }) 
 
    }) 
 
    });

+0

Ist es nicht möglich, das Element Objekt direkt statt das Lesen von Text zu vergleichen? – Manya

+0

@Manya Was möchten Sie damit machen? Ein Winkelmesser-Webelement enthält nur ein paar statische Dinge wie seinen Selektor und eine Liste von Funktionen, die ausgeführt werden können, aber alle lösen sich in Versprechen auf, die ausgeführt werden, wenn sie aufgerufen werden. Das Ergebnis seiner Funktionen ist normalerweise nützlich, nicht generell das Objekt selbst. – user2020347

1

Um eine Instanz eines Web-Element zu vergleichen, können Sie den Wert von element(...).getId() zurück testen.

Die zurückgegebene ID ist eine Referenz, die für jede Begegnung generiert wird HTMLElement Objekt auf der Seite und ist nicht mit der ID Attribut/Eigenschaft verbunden.

Dies ist ein Beispiel den Inhalt und warten, bis das letzte Element blättern ersetzt werden:

browser.get("https://twitter.com/BBC/"); 

// define the locator for the last element 
var lastElement = $$('#stream-items-id > li').last(); 

// store the reference for the last element 
var storedRef = lastElement.getId(); 

// scroll to the last element 
browser.actions().mouseMove(lastElement).perform(); 

// wait for the last element to be another reference 
browser.wait(function(){ 
    return storedRef.then(function(a){ 
     return lastElement.getId().then(b => a !== b); 
    }, 3000); 
}); 

// compare the stored reference with the last element 
expect(lastElement.getId()).not.toEqual(storedRef); 
+0

Diese Lösung sieht gut aus. Einziger Nachteil ist, dass ich die 'IDs' nicht mit dem Operator === vergleichen kann. Ich muss LocaleCompare für diese – Manya

+0

@Manya verwenden, ist die Ausführung asynchron, so ist es nicht möglich, zwei Elemente direkt mit einem Gleichheitsoperator zu vergleichen. Es muss durch die Auflösung eines Versprechens gehen. –

Verwandte Themen