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

时间:2019-12-10 07:05:07

标签: javascript protractor

当我在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();

首先,它运行良好,并在assetname文本字段中输入值'assetDF1534',但是在使用资产名称创建Web元素时失败了,因为它使用的是'assetName'作为承诺而不是价值。当我在显示为promise的那些方法中打印“ assetName”时,如下所示:

在过滤器中输入的

资产名称是:ManagedPromise :: 2239 {[[PromiseStatus]]:“已完成”} 资产名称为:ManagedPromise :: 2239 {[[PromiseStatus]]:“已完成”}

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

2 个答案:

答案 0 :(得分:1)

您需要解决承诺而不是退还承诺。这应该起作用。

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

答案 1 :(得分:0)

找到如下解决方案:

功能定义

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()

解决承诺