我的应用程序在记录行上使用无限滚动,这意味着任何特定记录的定位器,比如说最后一条记录,总是相同,但每次滚动时,下面的记录都会有所不同。
我希望在滚动之前将对应于最后一个元素的元素与滚动后的最后一个元素相对应的元素进行比较
量角器有一个函数'等于',但我想它是基于定位器进行比较的,这就是为什么当我比较具有相同定位器但记录不同的最后元素时它总是为真的。
有没有其他方法可以直接比较两个元素?
答案 0 :(得分: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 :(得分:1)
您可能需要保存第一个元素的信息,然后滚动,从第二个元素中获取信息,然后进行比较。
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');
})
})
});
答案 2 :(得分: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);