2016-08-26 8 views
1

私のアプリケーションでは、レコードの行に無限のスクロールが使用されます。つまり、最後のレコードのような特定のレコードのロケータは常に同じになりますが、私はスクロールする。分度器 - 同じロケータを持つ2つの要素を比較する

私はそれが

分度器機能を持っている「等しい」が、私はそれがに基づいて比較したとスクロールされた後、それが最後の要素に対応する同じ要素にスクロールされる前に、最後の要素に対応する要素を比較したいです同じロケータを持つ最後の要素を比較すると、常に同じ結果になるのはなぜですか?

2つの要素を直接比較する他の方法はありますか?

答えて

1

非常に単純です。スクロールする前に、いくつかの変数にテキストを格納します。再びスクロールを実行した後、同じロケータを使用して最新のレコードのテキストを取得します。以下のサンプルコードを見てください。

var textOfLastRecordBeforescrolling = element.all(by.css("someLocator")).last().getText(); 
//Perform Scrolling 
var textOfLastRecordAfterscrolling = element.all(by.css("someLocator")).last().getText(); 
expect(textOfLastRecordBeforescrolling).toEqual(textOfLastRecordAfterscrolling) //do whatever comparison you want do 
1

おそらく、最初の要素から情報を保存し、次にスクロールし、2番目の要素から情報を取得して比較する必要があります。

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

は、代わりに読み取り、テキストの直接要素オブジェクトを比較することはできませんか? – Manya

+0

@Manyaこれで何をしたいですか?分度器のWeb要素には、セレクタや実行可能な関数のリストなど、いくつかの静的な要素が含まれていますが、これらはすべて、呼び出されたときに実行される約束を解決します。その関数の結果は、一般的にはオブジェクト自体ではなく、通常有用です。 – user2020347

1

ウェブ要素のインスタンスを比較するために、あなたはelement(...).getId()によって返される値をテストすることができます。

返されたIDは、ページ内に遭遇するHTMLElementオブジェクトごとに生成された参照であり、id属性/プロパティとは関係ありません。

これは、コンテンツをスクロールして最後の要素を交換するのを待つための例です:

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

このソリューションはよく見えます。欠点は、===演算子を使って 'ids'を比較できないことだけです。私はそのためにlocaleCompareを使用する必要があります – Manya

+0

@Manya、実行は非同期なので、2つの要素を等価演算子で直接比較することはできません。それは約束の解決を経なければならない。 –

関連する問題