У документації на транспортир я бачу такий приклад:
describe('by model', function() {
it('should find an element by text input model', function() {
var username = element(by.model('username'));
username.clear();
username.sendKeys('Jane Doe');
var name = element(by.binding('username'));
expect(name.getText()).toEqual('Jane Doe');
});
Тут зрозуміло, що ви можете використовувати "by.model" для встановлення значень у вікні введення, але якщо ви хочете подивитися у полі введення та побачити, що в ньому, вам потрібно використовувати "by.binding".
У мене є набір коду, де я (підсумовуючи):
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(в моєму реальному коді я зберігаю сутність, потім повертаюся до неї в режимі редагування, і я перевіряю, чи моє значення було фактично збережено. Але воно все ще зводиться до тієї ж речі, і цей зразок коду створює ту ж проблему).
Це дає мені помилку:
Error: Expected '' to equal 'A value'.
Теоретично, наслідуючи приклад із документів, я можу замість цього зробити:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');
Але, здається, що by.binding не подобається повністю кваліфікованій моделі, я отримую помилку:
Error: No element found using locator: by.binding("risk.name")
Це працює (після моди), якщо я:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');
Це знаходить елемент, але також попереджає, що у мене є більше одного елемента, який відповідає 'name'. І на жаль, той, який він вибирає, не є правильним.
Отже, два питання:
- Чи має бути by.model повернути getText (), чи є проектне рішення, що цього не робити, і нам потрібно використовувати by.binding?
- Чи повинен я мати можливість використовувати повністю кваліфіковану сутність у by.binding, чи є проектне рішення, яке by.binding не любить повну назву моделі? Якщо так, то який інший класифікатор я можу використовувати для вибору між різними прив'язками?
Редагувати:
Я також спробував рішення, запропоноване vdrulerz, я змінив код наступним чином:
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
Console.log повертає порожнє значення (не обіцянку чи об'єкт), і очікування не дає повідомлення:
Expected '' to equal 'A risk name'.
Я розумію, що транспортир вже виправляє очікування на вирішення обіцянки, тому я відчуваю, що основна проблема полягає в тому, що getText не працює над полем, визначеним через модель (я можу успішно отриматиText на мітках та інших віджетах).
Я також можу запустити наступний код, використовуючи getAttribute, а не getText ():
expect(element(by.model('risk.name')).getAttribute('autofocus')).toEqual('true');
element(by.model('risk.name')).getAttribute('autofocus').then(function(text) {
console.log(text);
expect(text).toEqual('true');
});
Перша частина проходить - очікування спрацьовує. Друга частина також працює, припускаючи, що синтаксис vdrulerz також є дійсним, і він записує "true" на консоль. Я думаю, що потенційно є дефект у getText?