В документации к транспортиру я вижу следующий пример:
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 не работает с полем, идентифицированным с помощью модели (я могу успешно getText для меток и других виджетов).
Я также могу запустить следующий код, используя 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 потенциально есть дефект?
источник
getText()
функция не будет работать так, как раньше для webdriver, чтобы заставить ее работать для транспортира, вам нужно будет обернуть ее в функцию и вернуть текст примерно так, как мы сделали для нашей структуры транспортира, мы сохранили его в общая функция, такая как -Таким образом вы можете получить текст элемента.
Дайте мне знать, если это все еще непонятно.
источник
У меня была эта проблема, я попробовал решение Jmr, но у меня это не сработало. Поскольку все поля ввода имеют атрибуты ng-модели, я мог бы вытащить атрибут, оценить его и получить значение.
HTML
Транспортир
источник
Этот код работает. У меня есть поле ввода даты, которое настроено только для чтения, что заставляет пользователя выбирать из календаря.
на дату начала:
на дату окончания:
источник
ниже код работает для меня, для получения текста с ввода
источник
Вы должны использовать Promise для печати или сохранения значений элемента.
источник
Вы можете попробовать что-то вроде этого
Затем вы можете вызвать эту функцию там, где хотите получить значение ..
источник
Вы можете использовать jQuery для получения текста в текстовом поле (хорошо работает для меня), проверьте детали изображения
Код:
Вставьте этот запрос в свой код. Детали изображения:
источник