ไม่มีอะไรเกิดขึ้นเมื่อกดปุ่มในแตงกวา ทดสอบคาปิบาราก่อนเข้าสู่โหมดสลีป

ฉันมีปัญหาในการมีหน้าเว็บที่มีคูปองประเภทหนึ่งที่ควรเปลี่ยนเมื่อมีการกดปุ่มหลายปุ่ม

อย่างไรก็ตาม ในกรณีหนึ่ง ดูเหมือนว่าฉันไม่สามารถคลิกปุ่มใดปุ่มหนึ่งโดยไม่เพิ่มโหมดสลีประหว่างการค้นหาองค์ประกอบและการกดปุ่ม

รหัสไม่ทำงาน:

element = page.find("[for='someButton']"])
element.click()

รหัสการทำงาน:

element = page.find("[for='someButton']"])
sleep 2
element.click()

ฉันสงสัยว่ามีอะไรที่ฉันสามารถทำได้เพื่อแก้ไขปัญหานี้โดยไม่ต้องเพิ่มการนอนหลับ เนื่องจากฉันกลัวว่านี่จะทำให้การทดสอบของฉันเปราะบางยิ่งขึ้นและทำให้เกิดความล่าช้าโดยไม่จำเป็น

ป.ล. ไม่มีข้อผิดพลาดเกิดขึ้นและฉันไม่ได้เขียนเว็บแอปพลิเคชันด้วยตัวเอง อย่างไรก็ตาม ฉันได้พูดคุยกับผู้ดำเนินการเพจนี้แล้ว และเขาบอกว่าไม่ควรมีอะไรพิเศษเกี่ยวกับปุ่มเดียวนี้ และควรเพิ่มผู้ฟังเหตุการณ์ทันทีที่โหลดเพจ


person Metareven    schedule 02.12.2013    source แหล่งที่มา
comment
มันล้มเหลวได้อย่างไร? คุณได้รับการหมดเวลาหรือคลิกสิ่งผิดหรือไม่?   -  person Louis    schedule 02.12.2013
comment
ไม่มีอะไรเกิดขึ้นอย่างแน่นอน (ฉันไม่ได้รับสัญญาณว่ามีอะไรผิดพลาดในคอนโซล) และการทดสอบล้มเหลวเพิ่มเติมเมื่อฉันคาดว่าคูปองจะเปลี่ยนไปหลังจากกดปุ่ม   -  person Metareven    schedule 02.12.2013
comment
ดูเหมือนว่าปัญหานี้จะรุนแรงขึ้น และหลังจากการอัปเดตแอปพลิเคชันหน้าเดียวของเรา การค้นหาและคลิกปุ่มโดยตรงหลังจากเข้าสู่ล็อบบี้ใหม่ในแอปพลิเคชันของเราไม่ทำให้สิ่งใดเกิดขึ้น และฉันถูกบังคับให้เพิ่มโหมดสลีป 1 วินาทีทั่วทุกแห่ง   -  person Metareven    schedule 03.12.2013


คำตอบ (1)


กรณีนี้อาจเกิดขึ้นได้หากปุ่มถูกแสดงผลใน DOM ก่อนที่จะผูกตัวจัดการเหตุการณ์การคลิก Capybara จะสามารถค้นหาองค์ประกอบได้ทันทีที่อยู่ใน DOM

หากเป็นกรณีนี้ การทดสอบจะแสดงให้คุณเห็นว่ามีข้อบกพร่อง (เล็กน้อย) ผู้ใช้จริงที่คลิกปุ่มในขณะที่เพจยังโหลดอยู่ก็จะเห็นผลลัพธ์เดียวกัน ตัวเลือกที่สะอาดกว่าคือการแสดงผลปุ่มผ่าน JavaScript และผูกตัวจัดการการคลิกในเวลาเดียวกัน

หากการเปลี่ยนหน้าไม่ใช่ทางเลือกสำหรับคุณ ก็อาจมีความหวัง หากมีอย่างอื่นบนเพจที่แสดงผลโดย JavaScript ในการวนซ้ำเหตุการณ์เดียวกัน คุณสามารถเพิ่มบางสิ่งลงในการทดสอบที่จะค้นหาสิ่งนั้นก่อนที่จะลองคลิกปุ่ม ตัวอย่างเช่น ในแอปที่ฉันทำงานในแต่ละวัน เราจะแสดง GIF แบบเคลื่อนไหวแบบเคลื่อนไหวบนหน้าเว็บเมื่อโหลด จากนั้นจึงซ่อนใน JavaScript เมื่อโหลดหน้าเว็บโดยสมบูรณ์ การทดสอบ Capybara ของเรารอให้ Spinner GIF ถูกซ่อนก่อนที่จะโต้ตอบกับเพจ

person Tim Moore    schedule 03.12.2013
comment
ขอบคุณ ฉันได้ทำการทดสอบเพิ่มเติมแล้ว และพบว่าการทดสอบหลายๆ รายการของฉันเสร็จสิ้นก่อนที่จะแสดงหน้าเว็บอย่างถูกต้อง ซึ่งทำให้มีความเป็นไปได้มากที่การทดสอบของเราจะพยายามคลิกปุ่มก่อนที่หน้าเว็บจะโหลดอย่างถูกต้อง จริงๆ แล้วเราไม่มี GIF แบบหมุนๆ เมื่อเปิดสิ่งใดๆ เลยนอกจากหน้าแรกของเว็บแอป แต่เรามีแอนิเมชันที่เปลี่ยนแปลงได้ ซึ่งฉันสามารถลองรอให้เสร็จสิ้นแทนได้ - person Metareven; 03.12.2013
comment
รูปแบบอื่นของสิ่งนี้คือการคลิกปุ่ม จากนั้นใช้คำสั่ง if/else ตรวจสอบผลลัพธ์ หากผลลัพธ์ไม่เกิดขึ้นให้ลองอีกครั้ง ฉันประสบปัญหาคล้ายกันที่ปุ่มที่ฉันพยายามคลิกไม่โหลดทันเวลา - person Dono; 23.07.2014