Cách sử dụng fill_in với find trong Capybara (nếu có thể)


90

Tôi muốn làm như sau nhưng không thể do bản chất của fill_in mong đợi một bộ định vị làm đối số đầu tiên.

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

Tôi cũng đã thử làm

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

nhưng không có phương thức nào trả về bất kỳ dữ liệu nào để xác định phần tử cần điền vào.

Bất kỳ ý tưởng nào về cách tốt nhất để tìm một trường thông qua regex để sử dụng với điền_in?

Câu trả lời:


160

Đi từ bộ nhớ nên có thể không đúng 100%, nhưng tôi nghĩ nếu bạn có tham chiếu đến chính phần tử, bạn sẽ sử dụng setthay vì fill_in:

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

Tuy nhiên, đối với ví dụ cụ thể của bạn, fill_insẽ có thể tìm thấy phần tử như bạn biết đó là ID:

fill_in 'donation_pledge_hundreds', with: "10"

Người đàn ông tốt, đó là một. Trường cụ thể đó được sử dụng trong các ngữ cảnh khác nhau (được xác thực / không được xác thực) và do đó sẽ có một id trường khác. donation_pledge_hundreds là phần chung của id lĩnh vực do đó so sánh sự kết thúc của tên trường $ =
kiến

8
Hãy cẩn thận khi sử dụng 'set' thay vì các phương thức tích hợp sẵn khác, vì nó không kích hoạt các sự kiện sau khi thay đổi giá trị.
Dan Caddigan

@DanCaddigan và đó là lý do tại sao nó có vẻ như f3ck3d lên: / sau đó bạn làm thế nào?
Ben

Bạn có thể sử dụng find(:css, "...").set("10").send_keys(:return)để nhấn quay lại sau đó. Nó kích hoạt các sự kiện liên quan. Tôi đã không thử nghiệm nó nhưng bạn cũng có thể find(:css, "...").set("10").trigger(:blur)nếu đó là điều của bạn.
gondalez

5

Thay vì một phương thức, bạn có thể sử dụng dấu ngoặc để trả về :namehoặc :id, ví dụ: element = find(:css, "input[id$='donation_pledge_hundreds']") fill_in element[:name], :with => "10" Phương pháp tương tự có thể được sử dụng với select- select my_type, from: find('select[name$="[type]"]')[:name]


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

Cần lưu ý rằng bạn có thể xâu chuỗi các phát hiện của mình.

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

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

Câu trả lời chỉ có mã không được khuyến khích. Vui lòng thêm một số giải thích về cách điều này giải quyết vấn đề hoặc điều này khác với các câu trả lời hiện có như thế nào. Từ đánh giá
Nick

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.