Установка текстового поля с маской JQuery - PullRequest
0 голосов
/ 03 июня 2011

Используя watir-webdriver, я пытаюсь установить значение для текстового поля.

browser.text_field(:id, "phoneNumbers_value_input").set("5555551234")

Когда я запускаю эту команду, я вижу, что watir нашел поле, потому что на нем установлен курсорполе, однако текст не вводится.Я также попробовал команды send_keys и append, но ничего не помогло.Из этих методов не выдается никаких исключений.

Единственное отличие, которое я смог найти между этим полем и другими полями на странице (все они работают нормально), заключается в том, что на нем есть эта маска JQuery.

$(selector).mask("(999) 999-9999");

Любые идеи о том, как установить текстовое поле?

Редактировать:

Еще несколько Javascript:

selector = '#' + id(field.id) + '_input';
if (field.format == 'phone') {
  $(selector).mask("(999) 999-9999");
}

HTML-код поля:

<div id="phoneNumbers_value_form_item" class="form_item validated no_focus">
  <label for="phoneNumbers_value" class="form_label">phone</label>
  <input type="text" value="" name="phoneNumbers[][value]" id="phoneNumbers_value_input" class="text">
  <div class="tip">&nbsp;</div>
  <div class="tip_validating">

  </div>
  <div class="tip_error">

  </div>
</div>

Ответы [ 2 ]

1 голос
/ 09 июля 2013

Проблема связана с фокусировкой на текстовом поле. Даже с помощью .click () каким-то образом веб-драйвер заканчивается курсором в конце, если поле ввода (см. выпуск 2377 ). Нажатие клавиши HOME перемещает курсор в начало и позволяет вводить данные в поле ввода, сохраняя при этом функциональность маски.

В Java:

WebElement txtPhone = getDriver().findElement(By.id("phoneNumbers_value_input"));
txtPhone.sendKeys(org.openqa.selenium.Keys.HOME);
txtPhone.sendKeys(phoneNumber);
1 голос
/ 04 июня 2011

Я не вижу ни одного элемента в предоставленном вами HTML, который соответствовал бы полю ввода текста, адресуемому в коде ruby ​​в верхней части вашего сообщения. например там нет ничего с идентификатором «телефон»

Исходя из HTML в вашем вопросе, я ожидаю, что сработает следующее

browser.text_field(:id, "phoneNumbers_value_input").set("5555551234")

Глядя на пример страницы, на которую вы ссылались в комментариях, когда я использую Google Chrome и функцию «Проверка элемента» в поле ввода с идентификатором «телефон», я вижу, что с прослушивателем событий связан ряд поле (размытие, фокус, ввод, нажатие клавиши, нажатие клавиши, снятие маски)

«Фокус» привлекает мое особое внимание, и, увидев его там, в этом поле, я думаю, что вам может понадобиться сначала запустить событие для того же элемента, например, событие onfocus, чтобы активировать поле, затем попытайтесь установить значение.

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

РЕДАКТИРОВАТЬ: В этом случае, на основе обратной связи от спрашивающего, ответ оказался, что они должны сначала запустить событие «unmask» для текстового поля, а затем. Установите значение, которое они хотели, чтобы вещи, чтобы работать правильно при автоматизации тестирования. Это не реализует функциональность маскировки полей, но опять же я сомневаюсь, что мандат тестирования в этом случае заключается в тщательном тестировании надстройки стороннего производителя (JQuery), и они больше заинтересованы в бизнес-логике и т. Д. В бэкэнде, поэтому просто то, что нужно, - это возможность установить значение без мешающего кода.

...