如何从量角器中的输入元素而不是承诺中获取文本值

How to get as text value from input element in protractor instead of promise

当我在 Whosebug 中搜索时,我得到了多种解决方案来从输入元素中获取值。

我尝试了下面的方法

方法一:

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

方法二:

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

当用这两种方法打印时,它打印出准确的值 例如:- method1:eval方法中的序列号:assetDF1534 方法2:方法中的序列号:assetDF1534

我在两个地方使用了 return 值

第一名:'assetName'变量是从上面的方法中catch得到序列号的

assetNameTextField.clear().sendKeys(assetName);

第二名:

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

首先,它工作正常并在资产名称文本字段中输入值 'assetDF1534' 但是当使用资产名称创建 Web 元素时失败了,因为它给出了 'assetName' 作为承诺的价值。当我在那些显示为承诺的方法中打印 'assetName' 时,如下所示:

要在过滤器中输入的资产名称是:ManagedPromise::2239 {[[PromiseStatus]]: "fulfilled"} 资产名称是:ManagedPromise::2239 {[[PromiseStatus]]:"fulfilled"}

Sendkeys 处理 promise,因为它是一种量角器方法,但在另一种情况下则不然。如何获取价值而不是承诺?

您需要解决 promise 而不是返回它。这应该有效。

function getSerialNumber() {
  return new Promise((resolve, reject) => {
    serialNumberTextField.getAttribute('value').then((text) => {
        resolve(text);
      })
      .catch((err) => {
        reject(err);
      });
  });
}

找到如下解决方案:

函数定义

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

    };

函数调用

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

getSerialNumber() 中的值 return 已分配给使用 .then() 的值。我们可以使用 .then()

解决承诺