量角器 .isPresent() 停止循环

Protractor .isPresent() stop the loop

我正在尝试循环单击下拉选择,直到一个元素是 present.Even 虽然控制台记录“找到的数据”,但循环不会停止。

while (i < 23) {
//select dropdown selection
 let selectDeviceid = lists.get(i);
 deviceLogsPage.selectDevice();
    //click on the first dropdown
    selectDeviceid.click();
    //click apply button
    deviceLogsPage.clickApply();
let bool = deviceContent.isPresent().then(function (isDisplayed) {
      if (isDisplayed) {
        console.log("found data");
        return true;
        //found and stop the loop
      } else {
        console.log("no data");
        return false;
      }
    });
    console.log(bool);

    if (bool === true) {
      break;
    }
    i++;
}

因为你正在使用异步代码和承诺......bool 将是一个 Promise......永远不是真或假,总是一个承诺

您可以使用async/await

它不必在异步 IIFE 中 - 如果此代码已经在函数中,只需创建该函数即可 async

(async() => {
    while (i < 23) {
        let selectDeviceid = lists.get(i);
        deviceLogsPage.selectDevice();
        selectDeviceid.click();
        deviceLogsPage.clickApply();
        let bool = await deviceContent.isPresent();
        if (bool) {
            console.log("found data");
            break;
        } else {
            console.log("no data");
        }
        i++;
    }
)();

更简单的方法是让 bool 成为 while 条件的一部分

let bool;
while (i < 23 && !bool) {
  let selectDeviceid = lists.get(i);
  deviceLogsPage.selectDevice();
  selectDeviceid.click();
  deviceLogsPage.clickApply();
  bool = await deviceContent.isPresent();
  i++;
}