首页 > 解决方案 > 如何从量角器中的输入元素而不是承诺中获取文本值

问题描述

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

我尝试了以下方法

方法一:

 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;})

当以两种方法打印时,它会打印出确切的值,例如:-方法1:评估方法中的序列号:assetDF1534 方法2:方法中的序列号:assetDF1534

我在两个地方使用了返回值

第一名:'assetName'变量是从上述方法中获取序列号的。

assetNameTextField.clear().sendKeys(assetName);

第二个地方:

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

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

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

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

标签: javascriptprotractor

解决方案


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

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

推荐阅读