Как использовать fill_in с find в Capybara (если возможно)

90

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

find(:css, "input[id$='donation_pledge_hundreds']").fill_in :with => "10"

Я также пробовал делать

element = find(:css, "input[id$='donation_pledge_hundreds']")   
fill_in element.<method> , :with => "10"

но нет методов, которые возвращают какие-либо данные для идентификации элемента в fill_in.

Любые идеи о том, как лучше всего найти поле с помощью регулярного выражения для использования с fill_in?

муравьи
источник

Ответы:

160

Переход по памяти может быть не на 100% правильным, но я думаю, что если у вас есть ссылка на сам элемент, вы бы использовали его setвместо fill_in:

find(:css, "input[id$='donation_pledge_hundreds']").set("10")

Однако для вашего конкретного примера вы fill_inдолжны найти элемент, поскольку вы знаете его идентификатор:

fill_in 'donation_pledge_hundreds', with: "10"
Джон М
источник
Хороший человек, это тот самый. Это конкретное поле используется в разных контекстах (аутентифицировано / не аутентифицировано) и поэтому принимает другой идентификатор поля. donation_pledge_hundreds - общая часть идентификатора поля, поэтому сравнивается конец имени поля $ =
ants
8
Будьте осторожны, используя set, а не другие встроенные методы, поскольку он не запускает события после изменения значения.
Дэн Кэддиган
@DanCaddigan, и поэтому кажется, что f3ck3d up: / как дела?
Бен
Вы можете использовать find(:css, "...").set("10").send_keys(:return)для нажатия возврата после этого. Это вызывает соответствующие события. Я не тестировал это, но вы тоже можете, find(:css, "...").set("10").trigger(:blur)если вам это нравится.
gondalez
5

Вместо метода вы можете использовать скобки для возврата :nameили :id, например, element = find(:css, "input[id$='donation_pledge_hundreds']") fill_in element[:name], :with => "10" тот же подход можно использовать с select- select my_type, from: find('select[name$="[type]"]')[:name]

bhfailor
источник
3
find("input[id$='donation_pledge_hundreds']").set "10"

Стоит отметить, что вы можете цеплять свои находки.

@modal = find(".modal")
@modal.find('input[name=foo]').set "bar"
Нейт
источник
2
element = find(:css, "input[id$='donation_pledge_hundreds']")   
element.fill_in with: "10"
аки
источник
Ответы только на код не приветствуются. Пожалуйста, объясните, как это решает проблему или чем это отличается от существующих ответов. Из
Nick
0
fill_in <$id>, :with => 'text you want to fill in'
Чинц Вадгама
источник