วิธีใช้ fill_in กับ find ใน Capybara (ถ้าเป็นไปได้)


93

ฉันต้องการทำสิ่งต่อไปนี้ แต่ทำไม่ได้เนื่องจากลักษณะของ fill_in คาดหวังให้ locator เป็นอาร์กิวเมนต์แรก

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

มีแนวคิดเกี่ยวกับวิธีที่ดีที่สุดในการค้นหาฟิลด์ผ่าน regex เพื่อใช้กับ fill_in หรือไม่?

คำตอบ:


164

หากคุณมีการอ้างอิงถึงองค์ประกอบที่คุณจะใช้setแทนfill_in:

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

อย่างไรก็ตามสำหรับตัวอย่างเฉพาะของคุณfill_inควรจะสามารถค้นหาองค์ประกอบได้ตามที่คุณทราบว่าเป็น ID:

fill_in 'donation_pledge_hundreds', with: "10"

คนดีนั่นคือคนเดียว ฟิลด์เฉพาะนั้นถูกใช้ในบริบทที่แตกต่างกัน (พิสูจน์ตัวตน / ไม่ได้พิสูจน์ตัวตน) ดังนั้นจึงใช้ ID ฟิลด์อื่น Donate_pledge_h Hundreds เป็นส่วนทั่วไปของรหัสฟิลด์ดังนั้นการเปรียบเทียบส่วนท้ายของชื่อฟิลด์ $ =
มด

9
โปรดใช้ความระมัดระวังในการใช้ 'set' มากกว่าวิธีการอื่น ๆ ในตัวเนื่องจากจะไม่ทำให้เกิดเหตุการณ์หลังจากเปลี่ยนค่า
Dan Caddigan

@DanCaddigan และนั่นคือเหตุผลที่ดูเหมือนว่า f3ck3d ขึ้น: / คุณทำอย่างไร?
เบ็

2
คุณสามารถใช้find(:css, "...").set("10").send_keys(:return)เพื่อกดย้อนกลับได้ในภายหลัง ทำให้เกิดเหตุการณ์ที่เกี่ยวข้อง ฉันไม่ได้ทดสอบ แต่คุณสามารถทำได้find(:css, "...").set("10").trigger(:blur)ถ้านั่นเป็นของคุณ
อนดาเลซ

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"

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

ไม่แนะนำให้ใช้รหัสคำตอบเท่านั้น โปรดเพิ่มคำอธิบายว่าวิธีนี้แก้ปัญหาอย่างไรหรือแตกต่างจากคำตอบที่มีอยู่อย่างไร จากรีวิว
Nick

สิ่งนี้ใช้ได้ดีขอบคุณที่แจ้งให้เราทราบว่าคุณสามารถละเว้นwithinส่วนนั้นได้ (เช่นอาร์กิวเมนต์แรก)
Nitrodist

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.