Hướng dẫn dùng selenium exceptions python
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
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ì?Ngoại lệ là các sự kiện do chương trình kết thúc đột ngột mà không đưa ra kết quả mong đợi. Java có cung cấp một framework nơi người dùng có thể xử lý các ngoại lệ. Tiến trình xử lý các ngoại lệ được gọi là Exception Handling. Các ngoại lệ cần được xử lý vì chúng phá vỡ quy trình thực thi bình thường của một chương trình. Một trong những mục đích quan trọng của việc xử lý ngoại lệ là ngăn chặn sự phá vỡ này để tiếp tục thực thi chương trình. Hoặc thực hiện một số hành động nào đó khi xảy ra một ngoại lệ nhất định. Khi 1 ngoại lệ xảy ra thì 1 đối tượng ngoại lệ ‘Throwing an Exception’ được khởi tạo cùng với các khối Try/Catch ví dụ như sau:
Nên sử dụng các phương pháp Ưu điểm và nhược điểm của phương pháp Avoid-Handle này: Ưu điểm:
Nhược điểm:
Để tìm hiểu về phương pháp Các loại Exception trong Java và SeleniumCó 3 loại exception:
Phân cấp lớp của ngoại lệ và lỗi: #1) Checked Exception: đượ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) Ví dụ : FileNotFoundException, IOException ... #2) Unchecked Exception: 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. Ví dụ : ArrayIndexoutOfBoundException #3) Error: 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. Ví dụ : Assertion error, OutOfMemoryError .... Exception HandlingTry and Catch block: Các khối try-catch thường được sử dụng để xử lý các ngoại lệ. Các loại ngoại lệ dự kiến sẽ đến
được khai báo trong khối catch (//IOException ie). Khi một ngoại lệ xuất hiện trong khối try, ngay lập tức trình điều khiển sẽ điều hướng đến khối
Có thể kết hợp bắt nhiều ngoại lệ trong 1 khối try:
throws Exception: Từ khóa
Finally block: Khối thực thi bất kể việc thực thi khối try-catch như thế nào và được thực thi ngay sau khi khối try / catch hoàn tất. Đóng tệp, ngắt kết nối cơ sở dữ liệu, v.v... có thể được thực hiện trong khối (cuối cùng) này. Ví dụ:
Trong ví dụ trên, luồng BufferReader được đóng trong khối Chú ý:
Throwable:
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 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à
Avoiding-And-Handling : 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 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
Đoạn mã dưới đây bắn về
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ự. 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ệ, Đoạn mã ví dụ dưới đây sẽ bắn về
Exception Handling:
Trong 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ụ: 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.
#4) org.openqa.selenium.NoAlertPresentException
Exception Handling:
Trong trường hợp này, ngoại lệ được ném ra ngay cả khi cảnh báo không được tải hoàn toàn. Avoiding-And-Handling: 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.
#5) org.openqa.selenium.InvalidSelectorExceptionĐây là lớp con của lớp
Đ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. Cách xử lý ngoại lệ này sử dụng Try/Catch
#6) org.openqa.selenium.ElementNotVisibleExceptionLớp Ví dụ: trong đoạn mã dưới đây, nếu nút có id = ‘submit’ bị ‘ẩn’ trong HTML, thì
Trong 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.
#7) org.openqa.selenium.ElementNotSelectableExceptionNgoại lệ này nằm trong lớp Ví dụ: đoạn mã dưới đây sẽ trả về một ngoại lệ
Exception Handling:
Trong 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.
#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ệ Tuy nhiên, nếu các thành phần không tải ngay cả sau khi chờ, thì ngoại lệ
Trong đ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ệ 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. 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ề
Lờ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/ |