2016-07-19 13 views
2

У меня есть следующий код на странице:Как вводить текст в selectize-контроль среагировать-использованием 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-классика:

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 в поле, но если я не вручную выбрать поле, я не могу показаться, чтобы получить Watir ввести текст.

Я попытался следующие:

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 работал без ручного управления избрание контроля. Любое руководство будет высоко оценено.

+0

Следует ли активировать ввод, чтобы быть активным? делает что-то простое, например 'b.input (class:" resizable-input "). set" foo "' работает вообще? (если нет, то какая ошибка вы получаете, если таковая имеется). Вам нужно указать внешний контейнер, чтобы выбрать вход? например делает 'puts b.inputs (class:" resizable-input "). size' возвращает значение, отличное от 1? –

+0

Спасибо Chuck Возможно, вход не требуется, чтобы быть активным, но у меня, похоже, возникают проблемы с его активированием через Watir. Да, размер возвращает значение 2 Когда я использую .С ('Магг') ' я получаю: NoMethodError: неопределенный метод 'установить' для # из C:/Ruby193 /lib/ruby/gems/1.9.1/gems/watir-classic-4.3.0/lib/watir-classic/element.rb:314:in 'method_missing ' от (irb): 553 от C:/Ruby193/bin/irb: 12: in '

' Но когда я использую .send_keys (' Magg '), я получаю => 1 –

+0

Существуют ли несколько библиотек/элементов управления React-Selectize? [Один пример] (http://furqanzafar.github.io/react-selectize/#/?category=simple&example=editable-value), который я пробовал, отлично работал с 'send_keys'. –

ответ

1

Первое - обязательное предупреждение о том, что 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?

+1

Спасибо за отзыв @titusfortner. У меня были проблемы с работой WebDriver, поэтому я просто использовал классику, чтобы показать моим коллегам чудеса Ватира и что он может сделать. Kinda упал на моем лице, когда я не смог ввести текст в поле: (Да, извините, я должен был включить .fire_event ('click') в качестве одного из вариантов, которые мы пробовали, но, увы, он не работал ни –

+2

Итак, теперь у меня работает WebDriver, и теперь мои коллеги гораздо больше впечатлены, так как я получил эту работу :) –

1

Помните, что ваш HTML имеет недопустимое значение типа для входного тега. Per W3.org тип «вход» не является допустимым типом для входного тега.

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

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

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

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

+1

Отличный совет, спасибо @ChuckvanderLinden. Я также попрошу, чтобы разработчик добавил id в элементы управления, поэтому мне не нужно ссылаться на divs вокруг них, чтобы убедиться, что я получу правильный :) –