หากต้องการเพิ่มองค์ความรู้ที่มีอยู่ที่นี่:
สำหรับการทดสอบ JS Capybara ต้องเก็บเธรดสองเธรด (หนึ่งเธรดสำหรับ RSpec หนึ่งสำหรับ Rails) และกระบวนการที่สอง (เบราว์เซอร์) ในการซิงค์ ทำได้โดยการรอ (ถึงเวลารอสูงสุดที่กำหนดไว้) ในตัวจับคู่และวิธีการค้นหาโหนดส่วนใหญ่
Capybara Node#all
นอกจากนี้ยังมีวิธีการที่ไม่ต้องรอเป็นหลัก การใช้มันก็เหมือนกับการบอกข้อมูลจำเพาะของคุณว่าคุณต้องการให้มันล้มเหลวเป็นระยะ ๆ
page.first('selector')
คำตอบที่ได้รับการยอมรับให้เห็น นี้เป็นที่ไม่พึงประสงค์อย่างน้อยสำหรับรายละเอียด JS เพราะการใช้งานNode#first
Node#all
ที่กล่าวว่าNode#first
จะรอถ้าคุณกำหนดค่า Capybara ดังนี้:
# rails_helper.rb
Capybara.wait_on_first_by_default = true
ตัวเลือกนี้ถูกเพิ่มใน Capybara 2.5.0และเป็นเท็จโดยค่าเริ่มต้น
ดังที่ Andrei กล่าวถึงคุณควรใช้ไฟล์
find('selector', match: :first)
หรือเปลี่ยนตัวเลือกของคุณ ทั้งสองอย่างจะทำงานได้ดีโดยไม่คำนึงถึง config หรือไดรเวอร์
หากต้องการทำให้สิ่งต่าง ๆ ซับซ้อนยิ่งขึ้นใน Capybara เวอร์ชันเก่า (หรือเมื่อเปิดใช้งานตัวเลือกการกำหนดค่า) #find
จะเพิกเฉยต่อความคลุมเครือและเพียงส่งคืนตัวเลือกการจับคู่แรก สิ่งนี้ก็ไม่ดีเช่นกันเนื่องจากทำให้ข้อกำหนดของคุณมีความชัดเจนน้อยลงซึ่งฉันคิดว่าทำไมถึงไม่เป็นพฤติกรรมเริ่มต้นอีกต่อไป ฉันจะไม่ระบุรายละเอียดเนื่องจากได้มีการกล่าวถึงข้างต้นแล้ว
แหล่งข้อมูลเพิ่มเติม: