คำถามสัมภาษณ์ Selenium
โดย Aaron Cao · อัปเดตเมื่อ

การสัมภาษณ์ Selenium เน้นเรื่อง wait, locator, Page Object Model และสาเหตุที่ทำให้เทสต์ไม่เสถียร คุณควรอธิบายความแตกต่างระหว่าง implicit wait กับ explicit wait ได้ เลือกใช้ CSS แทน XPath พร้อมอธิบายเหตุผล แก้ปัญหา error จาก element ที่ล้าสมัยได้ และอธิบายได้ว่า framework ของคุณรันเทสต์แบบขนานอย่างไร
ผู้สัมภาษณ์ถามอะไรเกี่ยวกับ wait และ locator
คุณเคยเขียนเทสต์ที่ผ่านตอนรันในเครื่องแต่ fail ตอนอยู่ใน pipeline และสงสัยว่าคำตอบน่าจะเกี่ยวกับ wait แต่พูดออกมาให้ชัดเจนไม่ได้ ผู้สัมภาษณ์รู้เรื่องนี้ดี จึงมักเปิดการสัมภาษณ์ Selenium ด้วยเรื่อง wait ส่วนนี้จะอธิบายว่าคำตอบที่สมบูรณ์ควรมีหน้าตาแบบไหน
- Implicit wait กับ explicit wait. Implicit wait คือการตั้งค่าระดับ global ที่คอย poll หาการมีอยู่ของ element ทุกครั้งที่ค้นหา ส่วน explicit wait จะเจาะจงที่ element เดียวและเงื่อนไขเดียว เช่น คลิกได้หรือมองเห็นได้ explicit ได้รับความนิยมมากกว่าเพราะบอกชัดเจนว่ากำลังรอสิ่งใด
- ทำไมไม่ควรผสมสองแบบนี้เข้าด้วยกัน การใช้ทั้งสองร่วมกันอาจทำให้ timeout ทบกันในแบบที่คาดเดาได้ยาก ทีมส่วนใหญ่จึงตั้ง implicit wait เป็นศูนย์และใช้ explicit wait ตลอดทั้งระบบแทน
- Fluent wait คืออะไร explicit wait ที่ตั้งค่าช่วงเวลา polling ได้และเพิกเฉยต่อ exception บางประเภทได้
- ทำไม
Thread.sleepถึงผิด เพราะมันไม่มีเงื่อนไขใด ๆ มันทำให้เทสต์ที่ควรจะผ่านช้าลง และก็ยังทำให้เทสต์ที่ช้าอยู่แล้ว fail อยู่ดี - ควรใช้ CSS selector หรือ XPath ให้ความสำคัญกับ attribute สำหรับระบุตัวตนที่มั่นคงและทำมาเพื่อเทสต์ก่อน แล้วตามด้วย CSS เพื่อความอ่านง่าย XPath จะมีประโยชน์เมื่อคุณต้องไต่ขึ้นไปหา parent หรือจับคู่ด้วยข้อความ
- อะไรทำให้ locator เปราะบาง ชื่อ class ที่สร้างขึ้นอัตโนมัติ XPath แบบ absolute และการเลือกด้วย index บอกว่าคุณจะขอให้ developer เพิ่มอะไรแทน
ผู้สัมภาษณ์ฟังเหตุผลที่อยู่เบื้องหลังแต่ละตัวเลือก การพูดถึงความชอบโดยไม่พูดถึงต้นทุนจะฟังดูเหมือนคำตอบที่ท่องจำมา
ควรตอบคำถามเรื่อง exception และความไม่เสถียรอย่างไร
เทสต์ที่ไม่เสถียรคือประเด็นจริง ๆ ของการสัมภาษณ์ automation ระดับ senior ส่วนใหญ่ เพราะชุดเทสต์ที่ไม่มีใครเชื่อถือแย่กว่าการไม่มีชุดเทสต์เลย
- อะไรทำให้เกิด
StaleElementReferenceExceptionreference ของ element ชี้ไปยัง node ที่ไม่ได้ attach อยู่แล้ว มักเกิดจาก framework render ส่วนนั้นของหน้าใหม่ ให้ค้นหา element ใหม่แทนที่จะใช้ reference ที่เก็บไว้ซ้ำ - แล้ว
ElementNotInteractableExceptionล่ะ element มีอยู่จริงแต่ไม่สามารถโต้ตอบได้ เช่น ถูกซ่อน ถูก disable ถูก overlay บัง หรืออยู่นอกจอ - จะจัดการ
NoSuchElementExceptionอย่างไร แยกปัญหาเรื่อง timing ออกจาก element ที่หายไปจริง ๆ และอย่ากลบปัญหาด้วยการรอที่นานขึ้น - ทำไมเทสต์ถึง fail เฉพาะใน pipeline ขนาด viewport ต่างกัน environment ที่ช้ากว่า ข้อมูลเทสต์ที่ขาดหาย animation ที่จบช้ากว่า และเทสต์แบบ parallel ที่แย่งกันใช้ shared state
- จะแก้เทสต์ที่ไม่เสถียรอย่างไร วินิจฉัยประเภทของปัญหาก่อน แล้วค่อยแก้ที่ต้นเหตุ auto-retry เป็นการกลบความล้มเหลว และควรเรียกมันว่าทางเลือกสุดท้ายจริง ๆ
- จะจัดการ frame หน้าต่างใหม่ และ alert อย่างไร สลับ context อย่างชัดเจน แล้วค่อยสลับกลับในภายหลัง
QA engineer คนหนึ่งที่กำลังสัมภาษณ์ตำแหน่ง automation ระดับกลางถูกถามว่าทำไมชุดเทสต์หนึ่งถึง fail สัปดาห์ละสองครั้งโดยไม่มีการเปลี่ยนโค้ดเลย คำตอบที่โดนใจไม่ใช่รายละเอียดของ Selenium API แต่เป็นเพราะเทสต์เหล่านั้นใช้บัญชีที่ตั้งไว้ล่วงหน้าบัญชีเดียวร่วมกันและแย่งกันเอง ผู้สัมภาษณ์ให้คุณค่ากับลำดับการวินิจฉัยแบบนี้ คือดู environment กับข้อมูลก่อน แล้วค่อยดู API
คลังคำถามเพิ่มเติมตามตำแหน่งและเครื่องมือ ดูได้ที่ คำถามสัมภาษณ์ตามตำแหน่งงาน
มีคำถามเรื่อง framework และ architecture อะไรบ้าง
นอกเหนือจาก API แล้ว คณะกรรมการสัมภาษณ์อยากรู้ว่าคุณดูแลรับผิดชอบทั้งชุดเทสต์ได้หรือไม่ คำถามเหล่านี้มีน้ำหนักมากที่สุดสำหรับตำแหน่งระดับ senior
- อธิบาย Page Object Model class Page เปิดเผย action และซ่อน locator ไว้ ทำให้การเปลี่ยน UI กระทบแค่ไฟล์เดียว บอกว่ามันแก้ปัญหาอะไร การอธิบายแค่โครงสร้างโฟลเดอร์อย่างเดียวจะพลาดประเด็นสำคัญ
- Page Object มีปัญหาอะไรได้บ้าง มันจะโตขึ้นจนกลายเป็น class ที่มีนับพันบรรทัด และเริ่ม assert ภายใน method ของ page เอง assertion ควรอยู่ในเทสต์
- framework ของคุณรันเทสต์แบบขนานอย่างไร การจัดการ driver แบบ thread-safe เพื่อไม่ให้ instance ถูกใช้ร่วมกันข้าม thread บวกกับข้อมูลเทสต์ที่เป็นอิสระในแต่ละเทสต์
- Selenium Grid มีไว้ทำอะไร ใช้กระจายเทสต์ไปยังหลายเครื่องและหลายเวอร์ชันของเบราว์เซอร์ ด้วย hub และ node หรือ cloud provider ที่ทำหน้าที่เดียวกัน
- Selenium 4 เปลี่ยนอะไรไปบ้าง โปรโตคอล W3C WebDriver กลายเป็นมาตรฐาน และ JSON wire protocol เดิมถูกลบออก มี relative locator เข้ามาใหม่ และเปิดการเข้าถึง Chrome DevTools Protocol
- เมื่อไหร่ที่ไม่ควรใช้ Selenium การตรวจสอบระดับ API, logic ที่ทดสอบด้วย unit test ได้ และทุกอย่างที่อยู่นอกเบราว์เซอร์ การรู้ขอบเขตนี้คือสัญญาณของความเป็น senior
- ตัดสินใจอย่างไรว่าจะ automate อะไร เส้นทางที่มั่นคง มีมูลค่าสูง และทำซ้ำบ่อย ไม่ใช่ทุกอย่าง และไม่ใช่หน้าจอที่ยังอยู่ระหว่างออกแบบใหม่
ควรฝึกซ้อมอย่างไรก่อนสัมภาษณ์
คำตอบเรื่อง Selenium เป็นแบบที่รู้ง่ายแต่พูดออกมายาก โดยเฉพาะคำถามเรื่อง wait ที่ต้องการคำตอบสองส่วน คือคำนิยามและเหตุผล ผู้สมัครที่แค่อ่านมาจะพูดได้แค่ครึ่งแรกแล้วพูดต่อไม่ได้
เลือกห้าคำถามในนี้ที่คุณอยากเจอน้อยที่สุด แล้วตอบแต่ละข้อออกเสียงดัง ๆ ภายในเก้าสิบวินาทีโดยไม่เปิด editor เลย จากนั้นให้คนอื่นถามต่อ ซึ่งเกือบทุกครั้งจะเป็นคำถามว่าทำไม การฝึกคำถามเดียวกันนี้กับ AI ผู้สัมภาษณ์ที่ซักถามกลับจะใกล้เคียงกับการสัมภาษณ์จริงมากกว่าการอ่านลิสต์ซ้ำ และนั่นคือเหตุผลที่โหมด การสัมภาษณ์จำลอง มีอยู่
Aaron Cao ผู้ก่อตั้ง SubcueAI สร้างการฝึกซ้อมโดยเน้นที่ช่องว่างในการพูดนี้ แทนที่จะเน้นการเพิ่มคำถามให้มากขึ้น ในการสัมภาษณ์จริง แอปเดสก์ท็อปและ Side Panel ของส่วนขยายเบราว์เซอร์สามารถแสดงโครงสร้างได้ในขณะที่ผู้สัมภาษณ์กำลังพูด ซึ่งช่วยได้มากที่สุดกับเนื้อหาที่คุณซ้อมมาแล้ว สิ่งที่ผลิตภัณฑ์นี้ทำได้ และขอบเขตที่มันจะไม่มีวันข้ามไป ระบุไว้ที่หน้า ความปลอดภัย