Как ввести текст в управление реакцией выбора с помощью Watir

У меня есть следующий код на странице:

 <div class="col-md-5 col-lg-3">
  <div class="react-selectize bootstrap3 root-node simple-select open">
   <div class="react-selectize-control">
    <div class="react-selectize-placeholder">testing!</div>
     <div class="react-selectize-search-field-and-selected-values">
      <input class="resizable-input" style="width: 4px;" type="input">

Если я физически выберу поле ввода, а затем запустите следующее, используя watir-classic:

BROWSER.div(:class => 'col-md-5 col-lg-3')
       .div(:class => 'react-selectize-search-field-and-selected-values')
       .text_field(:class => 'resizable-input')
       .send_keys('Magg')

это войдет Magg в поле, но если я не выбрал поле вручную, мне кажется, что я не смогу ввести текст.

Я пробовал следующее:

BROWSER.div(:class => 'col-md-5 col-lg-3')
       .div(:class => 'react-selectize-search-field-and-selected-values')
       .text_field(:class => 'resizable-input')

с

.set('Magg')
.fire_event('onfocus')
.fire_event('mousedown')
.fire_event('mouseup')

с помощью

.parent.text_field(:class => 'resizable-input')
.parent.input(:class => 'resizable-input').set('Magg')
.input(:class => 'resizable-input').set('Magg')
.input(:class => 'resizable-input').send_keys('Magg')

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

2 ответа

Первое - обязательное предупреждение о том, что Watir Classic устарела и вам следует использовать Watir WebDriver. (которая может решить эту проблему)

Второе - технически: div(:class => 'col-md-5 col-lg-3') должно быть div(:css => '.col-md-5.col-lg-3') так как класс должен быть в единственном числе.

Вы пытались просто делать element.fire_event(:click) до element.set?

Имейте в виду, что ваш HTML имеет недопустимое значение типа для входного тега. Согласно W3.org, тип 'input' не является допустимым выбором типа для тега input.

Это, вероятно, то, что вызывает метод, который вы ожидаете работать (например, .set) терпеть неудачу. Это также означает, что все методы watir возвращают более конкретные подтипы ввода (например, .text_field) не будет работать, чтобы выбрать этот тег.

Watir определяет конкретные методы ввода (например,.set,.unset) в соответствии с конкретным подтипом входного тега и имеет методы для выбора этих конкретных типов ввода (например, .button). Обычно вы выбираете входной тег, используя метод для его подтипа, но поскольку это значение недопустимо, это не вариант в этом случае, и вы вынуждены использовать .input, Но, как мы только что обсудили, входной объект в watir не имеет таких методов, как.set. Таким образом, ваш единственный запасной вариант - использовать.sendkeys для отправки нажатий клавиш на элемент.

Если бы это был я, я бы написал ошибку в этом HTML, что он не использует правильное значение 'type' для спецификации W3.

Исправление правильности HTML-кода, вероятно, заставит его работать намного лучше с Watir или любым другим инструментом автоматизации, особенно с веб-драйверами.

Другие вопросы по тегам