Как getText на входе в protractor

В документации для protractorа я вижу следующий пример:

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». И, к сожалению, тот, который он выбирает, не является правильным.

Итак, два вопроса:

  1. Должен ли by.model иметь возможность возвращать getText (), или есть дизайнерское решение, что он этого не делает, и нам нужно использовать by.binding вместо этого?
  2. Должен ли я иметь возможность использовать полностью квалифицированный объект в каталоге by.binding или есть дизайнерское решение, которому по-привязке не нравится полное имя модели? Если да, то какой другой определитель я могу использовать для выбора между моими разными привязками?

РЕДАКТИРОВАТЬ:

Я также попробовал решение, предложенное vdrulerz, я изменил код следующим образом:

 element(by.model('risk.name')).getText().then(function(text) { console.log(text); expect(text).toEqual('A risk name'); }); 

Консоль.log возвращает пустое значение (не promise или объект), и ожидание не дает сообщение:

 Expected '' to equal 'A risk name'. 

Мое понимание заключается в том, что protractor уже исправляет ожидание решения этого обещания, поэтому я чувствую, что основная проблема заключается в том, что 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?

    На это часто задаются вопросы о частоте использования Protractor: https://github.com/angular/protractor/blob/master/docs/faq.md#the-result-of-gettext-from-an-input-element-is-always- пустой

    Результат getText из входного элемента всегда пуст

    Это причуда webdriver. и элементы всегда имеют пустые значения getText. Вместо этого попробуйте:

     element.getAttribute('value') 

    Что касается вопроса 2, да, вы должны иметь возможность использовать полное имя для привязки. Я подозреваю, что на вашем шаблоне нет элемента, связанного с risk.name через {{}} или ng-bind.

    getText() не будет работать так же, как и для webdriver, чтобы заставить ее работать для protractorа, вам нужно будет обернуть ее в функцию и вернуть текст, как мы это делали для нашей структуры protractorа, которую мы сохранили он в общей функции, такой как –

     getText : function(element, callback) { element.getText().then (function(text){ callback(text); }); }, 

    Таким образом вы можете иметь текст элемента.

    Дайте мне знать, если все еще неясно.

    У меня была эта проблема, я попробовал решение Jmr, но для меня это не сработало. Поскольку все поля ввода имеют атрибуты ng-model, я мог бы вытащить атрибут и оценить его и получить значение.

    HTML

      

    Транспортир

     var qty = element( by.model('qty') ); qty.sendKeys('10'); qty.evaluate(qty.getAttribute('ng-model')) //-> 10 

    Этот код работает. У меня есть поле ввода даты, которое было настроено только на чтение, которое заставляет пользователя выбирать из календаря.

    для даты начала:

     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); 

    ниже код работает для меня, для получения текста с ввода

     return(this.webelement.getAttribute('value').then(function(text) { console.log("--------" + text); })) 

    Вы можете попробовать что-то вроде этого

     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; }); } 

    Чем вы можете назвать эту функцию, где хотите получить значение.

    Вы должны использовать 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 }); 

    Вы можете использовать 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() 

    Внесите этот запрос выше вашего кода. Детали изображения:

    введите описание изображения здесь

    Interesting Posts

    Цвет значков панели состояния Android

    Свернуть текст по группе в кадре данных

    Как я могу остановить большие окна при изменении размера, когда я блокирую свою рабочую станцию?

    Как я могу уменьшить пропускную способность, потребляемую автоматическими обновлениями Windows?

    Создание XML-файла с использованием XDocument в C #

    Как суммировать сумму в MongoDB, чтобы получить общий счет?

    Переопределение и скрытие Java – Confused

    Сброс пароля администратора BIOS – ноутбук Dell

    В чем разница между session.Merge и session.SaveOrUpdate?

    Параметры необязательного URL-адреса Django

    Ошибка AndroidRuntime: Посылка: не удалось вывести значение маршала

    Как преобразовать время в часовой пояс устройства iPhone?

    FTP-соединение постоянно прерывается в определенный момент

    В чем разница между свойствами автогенератора и свойствами тела выражения?

    Windows 7: миниатюры изображений не отображаются

    Давайте будем гением компьютера.