การจัดการข้อยกเว้นใน Selenium เว็บไดรเวอร์ (ประเภท)
⚡ สรุปอย่างชาญฉลาด
การจัดการข้อยกเว้นใน Selenium WebDriver ป้องกันไม่ให้คำสั่งที่ล้มเหลวหยุดทำงานping การทดสอบทั้งหมดเสร็จสิ้นแล้ว Java try-catch, บล็อก catch หลายตัว, throw และ throws แต่ละแบบล้วนให้วิธีการกู้คืนที่แตกต่างกันแก่สคริปต์
ข้อยกเว้นคืออะไร?
ข้อยกเว้นคือข้อผิดพลาดที่เกิดขึ้นในระหว่างการทำงานของโปรแกรม ขณะที่โปรแกรมกำลังทำงาน ภาษาโปรแกรมจะสร้างข้อยกเว้นขึ้นมา ซึ่งต้องได้รับการจัดการ มิฉะนั้นโปรแกรมจะหยุดทำงาน
ข้อยกเว้นนี้บ่งชี้ว่า แม้ว่าเหตุการณ์ดังกล่าวอาจเกิดขึ้นได้ แต่เหตุการณ์ประเภทนี้เกิดขึ้นไม่บ่อยนัก เมื่อเมธอดไม่สามารถจัดการกับข้อยกเว้นได้ ข้อยกเว้นนั้นจะถูกส่งต่อไปยังฟังก์ชันที่เรียกใช้ Javaซึ่งเป็นแรงขับเคลื่อนหลัก Selenium ในชุดทดสอบ ทุกข้อยกเว้นของ WebDriver จะไม่มีการตรวจสอบ ดังนั้นคอมไพเลอร์จึงไม่บังคับให้คุณดักจับข้อยกเว้นเหล่านั้น ความล้มเหลวที่ไม่ได้จัดการจะปรากฏขึ้นเฉพาะในระหว่างการทำงานเท่านั้น
ประเภทของข้อยกเว้นใน Selenium ไดรเวอร์เว็บ
WebDriverException เป็นคลาสพื้นฐานของลำดับชั้น และข้อยกเว้นทั้งหมดที่อยู่ต่ำกว่านั้นจะสืบทอดมาจากคลาสนี้ ตารางนี้แสดงรายการข้อยกเว้นทั้งหมด 41 รายการที่คุณอาจพบ พร้อมกับเงื่อนไขที่ทำให้เกิดข้อยกเว้นแต่ละรายการ
| # | ข้อยกเว้น | เมื่อมันเกิดขึ้น |
|---|---|---|
| 1 | องค์ประกอบ NotVisibleException | องค์ประกอบที่มีอยู่แล้วใน DOM มีชุดคุณสมบัติที่ถูกซ่อนไว้ |
| 2 | ElementNotSelectableException | องค์ประกอบดังกล่าวอยู่ใน DOM แต่ไม่สามารถเลือกได้ ดังนั้นจึงไม่สามารถโต้ตอบได้ |
| 3 | NoSuchElementException | ไม่พบองค์ประกอบดังกล่าวด้วย ระบุตำแหน่ง ที่จัดมา |
| 4 | NosuchFrameException | การขอ กรอบ เป้าหมายที่จะเปลี่ยนไปนั้นไม่มีอยู่จริง |
| 5 | NoAlertPresentException | การเปลี่ยนไปใช้ เตือนภัย ทำงานเมื่อไม่มีการแจ้งเตือนใดๆ แสดงขึ้น |
| 6 | ไม่มีSuchWindowException | หน้าต่างเป้าหมายที่จะสลับไปนั้นไม่มีอยู่จริง |
| 7 | ข้อยกเว้นการอ้างอิงองค์ประกอบที่ไม่หมดอายุ | องค์ประกอบเว็บถูกแยกออกจากปัจจุบัน DOM. |
| 8 | SessionNotFoundException | WebDriver จะทำงานหลังจากที่คุณปิดเบราว์เซอร์แล้ว |
| 9 | ข้อยกเว้นการหมดเวลา | คำสั่งบางอย่างไม่เสร็จสมบูรณ์ภายในเวลาที่กำหนด เช่น ไม่พบองค์ประกอบที่ค้นหาภายในระยะเวลาที่กำหนด |
| 10 | WebDriverException | คลาสพื้นฐานของข้อยกเว้น WebDriver อื่นๆ; ข้อยกเว้นนี้จะเกิดขึ้นเมื่อ WebDriver ทำงานทันทีหลังจากที่คุณปิดเบราว์เซอร์ |
| 11 | การเชื่อมต่อปิดข้อยกเว้น | เกิดการตัดการเชื่อมต่อในระบบไดรเวอร์ |
| 12 | ElementClickInterceptedException | องค์ประกอบที่รับเหตุการณ์นั้นกำลังบดบังองค์ประกอบที่ร้องขอให้คลิกอยู่ |
| 13 | ElementNotInteractableException | องค์ประกอบดังกล่าวมีอยู่ใน DOM แต่ไม่สามารถโต้ตอบกับมันได้ |
| 14 | ข้อผิดพลาดในการตอบกลับ | เกิดข้อผิดพลาดบางอย่างระหว่างการโต้ตอบกับ Firefox ส่วนขยายหรือเซิร์ฟเวอร์ไดรเวอร์ระยะไกล |
| 15 | ตัวจัดการข้อผิดพลาด. ข้อผิดพลาดเซิร์ฟเวอร์ที่ไม่รู้จัก | ใช้เป็นตัวแทนเมื่อเซิร์ฟเวอร์ส่งคืนข้อผิดพลาดโดยไม่มีสแต็ก trace. |
| 16 | การเปิดใช้งาน Ime ล้มเหลว ข้อผิดพลาด | การเปิดใช้งานระบบ IME ล้มเหลว |
| 17 | ImeNotAvailableException | ไม่รองรับ IME |
| 18 | ข้อผิดพลาดใบรับรองไม่ปลอดภัย | การนำทางทำให้ตัวแทนผู้ใช้ไปเจอปัญหา คำเตือนใบรับรองซึ่งอาจเกิดขึ้นได้จากใบรับรอง TLS ที่ไม่ถูกต้องหรือหมดอายุ |
| 19 | ข้อยกเว้นอาร์กิวเมนต์ที่ไม่ถูกต้อง | อาร์กิวเมนต์นี้ไม่ตรงกับประเภทที่คาดไว้ |
| 20 | ข้อผิดพลาดคุกกี้โดเมนไม่ถูกต้อง | A คุกกี้ ถูกเพิ่มภายใต้โดเมนที่แตกต่างจากโดเมนปัจจุบัน URL. |
| 21 | ข้อผิดพลาดพิกัดไม่ถูกต้อง | การดำเนินการโต้ตอบที่ตรงกันนั้นไม่ถูกต้อง |
| 22 | ข้อผิดพลาดสถานะองค์ประกอบที่ไม่ถูกต้อง | ไม่สามารถดำเนินการคำสั่งให้เสร็จสิ้นได้ เนื่องจากองค์ประกอบไม่ถูกต้อง |
| 23 | ข้อผิดพลาดเซสชันไม่ถูกต้อง | รหัสเซสชันที่ระบุไม่อยู่ในรายการเซสชันที่ใช้งานอยู่ ดังนั้นจึงไม่มีอยู่จริงหรืออยู่ในสถานะไม่ใช้งาน |
| 24 | สวิตช์ไม่ถูกต้องไปยังTargetข้อยกเว้น | เฟรมหรือหน้าต่างเป้าหมายที่จะสลับไปนั้นไม่มีอยู่จริง |
| 25 | Javascriptข้อยกเว้น | เกิดข้อผิดพลาดขณะดำเนินการ Javaสคริปต์ที่กำหนดโดยผู้ใช้ |
| 26 | เจซอนเอเล็ค | ระบบจะขอเข้าร่วมเซสชันหากยังไม่ได้สร้างเซสชันไว้ |
| 27 | ข้อยกเว้นแอตทริบิวต์ดังกล่าว | ไม่พบแอตทริบิวต์ขององค์ประกอบนั้น |
| 28 | ย้ายTargetข้อยกเว้น OutOfBoundsException | เป้าหมายที่ระบุให้กับเมธอด move() ของ ActionChains ไม่ถูกต้อง เช่น อยู่นอกเอกสาร |
| 29 | NosuchContextException | ContextAware ซึ่งทำการทดสอบบนอุปกรณ์เคลื่อนที่ ไม่สามารถค้นหาบริบทที่ร้องขอได้ |
| 30 | NosuchCookieException | ไม่พบคุกกี้ที่มีชื่อเส้นทางตรงกับที่ระบุไว้ในคุกกี้ของเอกสารที่กำลังเรียกดูอยู่ |
| 31 | ไม่พบข้อยกเว้น | คลาสย่อยของ WebDriverException ซึ่งเกิดขึ้นเมื่อไม่มีองค์ประกอบใน DOM อยู่จริง |
| 32 | ข้อผิดพลาดเซิร์ฟเวอร์ไดรเวอร์ระยะไกล | เซิร์ฟเวอร์ไม่ตอบสนองเนื่องจากคุณสมบัติที่ระบุไว้ไม่ถูกต้อง |
| 33 | ScreenshotException | ไม่สามารถจับภาพหน้าจอได้ |
| 34 | SessionNotCreatedException | ไม่สามารถสร้างเซสชันใหม่ได้สำเร็จ |
| 35 | ไม่สามารถตั้งค่าคุกกี้ได้ ยกเว้นข้อผิดพลาด | ไดรเวอร์ไม่สามารถตั้งค่าคุกกี้ได้ |
| 36 | ข้อผิดพลาด TagNameException ที่ไม่คาดคิด | คลาสสนับสนุนไม่ได้รับองค์ประกอบเว็บตามที่คาดไว้ |
| 37 | ข้อผิดพลาดการแจ้งเตือนที่ไม่ได้รับการจัดการ | มีการแจ้งเตือนเกิดขึ้น แต่ WebDriver ไม่สามารถดำเนินการตามการแจ้งเตือนได้ |
| 38 | UnexpectedAlertPresentException | มีการแจ้งเตือนที่ไม่คาดคิดปรากฏขึ้น |
| 39 | ข้อผิดพลาดเมธอดไม่ทราบ | คำสั่งที่ร้องขอตรงกับคำสั่งที่รู้จัก URL แต่ไม่ใช่วิธีการสำหรับเรื่องนั้นโดยเฉพาะ URL. |
| 40 | UnreachableBrowserException | ไม่สามารถเปิดเบราว์เซอร์ได้ หรืออาจเกิดข้อผิดพลาดด้วยเหตุผลบางประการ |
| 41 | ข้อผิดพลาดคำสั่งที่ไม่รองรับ | WebDriver ระยะไกลไม่ส่งคำสั่งที่ถูกต้องตามที่คาดไว้ |
มีสามข้อผิดพลาดหลักที่พบในการแก้ไขข้อผิดพลาดประจำวัน: NoSuchElementException หมายถึงข้อผิดพลาด XPath หรือองค์ประกอบที่ยังไม่แสดงผล TimeoutException หมายถึงการรอที่สั้นเกินไปสำหรับ AJAX การตอบสนอง และ StaleElementReferenceException ตามมา พลวัต เรนเดอร์ใหม่
วิธีจัดการกับข้อยกเว้นใน Selenium
ต่อไปนี้คือโครงสร้างมาตรฐานสำหรับการจัดการข้อยกเว้นใน Selenium WebDriver แต่ละอันก็เรียบง่าย Javaดังนั้นจึงใช้งานได้ในทุกกรณี สคริปต์ WebDriver โดยไม่ต้องใช้ไลบรารีเพิ่มเติม
ขั้นตอนที่ 1) ลองจับ
วิธีนี้สามารถดักจับข้อยกเว้นได้โดยใช้คำสั่ง try และ catch ร่วมกัน คำสั่ง try จะกำหนดจุดเริ่มต้นของบล็อก และคำสั่ง catch จะถูกวางไว้ที่ส่วนท้ายของบล็อก try เพื่อจัดการกับข้อยกเว้น
try { // Code } catch (Exception e) { // Code for Handling exception }
ขั้นตอนที่ 2) บล็อก catch หลายอัน
มีข้อยกเว้นหลายประเภท และโค้ดบล็อกเดียวอาจทำให้เกิดข้อยกเว้นได้มากกว่าหนึ่งประเภท การใช้บล็อก catch หลายบล็อกช่วยให้คุณจัดการข้อยกเว้นแต่ละประเภทแยกกันด้วยโค้ดของตัวเอง คุณสามารถใช้บล็อก catch มากกว่าสองบล็อกได้ และไม่มีข้อจำกัดว่าคุณจะเพิ่มได้กี่บล็อก
try { //Code } catch (ExceptionType1 e1) { //Code for Handling Exception 1 } catch (ExceptionType2 e2) { //Code for Handling Exception 2 }
ขั้นตอนที่ 3) โยน
เมื่อต้องการสร้างข้อยกเว้น คำสั่ง `throw` จะส่งต่อข้อยกเว้นนั้นไปยังระบบเพื่อจัดการในระหว่างการทำงานของโปรแกรม ใช้ `throw` เมื่อคุณส่งต่อข้อยกเว้นไปยังขั้นตอนถัดไป แทนที่จะแก้ไขข้อยกเว้นในเมธอดปัจจุบัน
public static void anyFunction() throws Exception{ try { // write your code here } catch (Exception b) { // Do whatever you want to perform // Throw the Exception back to the system throw(b); } }
ขั้นตอนที่ 4) ข้อยกเว้นหลายประการ
คุณสามารถระบุข้อยกเว้นต่างๆ ไว้ในข้อความเงื่อนไข throws ได้
public static void anyFunction() throws ExceptionType1, ExceptionType2{ try { // write your code here } catch (ExceptionType1 e1) { // Code to handle exception 1 } catch (ExceptionType2 e2) { // Code to handle exception 2 }
ขั้นตอนที่ 5) ในที่สุด
คีย์เวิร์ด finally สร้างบล็อกไว้ใต้บล็อก try โดยจะทำงานโดยไม่คำนึงถึงว่าเกิดข้อยกเว้นหรือไม่ ซึ่งทำให้เป็นสถานที่ที่เหมาะสมในการปิดไดรเวอร์หรือปล่อยการจัดการไฟล์
try { //Code } catch (ExceptionType1 e1) { //Catch block } catch (ExceptionType2 e2) { //Catch block } catch (ExceptionType3 e3) { //Catch block } finally { //The finally block always executes. }
วิธีการแสดงข้อมูลข้อผิดพลาด
เมื่อตรวจพบข้อผิดพลาดแล้ว ข้อมูลการวินิจฉัยจะอยู่ในวัตถุนั้น คุณสามารถใช้วิธีต่อไปนี้ในการแสดงผล:
| วิธี | รายงานนั้นระบุถึงอะไรบ้าง |
|---|---|
| พิมพ์สแต็คTracอี() | พิมพ์สแต็ก tracเช่น ชื่อของข้อยกเว้นและคำอธิบายที่เป็นประโยชน์อื่นๆ |
| toString () | ส่งข้อความตอบกลับที่ระบุชื่อและรายละเอียดของข้อผิดพลาด |
| getMessage () | แสดงคำอธิบายของข้อผิดพลาดโดยลำพัง |
เมื่อนำข้อมูลเหล่านี้มาประกอบกับภาพหน้าจอที่ถ่ายภายในบล็อก catch การทำงานที่ล้มเหลวจะแสดงให้เห็นทั้งสิ่งที่ผิดพลาดและลักษณะของหน้าเว็บ
