Fill_in'i Capybara'da find ile kullanma (mümkünse)


92

Aşağıdakini yapmak istiyorum, ancak fill_in doğası gereği ilk argüman olarak bir konum belirleyiciyi beklediğinden dolayı yapamam.

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

Ben de yapmayı denedim

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

ancak fill_in için öğeyi tanımlamak için herhangi bir veri döndüren yöntem yoktur.

Fill_in ile kullanmak için bir normal ifadeyle bir alanı bulmanın en iyi yolu hakkında bir fikriniz var mı?

Yanıtlar:


162

Öğenin kendisine bir referansınız varsa, setbunun yerine kullanacağınız fill_in:

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

Bununla birlikte, sizin özel örneğiniz için, fill_inkimliğini bildiğiniz öğeyi bulabilmeniz gerekir:

fill_in 'donation_pledge_hundreds', with: "10"

İyi adam, işte o. Bu belirli alan farklı bağlamlarda kullanılır (kimliği doğrulanmış / doğrulanmamış) ve bu nedenle farklı bir alan kimliği alır. donation_pledge_hundreds = dolayısıyla alan adı $ sonunu karşılaştıran alan id ortak parçasıdır
karıncalar

9
Değer değiştirildikten sonra olayları tetiklemediğinden, diğer yerleşik yöntemler yerine 'set'i kullanırken dikkatli olun.
Dan Caddigan

@DanCaddigan ve bu yüzden f3ck3d yukarı görünüyor: / o zaman nasıl yaparsın?
Ben

2
Daha find(:css, "...").set("10").send_keys(:return)sonra geri dönüş tuşuna basmak için kullanabilirsiniz . İlgili olayları tetikler. Ben test etmedim ama find(:css, "...").set("10").trigger(:blur)senin işin buysa sen de yapabilirsin .
gondalez

5

Bir yöntem yerine, geri dönmek için parantez kullanabilirsiniz :nameveya :idörneğin element = find(:css, "input[id$='donation_pledge_hundreds']") fill_in element[:name], :with => "10" , aynı yaklaşım select- ile kullanılabilir - select my_type, from: find('select[name$="[type]"]')[:name]


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

Bulgularınızı zincirleyebileceğinizi belirtmekte fayda var.

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

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

Yalnızca kod yanıtları önerilmez. Lütfen bunun sorunu nasıl çözdüğüne veya bunun mevcut yanıtlardan nasıl farklı olduğuna dair bazı açıklamalar ekleyin. Yorumdan
Nick

Bu iyi çalışıyor, withinkısmı atlayabileceğinizi bize bildirdiğiniz için teşekkürler (yani, ilk argüman).
Nitrodist

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.