量角器无法从嵌套函数返回值

时间:2019-06-03 14:10:28

标签: jasmine protractor

我正在执行量角器测试用例,为了避免重复,我想将相同的代码发挥作用。

我需要获取有关需要嵌套功能的特定元素的可见性的信息。

即使此条件为true,也返回false(hiddenCssValue ==“ visible”)

  function subEntriesVisibility(elem) {
    elem.element(by.className('ct-sub-entries')).getCssValue('visibility').then(function (hiddenCssValue) {
      if (hiddenCssValue == "visible") {
        return true;
      } else {
        return false;
      }
    });
  }

即使此条件为真,也返回“”(hiddenCssValue ==“ visible”)

  function subEntriesVisibility(elem) {
    var res = "";
    elem.element(by.className('ct-sub-entries')).getCssValue('visibility').then(function (hiddenCssValue) {
      if (hiddenCssValue == "visible") {
        res = true;
      } else {
        res = false;
      }
    });
    return res;
  }

如果元素将被隐藏,我只需要获取false;如果可见,则只需获取true。当前,它每次都返回false。例如在第二个区块中,res填充为true或false

1 个答案:

答案 0 :(得分:0)

当前,您的return仅存在于传递给.then的匿名函数中。为了使用确实值,您需要在return elem.element(...subEntriesVisibility并从那里调用.then。看看

function subEntriesVisibility(elem) {
    return elem.element(by.className('ct-sub-entries'))
        .getCssValue('visibility').then(function (hiddenCssValue) {
              if (hiddenCssValue == "visible") {
                return true;
              } else {
                return false;
              }
        });
}

// How to use it
subEntriesVisibility(myElement).then(function(value){
    if (value === true) {
        // do this
    } else {
        // do that
    }
});

如果您对ES6和async/await感到满意,那么您的代码可能看起来更简单

function subEntriesVisibility(elem) {
    return elem.element(by.className('ct-sub-entries'))
        .getCssValue('visibility')
        .then((hiddenCssValue) => hiddenCssValue === "visible");
}

// How to use it. 
async function run() {
    const value = await subEntriesVisibility(myElement);

    if (value === true) {
        // do this
    } else {
        // do that
    }
}

run();

希望有帮助