Як використовувати 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', а не інші вбудовані методи, оскільки це не ініціює події після зміни значення.
Dan Caddigan

@DanCaddigan, і тому це здається f3ck3d: / як ти тоді?
Бен

Після цього можна 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"

Відповіді лише на код не рекомендується. Будь ласка, додайте пояснення щодо того, як це вирішує проблему, або чим це відрізняється від існуючих відповідей. З огляду
Нік,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.