หมายเหตุ: เรียกว่า 'คลิก' คือคลิกของผู้ใช้ปลายทาง "js click" คือคลิกผ่าน JS
เหตุใดการคลิก "ผ่าน JavaScript" จึงทำงานเมื่อคลิก WebDriver ปกติไม่ได้
มี 2 กรณีที่จะเกิดขึ้น:
I. หากคุณใช้ PhamtomJS
PhantomJS
แล้วนี้เป็นพฤติกรรมที่รู้จักมากที่สุดร่วมกันของ <div>
องค์ประกอบบางอย่างบางครั้งก็ไม่สามารถคลิกได้ยกตัวอย่างเช่น เนื่องจากPhantomJS
เป็นต้นฉบับที่สร้างขึ้นเพื่อจำลองกลไกของเบราว์เซอร์ (เช่น HTML + CSS เริ่มต้น -> ประมวลผล CSS -> การแสดงผล) แต่ไม่ได้หมายความว่าจะโต้ตอบกับผู้ใช้ปลายทาง (การดูการคลิกการลาก) ดังนั้นจึงPhamtomJS
รองรับการโต้ตอบกับผู้ใช้ปลายทางเพียงบางส่วนเท่านั้น
เหตุใด JS CLICK จึงทำงาน สำหรับการคลิกอย่างใดอย่างหนึ่งนั้นล้วนเป็นการคลิกเฉลี่ย มันก็เหมือนปืนด้วย1 กระบอกและ2 ทริกเกอร์ หนึ่งจากวิวพอร์ตหนึ่งจาก JS เนื่องจากPhamtomJS
ยอดเยี่ยมในการจำลองกลไกของเบราว์เซอร์การคลิก JS ควรทำงานได้อย่างสมบูรณ์
ครั้งที่สอง ตัวจัดการเหตุการณ์ของ "คลิก" ต้องเชื่อมโยงในช่วงเวลาที่ไม่ดี
ตัวอย่างเช่นเราได้ไฟล์ <div>
เราอาจจบลงด้วยผลลัพธ์เดียวกัน การคลิกไม่ทำงานเนื่องจาก WebdriverJS พยายามคลิกที่องค์ประกอบเมื่อไม่มีตัวจัดการเหตุการณ์การคลิก
เหตุใด JS CLICK จึงทำงาน Js click ก็เหมือนกับการฉีด js ลงในเบราว์เซอร์โดยตรง เป็นไปได้ด้วย 2 วิธี
Fistผ่านคอนโซล devtools (ใช่ WebdriverJS สื่อสารกับคอนโซลของ devtools)
ประการที่สองคือใส่<script>
แท็กลงใน HTML โดยตรง
สำหรับแต่ละเบราว์เซอร์ลักษณะการทำงานจะแตกต่างกัน แต่ไม่ว่าวิธีการเหล่านี้จะซับซ้อนกว่าการคลิกที่ปุ่ม คลิกกำลังใช้สิ่งที่มีอยู่แล้ว (ผู้ใช้คลิก) การคลิก js จะผ่านแบ็คดอร์
และสำหรับ js click จะดูเหมือนเป็นงานแบบอะซิงโครนัส สิ่งนี้เกี่ยวข้องกับหัวข้อที่ซับซ้อนของ ' งานอะซิงโครนัสของเบราว์เซอร์และการตั้งเวลางาน CPU ' (อ่านสักพักกลับไม่พบบทความอีกเลย) สำหรับระยะสั้นสิ่งนี้ส่วนใหญ่จะเป็นผลเนื่องจากการคลิก js จะต้องรอรอบการจัดตารางงานของ CPUและจะทำงานช้าลงเล็กน้อยหลังจากการเชื่อมโยงของเหตุการณ์การคลิก
(คุณสามารถทราบกรณีนี้เมื่อคุณพบว่าบางครั้งองค์ประกอบคลิกได้บางครั้งก็ไม่ได้)
สิ่งนี้เกิดขึ้นเมื่อใดและข้อเสียของวิธีแก้ปัญหานี้คืออะไร (ถ้ามี)
=> ตามที่กล่าวไว้ข้างต้นทั้งสองหมายถึงจุดประสงค์เดียว แต่เกี่ยวกับการใช้ทางเข้าใด:
- คลิก: กำลังใช้สิ่งที่ให้โดยค่าเริ่มต้นของเบราว์เซอร์
- JS click: กำลังผ่านแบ็คดอร์
=> สำหรับประสิทธิภาพนั้นยากที่จะพูดเพราะมันขึ้นอยู่กับเบราว์เซอร์ แต่โดยทั่วไป:
- คลิก: ไม่ได้หมายความว่าเร็วกว่า แต่ลงนามในตำแหน่งที่สูงกว่าในรายการกำหนดการของงานการเรียกใช้ CPU เท่านั้น
- JS click: ไม่ได้หมายความว่าช้าลง แต่ลงชื่อเข้าใช้ในตำแหน่งสุดท้ายของรายการกำหนดการของงาน CPU เท่านั้น
=> ข้อเสีย:
- คลิก: ดูเหมือนจะไม่มีข้อเสียยกเว้นคุณใช้ PhamtomJS
- JS click: ไม่ดีต่อสุขภาพ คุณอาจคลิกบางสิ่งที่ไม่มีในมุมมองโดยไม่ได้ตั้งใจ เมื่อคุณใช้สิ่งนี้ตรวจสอบให้แน่ใจว่ามีองค์ประกอบอยู่และพร้อมให้ดูและคลิกเป็นมุมมองของผู้ใช้ปลายทาง
ปล. หากคุณกำลังมองหาวิธีแก้ปัญหา
- ใช้ PhantomJS? ฉันจะแนะนำให้ใช้ Chrome headless แทน ใช่คุณสามารถตั้งค่า Chrome headless บน Ubuntu ได้ สิ่งนี้ทำงานเหมือนกับ Chrome แต่ไม่มีเพียงมุมมองและบั๊กน้อยเช่น PhantomJS
- ไม่ได้ใช้ PhamtomJS แต่ยังคงมีปัญหา? ฉันจะแนะนำให้ใช้ที่คาดหวังเงื่อนไขของไม้โปรแทรกเตอร์ด้วย
browser.wait()
( ตรวจสอบสิ่งนี้สำหรับข้อมูลเพิ่มเติม )
(อยากจะทำให้สั้น แต่จบไม่ดีอะไรที่เกี่ยวกับทฤษฎีซับซ้อนจะอธิบาย ... )