我在角度应用上自动执行e2e测试。我们在几个输入元素上有虚拟滚动(一次只加载10-20个项目,向下滚动加载更多项目并删除以前的项目以提高性能)。
我创建了一个滚动方法,直到找到DOM元素并单击它。但是,在我点击元素后,我不知道如何停止循环。
这是我到目前为止所做的:
findQuery(queryName){
this.getSavedQueryCount().then((queryCount)=>{ // Total nb of items
this.count().then((displayCount)=>{ //nb of items this screen can display
let count = 0;
let flag = 0;
let actualCount = displayCount + 1;
do
{
if(count % (actualCount) === 0 && count !== 0) count++; //handling weird behavior, index 0 never gets deleted so we increment by 1 to get the next item.
browser.executeScript('arguments[0].scrollIntoView({behavior: "smooth", block: "end"});', this.getSavedQuery(count % actualCount)); // scroll to elem at index
this.getSavedQueryByName(queryName).isPresent().then((bool)=>{ // clicking on elem if it's in the DOM
if(bool)
{
this.getSavedQueryByName(queryName).getAttribute('class').then((cl)=>{
if(!(cl === "selected"))//making sure to click only once so we don't deselect the item
{
this.getSavedQueryByName(queryName).click();
flag = 1;
}
});
}
});
count += 1;
} while(queryCount > count || flag);
});
});
}
在得到这个问题的答案后,请不要判断我将重构的代码(不要考虑奇怪的索引处理)。 到目前为止,这种方法有效,但它永远不会停止循环,直到queryCount>计数。我希望它在单击元素后停止循环(使用标志var)。
提前致谢。