Как получить текстовое значение из элемента ввода в транспортире вместо обещания

Когда я ищу в StackOverflow, я получаю несколько решений для получения значения из элемента ввода.

Я пробовал ниже методы

метод 1:

 return serialNumberTextField.getAttribute('ng-model')
                .then((text)=>{return serialNumberTextField.evaluate(text);})
                .then((evalText) =>{ console.log("serial number in eval method :"+evalText);
                        return evalText;})

метод 2:

            return serialNumberTextField.getAttribute('value')
            .then( (text) =>{
                   console.log("serial number in method :"+text);
                     return text;})

При печати двумя методами он печатает точное значение, например: - method1: серийный номер в методе eval:assetDF1534 method2: серийный номер в методе:assetDF1534

Я использовал возвращаемое значение в двух местах

первое место: переменная 'assetName' является перехватом из приведенных выше методов для получения серийного номера.

assetNameTextField.clear().sendKeys(assetName);

Второе место:

element(by.xpath("//a[contains(text(),'"+ assetName+"')]")).click();

во-первых, он работал нормально и вводил значение «assetDF1534» в текстовое поле имени ресурса, но когда дело доходит до создания веб-элементов с использованием имени ресурса, произошел сбой, потому что он дает «имя_актива» в качестве обещания вместо значения. когда я печатаю «имя_актива» в этих методах, отображаемых как обещание, как показано ниже:

имя актива для ввода в фильтр: ManagedPromise::2239 {[[PromiseStatus]]: "выполнено"} имя актива: ManagedPromise::2239 {[[PromiseStatus]]: "выполнено"}

Sendkeys обработал обещание, поскольку это метод транспортира, но не в другом случае. Как получить значение вместо обещания?


person Sarada Akurathi    schedule 10.12.2019    source источник


Ответы (2)


Вам нужно разрешить обещание, а не возвращать его. Это должно работать.

function getSerialNumber() {
  return new Promise((resolve, reject) => {
    serialNumberTextField.getAttribute('value').then((text) => {
        resolve(text);
      })
      .catch((err) => {
        reject(err);
      });
  });
}
person tehbeardedone    schedule 10.12.2019
comment
Привет, спасибо за ваше время и ответ, когда я попробовал вышеуказанное решение, я получил ошибку компиляции после (resolve, reject) и конца braces - person Sarada Akurathi; 11.12.2019
comment
@SaradaAkurathi извините за это. Я забыл часть =›. Я отредактировал фрагмент кода выше. На этот раз должно сработать. - person tehbeardedone; 12.12.2019

Нашел решение, как показано ниже:

определение функции

this.getSerialNumber = function()
    {
       return serialNumberTextField.getAttribute('value')
                .then( (text) =>{ return text; })

    };

вызов функции

this.editAsset = async function(data)
    {
        this.getSerialNumber()
            .then( (serialNumber) =>{
                data.serialNumber = serialNumber;
            });
    }

значение, возвращаемое из getSerialNumber(), присваивается значению с помощью .then(). Мы можем выполнить обещание, используя .then()

person Sarada Akurathi    schedule 11.12.2019