คำถามสัมภาษณ์ Selenium

โดย Aaron Cao · อัปเดตเมื่อ

คำถามสัมภาษณ์ Selenium
การสัมภาษณ์ Selenium เน้นเรื่อง wait, locator, Page Object Model และสาเหตุที่ทำให้เทสต์ไม่เสถียร คุณควรอธิบายความแตกต่างระหว่าง implicit wait กับ explicit wait ได้ เลือกใช้ CSS แทน XPath พร้อมอธิบายเหตุผล แก้ปัญหา error จาก element ที่ล้าสมัยได้ และอธิบายได้ว่า framework ของคุณรันเทสต์แบบขนานอย่างไร

การสัมภาษณ์ 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 ส่วนใหญ่ เพราะชุดเทสต์ที่ไม่มีใครเชื่อถือแย่กว่าการไม่มีชุดเทสต์เลย

  • อะไรทำให้เกิด StaleElementReferenceException reference ของ 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 ของส่วนขยายเบราว์เซอร์สามารถแสดงโครงสร้างได้ในขณะที่ผู้สัมภาษณ์กำลังพูด ซึ่งช่วยได้มากที่สุดกับเนื้อหาที่คุณซ้อมมาแล้ว สิ่งที่ผลิตภัณฑ์นี้ทำได้ และขอบเขตที่มันจะไม่มีวันข้ามไป ระบุไว้ที่หน้า ความปลอดภัย

คำถามที่พบบ่อย

Selenium ยังคุ้มค่าที่จะเรียนอยู่ไหมในเมื่อมี Playwright และ Cypress แล้ว

คุ้มค่า สำหรับหลายทีมที่มีชุดเทสต์ Selenium ขนาดใหญ่อยู่แล้ว และแนวคิดต่าง ๆ ก็ถ่ายทอดตรงไปได้เลย ผู้สัมภาษณ์ขอให้เปรียบเทียบมากขึ้นเรื่อย ๆ ดังนั้นควรเตรียมพร้อมพูดถึง auto-waiting และ single-process architecture เป็นเหตุผลที่ทีมเลือกเครื่องมือที่ใหม่กว่า

ควรใช้ภาษาอะไรในการสัมภาษณ์ Selenium

ภาษาที่ระบุไว้ใน job description มักเป็น Java หรือ Python API แทบจะเหมือนกันในทุก binding ดังนั้นภาษาจึงสำคัญหลัก ๆ กับคำถามเรื่อง framework, test runner, การจัดการ dependency และวิธีจัดโครงสร้างโปรเจกต์

การสัมภาษณ์ Selenium มี live coding ด้วยหรือไม่

บ่อยครั้ง แบบฝึกหัดทั่วไปคือการทำ automation ให้กับการล็อกอินหรือการค้นหาบนเว็บไซต์สาธารณะ โดยผู้สัมภาษณ์จะสังเกตการเลือก locator ของคุณและดูว่าคุณพึ่ง sleep หรือไม่ ให้อธิบายออกเสียงว่าทำไมถึงเลือก locator แต่ละตัวไปพร้อมกัน

Selenium จัดการ CAPTCHA หรือไดอะล็อกอัปโหลดไฟล์ได้ไหม

CAPTCHA ถูกออกแบบมาเพื่อหยุด automation ดังนั้นคำตอบที่ยอมรับได้คือปิดมันในสภาพแวดล้อมทดสอบ หรือใช้ bypass token ไดอะล็อกไฟล์ของ OS โดยตรงอยู่นอกเบราว์เซอร์ คุณจึงต้องส่ง path ไปยัง input element แทน

AI assistant ช่วยฉันระหว่างสัมภาษณ์ automation แบบสดได้ไหม

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

คำถามที่เกี่ยวข้อง

← เพิ่มเติมเกี่ยวกับ คำถามสัมภาษณ์ตามตำแหน่งและหัวข้อ