Trim 不是量角器中的函数

Trim is not a function in Protractor

我无法在 Protractor 中修剪结果然后传递到数组中。有问题的字段包含一个将构成 JSON 对象的字符串。

我传进场element(by.id(fieldName2)).sendKeys('{"Name":"JoeNew"}');.

然后将其推入具有 browser.params.newValues.push(element(by.id(fieldName2)).getAttribute('value')); 的数组中。导致 // {"Name":"JoeNew"} 被存储在数组中。

然后我重新加载页面并检查该字段的内容确实是我想要存储的内容,但是因为它是 JSONified 它将返回为:

{
    "Name":"JoeNew"
}

为了比较两者,我需要 trim() 以便它恢复到 {"Name":"JoeNew"} 以便进行比较。

browser.params.updatedValues.push(trimResult(element(by.id(fieldName2)).getAttribute('value')));

function trimResult(toTrim) {
    return toTrim = toTrim.trim();
};

悲伤地回来了Failed: toTrim.trim is not a function。但是,我能够毫无问题地执行与 Date.parse(date) 等其他字段类型类似的任务。

有人能帮忙吗?

编辑:

承诺已解决,将两个数组与以下内容进行比较:

protractor.promise.all(browser.params.updatedValues).then(function (resolvedValues) {
    console.log(resolvedValues);
    browser.params.updatedValues = resolvedValues;

    expect(browser.params.updatedValues).toEqual(browser.params.newValues);
});

getAttribute() function in protractor returns promise形式的值,所以要使用trim(),应该先获取值再进行运算。方法如下 -

browser.params.updatedValues.push(trimResult(element(by.id(fieldName2)).getAttribute('value')));

function trimResult(toTrim) {
    return toTrim.then(function(val){
        return val.trim();
    });
};

编辑: 但是 push() 函数不会等待返回 trimResult() 函数的承诺。这是有关如何推送值的示例 -

element(by.id(fieldName2)).getAttribute('value').then(function(val){
    browser.params.updatedValues.push(val.trim());
});

trimResult(element(by.id(fieldName2)).getAttribute('value'));

function trimResult(toTrim) {
    toTrim.then(function(val){
        browser.params.updatedValues.push(val.trim());
    });
};

希望对您有所帮助。