2016-01-19 1 views
1

У меня возникли проблемы с обрезкой результата в Protractor, чтобы затем перейти в массив. Поле, о котором идет речь, содержит строку, которая будет создавать объект JSON.Trim не является функцией в Protractor

Я перехожу в поле 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) и т. Д. Без проблем.

Может ли кто-нибудь помочь?

EDIT:

Обещание решены для сравнения двух массивов следующим:

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

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

ответ

2

getAttribute() функция транспортир возвращает значение в виде обещания, поэтому для того, чтобы использовать trim(), вы должны сначала получить значение, а затем выполнить операцию. Вот как -

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

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

EDIT: Однако функция 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()); 
    }); 
}; 

Надеется, что это помогает.

+0

Спасибо @ girish-sortur. Это удалило ошибку Protractor для того, чтобы Trim не был разрешен, но фактически не обрезает результат и все еще записывает его в расширенную форму. –

+0

Спасибо @DanHodson за указание на это. Это потому, что push не ждет, когда функция 'trimResult()' вернет значение, которое находится в форме обещания. Обновленный ответ, чтобы включить его. –

+0

Привет @ girish-sortur Спасибо за изменения. Я попытался применить оба этих параметра. Первый не использует функцию обрезки, а второй фактически не вводит массив. Я также должен объяснить, что, когда я пытаюсь сравнить два массива, я разрешаю обещания. Теперь я отредактировал свой оригинальный вопрос, чтобы отразить это. Еще раз спасибо за то, что нашли время, чтобы помочь :) –

Смежные вопросы