Удаление содержимого из текстового поля с помощью Capybara

Я пишу script, который заполняет текстовые поля Capybara, но перед заполнением полей я хочу, чтобы поля были пустыми и этот текст не был автозаполнен. В принципе, я ищу противоположность

(Object) fill_in(locator, options = {})    #empty_content_of? delete?

найдено здесь: http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Actions. Совет?

Ответ 1

После борьбы с этим я спросил коллегу, и решение должно было использовать следующее:

fill_in(locator, with: "")

Итак, например:

fill_in "Name", with: ""

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

Ответ 2

вы можете использовать собственные привязки selenium для очистки поля ввода без заполнения пустой строки

element = find('locator')
element.native.clear

Я предпочитаю этот вариант, а не fill_in.

Также, если вы думаете об этом, заполните его, чтобы найти свой локатор по метке или имени, поэтому, если у него нет метки или имени, вам все равно придется использовать find

Ответ 3

Для меня работало только это решение:

fill_in('Foo', with: 'bar', fill_options: { clear: :backspace })

У меня есть Vue.js на веб-интерфейсе.

Ответ 4

Для Реакта вы должны сделать больше, чем это. fill_in field, with: '' делает native.clear. Что не очень хорошо с React. Как не fill_in field, with: 'some text'. Так как он делает arguments[0].value = '' до ввода текста.

Я столкнулся с проблемами с react-datetime. Я решил, что это:

def fill_in_react_datetime n, options
  with = options[:with] == '' ? '' : format_date(options[:with])
  fill_in n, with: with, fill_options: {clear: [[:control, 'a'], :delete]}
end

Ответ 5

Решение, которое работает для меня и всегда было надежным:

field = find('locator')
field.value.length.times { field.send_keys [:backspace]} }

В терминах Capybara, имитирующих поведение пользователя, мне это тоже кажется правильным.