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

时间:2017-07-13 11:16:46

标签: 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.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不是最佳解决方案。

3 个答案:

答案 0 :(得分:1)

function clickIfThere(){
  var bool = page.loadMoreButton.isDisplayed();
  browser.driver.sleep(0).then(function () {
    if(bool){
      // <Your Code>
      browser.wait(EC.invisibilityOf(page.loader), 15000);
      page.loadMoreButton.click();
      browser.wait(EC.invisibilityOf(page.loader), 15000);
      // </Your Code>
      clickIfThere();
    } else {
      console.log("Did NOT find load more button!");
    }
  });
}

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

这是你在找什么?

答案 1 :(得分:1)

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

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();
}

答案 2 :(得分:0)

最优雅的方法是递归调用方法。您已定义了检查元素是否显示的方法。如果是这样 - 点击它并再次检查。

它可能看起来更像是:

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

this.checkLoadMoreButton().then((result) => {
  if (result) {
    page.loadMoreButton.click();
    this.checkLoadMoreButton();
  }
}