Как использовать 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]


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.