Como usar fill_in com find in Capybara (se possível)


90

Eu gostaria de fazer o seguinte, mas não posso devido à natureza de fill_in esperar um localizador como o primeiro argumento.

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

Eu também tentei fazer

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

mas não há métodos que retornem quaisquer dados para identificar o elemento para fill_in.

Alguma ideia da melhor maneira de encontrar um campo por meio de um regex para usar com fill_in?

Respostas:


160

Indo de memória pode não ser 100% correto, mas acho que se você tiver uma referência ao próprio elemento, você usaria em setvez de fill_in:

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

No entanto, para seu exemplo específico, fill_indeve ser capaz de encontrar o elemento como você conhece seu ID:

fill_in 'donation_pledge_hundreds', with: "10"

Bom homem, é esse mesmo. Esse campo específico é usado em contextos diferentes (autenticado / não autenticado) e, portanto, leva um ID de campo diferente. donation_pledge_hundreds é a parte comum do ID do campo, portanto, comparando o final do nome do campo $ =
formigas

8
Tenha cuidado ao usar 'set' em vez de outros métodos embutidos, pois ele não dispara eventos após alterar o valor.
Dan Caddigan

@DanCaddigan e é por isso que parece f3ck3d up: / como você faz então?
Ben

Você pode usar find(:css, "...").set("10").send_keys(:return)para pressionar voltar depois. Ele aciona os eventos relevantes. Eu não testei, mas você também pode, find(:css, "...").set("10").trigger(:blur)se for o seu lugar.
gondalez

5

Em vez de um método, você pode usar colchetes para retornar :nameou :id, por exemplo, element = find(:css, "input[id$='donation_pledge_hundreds']") fill_in element[:name], :with => "10" A mesma abordagem pode ser usada com select- select my_type, from: find('select[name$="[type]"]')[:name]


3
find("input[id$='donation_pledge_hundreds']").set "10"

É importante notar que você pode encadear seus achados.

@modal = find(".modal")
@modal.find('input[name=foo]').set "bar"

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

Respostas apenas em código são desencorajadas. Adicione alguma explicação sobre como isso resolve o problema ou como isso difere das respostas existentes. Da avaliação
Nick

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.