Hướng dẫn catch selenium exception python - bắt trăn ngoại lệ selen
Bắt một exception - ngoại lệ trong mã tự động hóa là rất phổ biến. ‘Ngoại lệ’ biểu thị trường hợp đặc biệt hoặc không phổ biến. Show
Nội dung chính
Việc thực thi mã tự động có thể không được như mong đợi do nhiều yếu tố khách quan liên quan đến quá trình thực thi như vấn đề ổn định mạng, sự cố Internet, độ ổn định của máy chủ, v.v... Từ đó chúng ta có thể sẽ nhận được ngoại lệ trả về do không đủ thời gian chờ hoặc cú pháp, tham số không chính xác, v.v... Vì vậy việc tìm hiểu về các ngoại lệ và cách xử lý chúng cũng rất cần thiết trong quá trình tạo các mã tự động hóa. Exception là gì?Các loại Exception trong Java và Selenium Exception Handling Các ngoại lệ phổ biến trong Selenium WebDriver Avoiding và Handling các ngoại lệ phổ biến (nêu trên)
#4) org.openqa.selenium.NoAlertPresentException #5) org.openqa.selenium.InvalidSelectorException #6) org.openqa.selenium.ElementNotVisibleException
Tiến trình xử lý các ngoại lệ được gọi là Exception Handling.
Khi có ngoại lệ 4 nào đó xảy ra thì statement 5 sẽ được thực thi.Các loại Exception trong Java và SeleniumKhi không còn ngoại lệ
Ưu điểm: Làm giảm cơ hội nhận được ngoại lệ được xử lý trong thời gian biên dịch và sẽ gây ra lỗi biên dịch nếu nó không được bắt và xử lý trong thời gian biên dịch (bắt buộc phải xử lý để có thể tiếp tục biên dịch chương trình) Nếu một ngoại lệ vẫn bị bắt thì nó sẽ là một trường hợp thực sự đặc biệt đáng để kiểm tra Giảm thời gian gỡ lỗi. Mã tự động hóa nhằm mục đích tìm ra lỗi và bạn không muốn thấy quá nhiều ngoại lệ không mong muốn và tìm lý do đằng sau từng lỗi đó trong trường hợp này trình biên dịch không bắt buộc phải xử lý. Trình biên dịch bỏ qua trong thời gian biên dịch. Trong khối Catch, bạn đối phó với các trường hợp giá trị hơn Giảm các lỗi sai Khi một kịch bản nghiêm trọng xảy ra và chương trình không thể tự khôi phục thì JVM sẽ tạo ra một lỗi. Khối try-catch không thể xử lý lỗi này. Ngay cả khi người dùng cố gắng xử lý lỗi bằng cách sử dụng khối try-catch thì nó cũng không thể khôi phục sau lỗi. Báo cáo rõ ràng hơn Exception HandlingNhược điểm: Tăng số lượng dòng code vì bạn thêm mã bổ sung để tránh ngoại lệ
Cần có hiểu biết về các API, command và ngoại lệ của Web Driver
Để tìm hiểu về phương pháp Có 3 loại exception:
Checked Exception Unchecked Exception Error
Trong ví dụ trên, luồng BufferReader được đóng trong khối 3. Lệnh 4 sẽ luôn được thực thi bất kể việc thực thi khối try - catch như thế nào.Chú ý:
Throwable: 7 là lớp cha của lỗi và ngoại lệ. Nếu bạn không chắc chắn về các loại lỗi và ngoại lệ thì nên sử dụng lớp 7 cho an toàn, nó có thể bắt cả lỗi và ngoại lệ. Ví dụ:
Các ngoại lệ phổ biến trong Selenium WebDriverSelenium có một tập các ngoại lệ riêng. Trong khi phát triển các tập lệnh selenium bạn cần phải xử lý hoặc loại bỏ những ngoại lệ này. Dưới đây là một số ví dụ về các trường hợp ngoại lệ này: Tất cả các lớp thời gian chạy ngoại lệ trong Selenium WebDriver đều nằm dưới lớp superclass WebDriverException: Có rất nhiều lớp Exception trong WebDriverException, phổ biến hay thấy 1 số lớp dưới đây:
Avoiding và Handling các ngoại lệ phổ biến (nêu trên)#1) org.openqa.selenium.NoSuchElementExceptionLớp ngoại lệ thường thấy này là một lớp con của lớp 9. Ngoại lệ xảy ra khi WebDriver không thể tìm thấy và định vị các phần tử. Điều này thường xảy ra khi người kiểm tra viết bộ định vị phần tử không chính xác trong phương thức 0.Hãy xem xét rằng trong ví dụ dưới đây, id chính xác cho trường văn bản là "firstfield" nhưng người kiểm tra đã viết sai là "fistfield". Trong trường hợp này, WebDriver không thể định vị phần tử và 1 sẽ được bắn ra:
Avoiding-And-Handling : Hãy thử đưa ra một lệnh chờ. Ví dụ: : Hãy thử đưa ra một lệnh chờ. Ví dụ:
Lệnh chờ sẽ đợi 10 giây cho sự hiện diện của phần tử web với id ‘submit’. Sau đó, lệnh 7 thực hiện nhấp chuột vào nó. Nếu phần tử có sẵn nhưng nhấp chuột vẫn không thành công, một ngoại lệ sẽ bị bắt.Sử dụng thời gian trễ là một phương pháp phổ biến trong kiểm thử tự động để tạo khoảng dừng giữa các bước. Bằng cách thêm khối Try/Catch, có thể đảm bảo rằng chương trình sẽ tiếp tục ngay cả khi việc chờ đợi không thể giúp ích được gì. #2) org.openqa.selenium.NoSuchWindowException 3 nằm trong lớp 9. Ngoại lệ này được bắn ra khi WebDriver cố gắng chuyển sang một cửa sổ không hợp lệ.Đoạn mã dưới đây bắn về 5 nếu cửa sổ không tồn tại hoặc không có sẵn để chuyển đổi.
Avoiding-And-Handling : Sử dụng các window handle để lấy tập hợp các cửa sổ đang hoạt động và sau đó thực hiện các hành động tương tự. : Sử dụng các window handle để lấy tập hợp các cửa sổ đang hoạt động và sau đó thực hiện các hành động tương tự. Trong ví dụ dưới đây, driver switch được thực thi đối với mỗi window handle. Do đó, nguy cơ truyền một tham số cửa sổ sai giảm xuống.
#3) org.openqa.selenium.NoSuchFrameExceptionKhi WebDriver cố gắng chuyển sang một khung không hợp lệ, 6 trong lớp 9 được bắn ra.Đoạn mã ví dụ dưới đây sẽ bắn về 8 nếu khung 9 không tồn tại hoặc không có sẵn. 0Exception Handling: 0Trong trường hợp này, ngoại lệ được bắn ra ngay cả khi khung không được tải. Avoiding-And-Handling : Hãy thử đưa ra một lệnh chờ. Ví dụ: : Hãy thử đưa ra một lệnh chờ. Ví dụ: Lệnh chờ sẽ đợi 10 giây cho sự hiện diện của phần tử web với id ‘submit’. Sau đó, lệnh 7 thực hiện nhấp chuột vào nó. Nếu phần tử có sẵn nhưng nhấp chuột vẫn không thành công, một ngoại lệ sẽ bị bắt. 1Sử dụng thời gian trễ là một phương pháp phổ biến trong kiểm thử tự động để tạo khoảng dừng giữa các bước. Bằng cách thêm khối Try/Catch, có thể đảm bảo rằng chương trình sẽ tiếp tục ngay cả khi việc chờ đợi không thể giúp ích được gì.#2) org.openqa.selenium.NoSuchWindowException 2 3 nằm trong lớp 9. Ngoại lệ này được bắn ra khi WebDriver cố gắng chuyển sang một cửa sổ không hợp lệ.Exception Handling: 3Trong trường hợp này, ngoại lệ được bắn ra ngay cả khi khung không được tải. Trong ví dụ dưới đây, WebDriver đợi 10 giây để tải khung. Nếu khung có sẵn và vẫn có một ngoại lệ, thì nó bị bắt. Trong mọi trường hợp dự kiến có cảnh báo, luôn sử dụng explicit wait hoặc fluent wait trong một thời gian cụ thể. Nếu cảnh báo có sẵn và vẫn có một ngoại lệ, thì nó sẽ bị bắt. 4#4) org.openqa.selenium.NoAlertPresentException 1 nằm trong 9 được bắn ra khi WebDriver cố gắng chuyển sang cảnh báo không khả dụng. 5Điều này sẽ tạo ra một lỗi không hợp lệ vì cú pháp XPATH không chính xác. Avoiding and Handling: Để tránh điều này, chúng ta nên kiểm tra bộ định vị được sử dụng vì bộ định vị có thể không chính xác hoặc sai cú pháp. Sử dụng Firebug để tìm xpath có thể giảm bớt trường hợp ngoại lệ này. Để tránh điều này, chúng ta nên kiểm tra bộ định vị được sử dụng vì bộ định vị có thể không chính xác hoặc sai cú pháp. Sử dụng Firebug để tìm xpath có thể giảm bớt trường hợp ngoại lệ này. Cách xử lý ngoại lệ này sử dụng Try/Catch 6#6) org.openqa.selenium.ElementNotVisibleExceptionLớp 6 là một lớp con của lớp 7. Ngoại lệ này được bắn ra khi WebDriver cố gắng thực hiện một hành động trên một phần tử web ẩn, không thể tương tác với phần tử này. Tức là phần tử web đang ở trạng thái ẩn.Ví dụ: trong đoạn mã dưới đây, nếu nút có id = ‘submit’ bị ‘ẩn’ trong HTML, thì 8 sẽ được bắn ra. 7Trong trường hợp này, ngoại lệ được bắn ra ngay cả khi trang chưa được tải hoàn toàn. Avoiding-And-Handling: Chúng ta có thể sử dụng lệnh chờ cho phần tử nhận được hoàn toàn. Đoạn mã dưới đây chờ 10 giây cho phần tử xuất hiện. Nếu phần tử hiển thị và vẫn ném ngoại lệ, nó sẽ bị bắt. Chúng ta có thể sử dụng lệnh chờ cho phần tử nhận được hoàn toàn. Đoạn mã dưới đây chờ 10 giây cho phần tử xuất hiện. Nếu phần tử hiển thị và vẫn ném ngoại lệ, nó sẽ bị bắt. 8#7) org.openqa.selenium.ElementNotSelectableExceptionNgoại lệ này nằm trong lớp 9. 0 chỉ ra rằng phần tử web hiện diện trong trang web nhưng không thể được chọn.Ví dụ: đoạn mã dưới đây sẽ trả về một ngoại lệ 0 nếu id “swift” bị vô hiệu hóa (disable). 9Exception Handling: 0Trong trường hợp này, ngoại lệ được ném ra ngay cả khi phần tử được bật sau một thời gian. Avoiding-And-Handling: Thêm lệnh chờ để đợi cho đến khi phần tử có thể nhấp được. Nếu vẫn có ngoại lệ, nó sẽ bị bắt. Thêm lệnh chờ để đợi cho đến khi phần tử có thể nhấp được. Nếu vẫn có ngoại lệ, nó sẽ bị bắt. 1#8) org.openqa.selenium.TimeoutExceptionNgoại lệ này xảy ra khi một lệnh hoàn thành mất nhiều hơn thời gian chờ cho phép. Các lệnh chờ Wait chủ yếu được sử dụng trong WebDriver để tránh ngoại lệ 6: Đôi khi trang test có thể chưa được tải hoàn toàn trước lệnh tiếp theo trong chương trình. Nếu WebDriver cố gắng tìm một phần tử trong trang web trước khi trang tải hoàn toàn, thì ngoại lệ 6 sẽ được bắn ra. Để tránh ngoại lệ này, các lệnh chờ được thêm vào.Tuy nhiên, nếu các thành phần không tải ngay cả sau khi chờ, thì ngoại lệ 4 sẽ được bắn ra. 2Trong đoạn mã trên, thời gian chờ ngầm định là 10 giây được thêm vào. Nếu trang www.softwaretestinghelp.com không được tải trong vòng 10 giây, thì ngoại lệ 5 sẽ được bắn ra.Avoiding and Handling: Để tránh điều này, chúng ta có thể kiểm tra thủ công thời gian tải trang trung bình và điều chỉnh thời gian chờ. Hoặc, có thể thêm explicit wait (thời gian chờ rõ ràng) bằng trình thực thi JavaScript cho đến khi trang được tải. Để tránh điều này, chúng ta có thể kiểm tra thủ công thời gian tải trang trung bình và điều chỉnh thời gian chờ. Hoặc, có thể thêm explicit wait (thời gian chờ rõ ràng) bằng trình thực thi JavaScript cho đến khi trang được tải. Trong ví dụ dưới đây, trình thực thi JavaScript được sử dụng. Sau khi điều hướng trang, gọi JavaScript trả về 6 trong 20 giây cho đến khi “complete” được trả về. 3Lời kếtXử lý ngoại lệ là phần thiết yếu của mọi chương trình java cũng như tập lệnh selenium. Nhờ việc xử lý các ngoại lệ theo những cách thông minh, chúng ta có thể xây dựng bộ mã mạnh mẽ và tối ưu. Nếu bạn quan tâm có thể xem bài viết gốc tại đây: https://www.softwaretestinghelp.com/exception-handling-framework-selenium-tutorial-19/ |