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.