Транспортир не может вернуть значение из вложенной функции - PullRequest
0 голосов
/ 03 июня 2019

Я выполняю тестовый пример Protractor, и для избежания дублирования я хочу использовать один и тот же код для работы.

Мне нужно получить информацию о видимости конкретного элемента, которому требуется вложенная функция.

Это возвращение 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 голосов
/ 04 июня 2019

В настоящее время ваш 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();

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...