Как получить текст на входе в транспортир
93028 просмотра
8 ответа
В документации к транспортиру я вижу следующий пример:
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?
Автор: PaulL Источник Размещён: 13.11.2019 11:33Ответы (8)
187 плюса
Ответ на этот вопрос содержится в FAQ для транспортировщиков: https://github.com/angular/protractor/blob/master/docs/faq.md#the-result-of-gettext-from-an-input-element-is-always- опорожнить
Результат getText от элемента ввода всегда пуст
Это причуда вебдрайвера. и элементы всегда имеют пустые значения getText. Вместо этого попробуйте:
element.getAttribute('value')
Что касается вопроса 2, то да, вы должны иметь возможность использовать полное имя для by.binding. Я подозреваю, что ваш шаблон на самом деле не имеет элемента, который связан с risk.name через {{}} или ng-bind.
Автор: Jmr Размещён: 04.12.2013 10:106 плюса
getText()
функция не будет работать так, как раньше, для веб-драйвера, чтобы заставить его работать для транспортира, вам нужно будет обернуть его в функцию и вернуть текст, как мы делали для нашей структуры транспортира, мы сохранили его в общая функция, как -
getText : function(element, callback) {
element.getText().then (function(text){
callback(text);
});
},
Таким образом, вы можете получить текст элемента.
Дайте мне знать, если это все еще неясно.
Автор: vdrulerz Размещён: 03.12.2013 12:312 плюса
У меня была эта проблема, я попробовал решение Jmr, но оно не сработало для меня. Поскольку все поля ввода имеют атрибуты ng-модели, я мог бы извлечь атрибут, оценить его и получить значение.
HTML
<input ng-model="qty" type="number">
Транспортир
var qty = element( by.model('qty') );
qty.sendKeys('10');
qty.evaluate(qty.getAttribute('ng-model')) //-> 10
Автор: Michael Warner
Размещён: 02.09.2016 05:31
0 плюса
Этот код работает. У меня есть поле ввода даты, которое было установлено только для чтения, что заставляет пользователя выбирать из календаря.
для даты начала:
var updateInput = "var input = document.getElementById('startDateInput');" +
"input.value = '18-Jan-2016';" +
"angular.element(input).scope().$apply(function(s) { s.$parent..searchForm[input.name].$setViewValue(input.value);})";
browser.executeScript(updateInput);
на дату окончания:
var updateInput = "var input = document.getElementById('endDateInput');" +
"input.value = '22-Jan-2016';" +
"angular.element(input).scope().$apply(function(s) { s.$parent.searchForm[input.name].$setViewValue(input.value);})";
browser.executeScript(updateInput);
Автор: user5817055
Размещён: 20.01.2016 04:36
0 плюса
код ниже работает для меня, для получения текста от ввода
return(this.webelement.getAttribute('value').then(function(text)
{
console.log("--------" + text);
}))
Автор: Naveen Kattimani
Размещён: 03.10.2017 05:23
0 плюса
Вы должны использовать Promise, чтобы напечатать или сохранить значения элемента.
var ExpectedValue:string ="AllTestings.com";
element(by.id("xyz")).getAttribute("value").then(function (Text) {
expect(Text.trim()).toEqual("ExpectedValue", "Wrong page navigated");//Assertion
console.log("Text");//Print here in Console
});
Автор: P Mishra
Размещён: 22.02.2018 11:11
-1 плюса
Вы можете попробовать что-то вроде этого
var access_token = driver.findElement(webdriver.By.name("AccToken"))
var access_token_getTextFunction = function() {
access_token.getText().then(function(value) {
console.log(value);
return value;
});
}
Чем вы можете вызвать эту функцию, где вы хотите получить значение ..
Автор: Sohel Saiyed Размещён: 01.07.2015 01:08-3 плюса
Вы можете использовать jQuery, чтобы получить текст в текстовом поле (хорошо для меня), проверьте детализацию изображения
Код:
$(document.evaluate( "xpath" ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue).val()
Example:
$(document.evaluate( "//*[@id='mail']" ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue).val()
Вставьте этот запрос в ваш код. Деталь изображения:
Автор: Dao Minh Dam Размещён: 06.11.2017 06:44Вопросы из категории :
- angularjs AngularJS с Django - конфликтующие шаблоны тегов
- angularjs Can one AngularJS controller call another?
- angularjs Вставьте HTML в представление
- angularjs Как работает привязка данных в AngularJS?
- angularjs Могу ли я использовать другой префикс вместо `ng` с angularjs?
- angularjs Не удается добраться до $ rootScope
- angularjs Отслеживание просмотров страниц Google Analytics с помощью AngularJS
- angularjs Как сделать пейджинг в AngularJS?
- angularjs Where to put model data and behaviour? [tl; dr; Use Services]
- angularjs Скрытые поля в AngularJs
- protractor Постоянный тайм-аут транспортир
- protractor Транспортир (WebDriverJS) не может переключиться в окно. nameOrHandle не определено
- protractor How to select option in drop down protractorjs e2e tests
- protractor Транспортир консольный бревно
- protractor Транспортир очистить () не работает
- protractor Как установить размер окна браузера по умолчанию в Protractor / WebdriverJS
- protractor Тестирование транспортира: Как установить значение текстовых элементов в форме входа?
- protractor Как получить текст на входе в транспортир
- protractor Транспортир: Тестирование углового приложения в Iframe
- protractor Как загрузить файл в angularjs e2e испытание транспортира