Button 量角器:如何点击一个按钮直到它不再显示

Button 量角器:如何点击一个按钮直到它不再显示,button,while-loop,protractor,Button,While Loop,Protractor,用量角器,我试图点击一个按钮,直到它不再显示。目前这是while循环,我正在尝试这样做: while(i < 5) { browser.wait(EC.visibilityOf(page.loadMoreButton), 15000).then(function(result) { if(!result) { // wait for loader to disappear browser.wait(EC.invisi

用量角器,我试图点击一个按钮,直到它不再显示。目前这是while循环,我正在尝试这样做:

while(i < 5) {
    browser.wait(EC.visibilityOf(page.loadMoreButton), 15000).then(function(result) {
        if(!result) {

            // wait for loader to disappear
            browser.wait(EC.invisibilityOf(page.loader), 15000);

            // click on load more button
            page.loadMoreButton.click();

            // wait for loader to disappear
            browser.wait(EC.invisibilityOf(page.loader), 15000);

            console.log("FOUND load more button!");

        } else {

            console.log("Did NOT find load more button!");
        }
    });

    i++;
};
while(i<5){
browser.wait(EC.visibilityOf(page.loadMoreButton),15000)。然后(函数(result){
如果(!结果){
//等待加载程序消失
browser.wait(EC.invisibilityOf(page.loader),15000);
//单击“加载更多”按钮
page.loadMoreButton.click();
//等待加载程序消失
browser.wait(EC.invisibilityOf(page.loader),15000);
log(“找到加载更多按钮!”);
}否则{
log(“未找到加载更多按钮!”);
}
});
i++;
};

我正在给控制台写信,只是想看看它到底出了什么问题。我不知道这个按钮会出现多少次,所以我知道
而我<5
不是最好的解决方案

最优雅的方法是递归调用方法。您已经定义了检查元素是否显示的方法。如果是,请单击它并再次检查

它可能看起来不像这样:

public checkLoadMoreButton() {
  return page.loadMoreButton.isDisplayed();
}

this.checkLoadMoreButton().then((result) => {
  if (result) {
    page.loadMoreButton.click();
    this.checkLoadMoreButton();
  }
}
函数单击Ifthere(){
var bool=page.loadMoreButton.isDisplayed();
browser.driver.sleep(0)。然后(函数(){
如果(bool){
// 
browser.wait(EC.invisibilityOf(page.loader),15000);
page.loadMoreButton.click();
browser.wait(EC.invisibilityOf(page.loader),15000);
// 
单击此处();
}否则{
log(“未找到加载更多按钮!”);
}
});
}
它('应继续单击',函数()
单击此处();
}

这就是你要找的吗?

找到了一个完美的解决方案

clickLoadMoreButtonUntilNotDisplayed = function() {
    // click on load more button until it is no longer visible
    loadMoreContainer.isDisplayed().then(visible => {
        if (visible) {
            // wait for loader to disappear
            browser.wait(EC.invisibilityOf(loader), 15000);

            // click on load more button
            loadMoreButton.click();

            // wait for loader to disappear
            browser.wait(EC.invisibilityOf(loader), 15000);

            // call function
            clickLoadMoreButtonUntilNotDisplayed();
        } else {}
    }, err => {})
};

it('should keep clicking', function ()
  clickLoadMoreButtonUntilNotDisplayed();
}

Kacper:不幸的是,这不起作用。它没有单击“加载更多”按钮,好像它忽略了函数
this.checkLoadMoreButton()。然后…
。或者我做错了什么?我将
public checkLoadMoreButton()
作为函数
this.checkLoadMoreButton=function()添加到页面对象文件中{返回this.loadMoreButton.isDisplayed();};
然后我从spec
page.checkLoadMoreButton()调用它。然后((result)=>{if(result){page.loadMoreButton.click();page.checkLoadMoreButton();}}};
有点像是的,因为它单击LoadMore按钮直到不显示为止,这时它返回一个错误(元素不可见)在
页面。loadMoreButton.click();
。简而言之,它应该单击LoadMore按钮,并在不再可见时停止。
clickLoadMoreButtonUntilNotDisplayed = function() {
    // click on load more button until it is no longer visible
    loadMoreContainer.isDisplayed().then(visible => {
        if (visible) {
            // wait for loader to disappear
            browser.wait(EC.invisibilityOf(loader), 15000);

            // click on load more button
            loadMoreButton.click();

            // wait for loader to disappear
            browser.wait(EC.invisibilityOf(loader), 15000);

            // call function
            clickLoadMoreButtonUntilNotDisplayed();
        } else {}
    }, err => {})
};

it('should keep clicking', function ()
  clickLoadMoreButtonUntilNotDisplayed();
}