Xử lý ngoại lệ trong Selenium Trình điều khiển web (Các loại)

⚡ Tóm tắt thông minh

Xử lý ngoại lệ trong Selenium WebDriver ngăn chặn lệnh bị lỗi dừng lại.ping một đợt chạy thử toàn diện. Java Thử bắt bóng, nhiều pha chặn bóng, ném bóng, các pha ném bóng và cuối cùng mỗi phương pháp đều mang lại một cách phục hồi khác nhau cho kịch bản.

  • 🔘 Định nghĩa: Ngoại lệ là lỗi phát sinh trong quá trình thực thi chương trình, và nếu không được xử lý, chương trình sẽ bị sập.
  • ☑️ Phạm vi: Selenium WebDriver cung cấp hơn bốn mươi lớp ngoại lệ, và tất cả chúng đều kế thừa từ WebDriverException.
  • Những người thường xuyên vi phạm: Các lỗi NoSuchElementException, TimeoutException, StaleElementReferenceException và ElementNotInteractableException là nguyên nhân gây ra hầu hết các sự cố trong thực tế.
  • 🧪 Xử lý: Cấu trúc try-catch giúp cô lập một loại lỗi duy nhất, nhiều khối catch giúp phân tách nhiều loại lỗi khác nhau, và cuối cùng, khối catch luôn được thực thi.
  • 🛠️ Nâng cao: Từ khóa `throw` và `throws` truyền một ngoại lệ trở lại cho người gọi khi phương thức hiện tại không thể giải quyết được ngoại lệ đó.
  • 📊 Chẩn đoán: printStackTracCác phương thức e(), toString() và getMessage() mỗi phương thức báo cáo một mức độ chi tiết khác nhau về lỗi.

Xử lý ngoại lệ trong Selenium WebDriver với cơ chế try-catch, throw và cuối cùng là...

Ngoại lệ là gì?

Ngoại lệ là một lỗi xảy ra trong quá trình thực thi chương trình. Trong khi chương trình đang chạy, ngôn ngữ lập trình sẽ tạo ra một ngoại lệ cần được xử lý, nếu không chương trình sẽ bị sập.

Ngoại lệ này cho thấy rằng, mặc dù sự kiện có thể xảy ra, nhưng loại sự kiện này hiếm khi xảy ra. Khi một phương thức không thể xử lý ngoại lệ, nó sẽ được ném về hàm gọi nó. Trong Java, điều này thúc đẩy hầu hết Selenium Trong các bộ kiểm thử, mọi ngoại lệ của WebDriver đều không được kiểm tra, vì vậy trình biên dịch không bao giờ bắt buộc bạn phải bắt nó — lỗi không được xử lý chỉ xuất hiện khi chạy chương trình.

Các loại ngoại lệ trong Selenium webdriver

WebDriverException là lớp cơ sở của hệ thống phân cấp, và mọi ngoại lệ bên dưới đều kế thừa từ nó. Bảng liệt kê tất cả 41 ngoại lệ bạn có thể gặp phải, cùng với điều kiện gây ra mỗi ngoại lệ.

# Ngoại lệ Khi nó xảy ra
1 ElementNotVisibleException Một phần tử hiện có trong DOM có thuộc tính được đặt là ẩn.
2 Ngoại lệ ElementNotSelectable Phần tử này có trong DOM nhưng không thể được chọn, do đó không thể tương tác.
3 NoSuchElementException Không tìm thấy phần tử đó bằng định vị cung cấp.
4 NoSuchFrameException khung Mục tiêu cần chuyển sang không tồn tại.
5 NoAlertPresentException Chuyển sang một cảnh báo Chương trình sẽ chạy ngay cả khi không có cảnh báo nào được hiển thị.
6 Không có như vậyCửa sổNgoại lệ Cửa sổ mục tiêu cần chuyển đến không tồn tại.
7 Phần tử cũTham khảoNgoại lệ Phần tử web được tách rời khỏi phần tử hiện tại. DOM.
8 Ngoại lệ SessionNotFoundException WebDriver vẫn hoạt động sau khi bạn đóng trình duyệt.
9 Hết thời gian ngoại lệ Lệnh không hoàn thành kịp thời — ví dụ, phần tử cần tìm không được tìm thấy trong thời gian chờ.
10 WebDriverNgoại lệ Lớp cơ sở của các ngoại lệ WebDriver khác; cũng được đưa ra khi WebDriver hoạt động ngay sau khi bạn đóng trình duyệt.
11 ConnectionClosedException Có sự ngắt kết nối ở trình điều khiển.
12 ElementClickInterceptedException Phần tử nhận sự kiện đang che khuất phần tử được yêu cầu nhấp chuột.
13 ElementNotInteractableException Phần tử đó có tồn tại trong DOM, nhưng không thể tương tác với nó.
14 Lỗi trong phản hồi Đã xảy ra lỗi trong quá trình tương tác với... Firefox tiện ích mở rộng hoặc máy chủ trình điều khiển từ xa.
15 ErrorHandler.UnknownServerException Được sử dụng như một phần giữ chỗ khi máy chủ trả về lỗi mà không có ngăn xếp. trace.
16 ImeActivationFailedException Quá trình kích hoạt công cụ IME đã thất bại.
17 Ngoại lệ ImeNotAvailableException Hiện tại chưa hỗ trợ IME.
18 InsecureCertificateException Điều hướng khiến tác nhân người dùng truy cập vào một cảnh báo chứng chỉĐiều này có thể do chứng chỉ TLS không hợp lệ hoặc đã hết hạn gây ra.
19 Không hợp lệ Đối số không thuộc kiểu dữ liệu mong đợi.
20 InvalidCookieDomainException A Cookie được thêm vào dưới một tên miền khác thay vì tên miền hiện tại. URL.
21 Ngoại lệ tọa độ không hợp lệ Thao tác tương tác khớp không hợp lệ.
22 InvalidElementStateException Lệnh không thể hoàn thành vì phần tử không hợp lệ.
23 InvalidSessionIdException Mã định danh phiên được cung cấp không nằm trong số các phiên đang hoạt động, vì vậy phiên đó không tồn tại hoặc không hoạt động.
24 InvalidSwitchToTargetNgoại lệ Khung hoặc cửa sổ mục tiêu cần chuyển đến không tồn tại.
25 JavascriptNgoại lệ Đã xảy ra lỗi trong quá trình thực thi JavaTập lệnh do người dùng cung cấp.
26 JsonException Phiên làm việc được yêu cầu khi phiên làm việc đó chưa được tạo.
27 NoSuchAttributeException Không tìm thấy thuộc tính của một phần tử.
28 Di chuyểnTargetNgoại lệ ngoài phạm vi Mục tiêu được cung cấp cho phương thức move() của ActionChains không hợp lệ — ví dụ, nằm ngoài tài liệu.
29 NoSuchContextException ContextAware, công cụ dùng để kiểm tra thiết bị di động, không thể tìm thấy ngữ cảnh được yêu cầu.
30 NoSuchCookieException Không tìm thấy cookie nào khớp với tên đường dẫn đã cho trong số các cookie của tài liệu đang được duyệt.
31 NotFoundException Một lớp con của WebDriverException, được ném ra khi một phần tử trên DOM không tồn tại.
32 Ngoại lệ máy chủ điều khiển từ xa Máy chủ không phản hồi vì các chức năng được mô tả không phù hợp.
33 ScreenshotException Không thể chụp màn hình.
34 SessionNotCreatedException Không thể tạo phiên mới thành công.
35 Không thể thiết lập CookieException Trình điều khiển không thể thiết lập cookie.
36 Ngoại lệ tên thẻ không mong đợi Lớp hỗ trợ không nhận được phần tử web như mong đợi.
37 UnhandledAlertException Có một cảnh báo, nhưng WebDriver không thể thực hiện thao tác xử lý cảnh báo đó.
38 UnexpectedAlertPresentException Một cảnh báo bất ngờ xuất hiện.
39 UnknownMethodException Lệnh được yêu cầu khớp với một lệnh đã biết. URL nhưng không có phương pháp nào dành riêng cho trường hợp đó. URL.
40 Lỗi trình duyệt không thể truy cập Trình duyệt không thể mở hoặc bị lỗi vì lý do nào đó.
41 UnsupportedCommandException Trình điều khiển web từ xa không gửi các lệnh hợp lệ như mong đợi.

Ba lỗi thường gặp hàng ngày: NoSuchElementException có nghĩa là sai. Xpath hoặc một phần tử chưa được hiển thị, TimeoutException có nghĩa là thời gian chờ quá ngắn. AJAX phản hồi, và StaleElementReferenceException theo sau năng động Kết xuất lại.

Cách xử lý ngoại lệ trong Selenium

Dưới đây là các cấu trúc tiêu chuẩn để xử lý ngoại lệ trong Selenium WebDriver. Mỗi cái đều đơn giản. JavaVì vậy, nó hoạt động trong mọi trường hợp. Tập lệnh WebDriver không cần thư viện bổ sung.

Bước 1) Thử bắt

Phương pháp này có thể bắt ngoại lệ bằng cách sử dụng kết hợp các từ khóa try và catch. Lệnh try đánh dấu sự bắt đầu của khối lệnh, và catch được đặt ở cuối khối try, nơi nó xử lý ngoại lệ.

try
{
// Code
} catch (Exception e) {
// Code for Handling exception
}

Bước 2) Nhiều khối bắt

Có nhiều loại ngoại lệ khác nhau, và một khối mã duy nhất có thể gây ra nhiều hơn một loại. Nhiều khối catch cho phép bạn xử lý từng loại riêng biệt bằng mã riêng. Bạn có thể sử dụng nhiều hơn hai khối catch, và không có giới hạn về số lượng bạn có thể thêm vào.

try
{
//Code
} catch (ExceptionType1 e1) {
//Code for Handling Exception 1
} catch (ExceptionType2 e2) {
//Code for Handling Exception 2
}

Bước 3) Ném

Khi bạn muốn tạo ra một ngoại lệ, từ khóa `throw` sẽ chuyển nó cho hệ thống xử lý tại thời điểm chạy. Hãy sử dụng `throw` khi bạn chuyển tiếp một ngoại lệ thay vì giải quyết nó trong phương thức hiện tại.

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);
}
}

Bước 4) Nhiều ngoại lệ

Bạn có thể đề cập đến nhiều trường hợp ngoại lệ khác nhau trong mệnh đề 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
}

Bước 5) Cuối cùng

Từ khóa finally tạo ra một khối lệnh nằm bên dưới khối try. Khối lệnh này được thực thi bất kể có xảy ra ngoại lệ hay không, do đó đây là nơi thích hợp để đóng trình điều khiển hoặc giải phóng tay cầm tệp.

try {
//Code
} catch (ExceptionType1 e1) {
//Catch block
} catch (ExceptionType2 e2) {
//Catch block
} catch (ExceptionType3 e3) {
//Catch block
} finally {
//The finally block always executes.
}

Các phương pháp hiển thị thông tin ngoại lệ

Khi một ngoại lệ được bắt, chính đối tượng đó sẽ chứa thông tin chẩn đoán. Bạn có thể sử dụng các phương thức sau để hiển thị thông tin đó:

Phương pháp Nội dung báo cáo
printStackTrace () In ra ngăn xếp trace, tên của ngoại lệ và các mô tả hữu ích khác.
toString () Trả về một thông báo văn bản mô tả tên và mô tả lỗi ngoại lệ.
getMessage () Hiển thị mô tả của ngoại lệ một cách riêng biệt.

Kết hợp những thông tin này với ảnh chụp màn hình được chụp bên trong khối catch, và một lần chạy thất bại sẽ cho thấy cả lỗi xảy ra ở đâu và trang trông như thế nào.

Câu Hỏi Thường Gặp

Mọi ngoại lệ của WebDriver đều không được kiểm tra, vì chúng đều kế thừa từ RuntimeException thông qua WebDriverException. Do đó, trình biên dịch không bao giờ yêu cầu khối try-catch, điều này thuận tiện, nhưng cũng có nghĩa là lỗi định vị không được kiểm soát chỉ xuất hiện khi bài kiểm tra thực sự chạy.

Hãy định vị lại phần tử ngay lập tức trước khi bạn thực hiện thao tác trên nó thay vì lưu trữ tham chiếu. Một vòng lặp thử lại ngắn bỏ qua ngoại lệ và tải lại nút sẽ xử lý việc render lại của React hoặc Vue đáng tin cậy hơn nhiều so với việc chờ lâu hơn.

Họ giảm thiểu nó một cách mạnh mẽ nhưng không bao giờ loại bỏ hoàn toàn. Việc chờ đợi rõ ràng chỉ khắc phục các vấn đề về thời gian — một bộ định vị sai, một cú nhấp chuột bị chặn hoặc một phiên bị đóng vẫn gây ra một ngoại lệ mà chỉ có khối catch mới có thể xử lý được.

Selenium Phiên bản 4 giữ nguyên cấu trúc phân cấp, nhưng các hàm tạo chờ giờ đây nhận một tham số Duration thay vì một giá trị thời gian chờ dạng số nguyên, và việc kiểm tra tính hợp lệ đối số nghiêm ngặt hơn của W3C có nghĩa là ngoại lệ InvalidArgumentException sẽ xuất hiện đối với các giá trị không hợp lệ. Selenium 3 trường hợp được chấp nhận mà không có khiếu nại.

Động cơ định vị tự phục hồi track, trong đó các bộ chọn bị lỗi và được thay thế bằng một giải pháp thay thế hoạt động, giúp loại bỏ phần lớn các lỗi NoSuchElementException. Các mô hình tương tự nhóm các ngăn xếp lặp lại. tracVì vậy, một lỗi thực sự mới sẽ không bị che giấu giữa những lỗi lặp lại không ổn định.

Copilot mạnh về xử lý các đoạn mã mẫu – một khung sườn try-catch, một chuỗi catch theo đúng thứ tự, một khối finally để thoát khỏi trình điều khiển. Nó không thể biết ứng dụng của bạn ném ra những ngoại lệ nào, vì vậy hãy xem xét kỹ mọi khối catch được tạo ra.

Chúng bổ sung cho nhau. ITestListener tập trung việc ghi nhật ký và chụp ảnh màn hình cho bất kỳ bài kiểm tra nào thất bại, giúp giữ cho phần thân bài kiểm tra gọn gàng. Chỉ sử dụng try-catch khi kịch bản phải tiếp tục thực thi sau khi xảy ra lỗi chứ không chỉ đơn thuần là báo cáo lỗi.

Ép kiểu trình điều khiển thành TakesScreenshot bên trong khối catch hoặc finally và ghi tệp trước khi phiên đóng. Việc đặt tên hình ảnh theo tên phương thức kiểm thử giúp dễ dàng đọc được lỗi khi chạy CI mà không cần tái tạo lỗi cục bộ.

Tóm tắt bài viết này với: