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.

Nội dung chính

  • 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)
  • #1) org.openqa.selenium.NoSuchElementException
  • #2) org.openqa.selenium.NoSuchWindowException
  • #3) org.openqa.selenium.NoSuchFrameException
  • #4) org.openqa.selenium.NoAlertPresentException
  • #5) org.openqa.selenium.InvalidSelectorException
  • #6) org.openqa.selenium.ElementNotVisibleException
  • #7) org.openqa.selenium.ElementNotSelectableException
  • #8) org.openqa.selenium.TimeoutException
  • Lời kết

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)

try {
// Protected code 
} catch (ExceptionName e) {
// Catch block 
}
  • #1) org.openqa.selenium.NoSuchElementException
  • #2) org.openqa.selenium.NoSuchWindowException
  • #3) org.openqa.selenium.NoSuchFrameException

#4) org.openqa.selenium.NoAlertPresentException

#5) org.openqa.selenium.InvalidSelectorException

#6) org.openqa.selenium.ElementNotVisibleException

  • #7) org.openqa.selenium.ElementNotSelectableException
  • #8) org.openqa.selenium.TimeoutException
  • Lời kết
  • 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.
  • 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:

Khi có ngoại lệ

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }
4 nào đó xảy ra thì statement
try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }
5 sẽ được thực thi.

Các loại Exception trong Java và Selenium

Khi không còn ngoại lệ

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }
4 thì statement
try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }
7 được thực thi và bỏ qua statement
try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }
5

  1. Nên sử dụng try / catch để xử lý những việc sai và nằm ngoài tầm kiểm soát.
  2. Nên sử dụng các phương pháp
    try {
        br = new BufferedReader(new FileReader("Data"));
        } catch(IOException ie)
        {
          ie.printStackTrace();
        } catch(FileNotFoundException file){
          file.printStackTrace();
        }
    
    9 để tránh ngoại lệ trước, nếu không tránh được ngoại lệ thì mới xử lý.
  3. Ưu điểm và nhược điểm của phương pháp Avoid-Handle này:

Ưu điểm:

Hướng dẫn catch selenium exception python - bắt trăn ngoại lệ selen

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 Handling

Nhược điểm:

Tăng số lượng dòng code vì bạn thêm mã bổ sung để tránh ngoại lệ

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
         ie.printStackTrace();
    }

Cần có hiểu biết về các API, command và ngoại lệ của Web Driver

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }

Để tìm hiểu về phương pháp

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }
9 này thì trước hết cần hiểu cơ bản về Exception Handling and các khối Try/Catch.

Có 3 loại exception:

public static void main(String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new FileReader("Data"));
     while ((line = br.readLine()) != null)
         {
           System.out.println(line);
         }
}

Checked Exception

Unchecked Exception

Error

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    }
Finally {
          br.close();
        }

Trong ví dụ trên, luồng BufferReader được đóng trong khối

public static void main(String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new FileReader("Data"));
     while ((line = br.readLine()) != null)
         {
           System.out.println(line);
         }
}
3. Lệnh
public static void main(String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new FileReader("Data"));
     while ((line = br.readLine()) != null)
         {
           System.out.println(line);
         }
}
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ú ý:

  • Khối
    public static void main(String[] args) throws IOException
    {
    BufferedReader br=new BufferedReader(new FileReader("Data"));
         while ((line = br.readLine()) != null)
             {
               System.out.println(line);
             }
    }
    
    3 là khối độc lập, có thể tồn tại mà không cần phải có bất kỳ khối catch nào
  • Có thể có nhiều khối catch nhưng chỉ có 1 khối
    public static void main(String[] args) throws IOException
    {
    BufferedReader br=new BufferedReader(new FileReader("Data"));
         while ((line = br.readLine()) != null)
             {
               System.out.println(line);
             }
    }
    
    3 duy nhất.

Throwable:

public static void main(String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new FileReader("Data"));
     while ((line = br.readLine()) != null)
         {
           System.out.println(line);
         }
}
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
public static void main(String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new FileReader("Data"));
     while ((line = br.readLine()) != null)
         {
           System.out.println(line);
         }
}
7 cho an toàn, nó có thể bắt cả lỗi và ngoại lệ. Ví dụ:

try {
   br = new BufferedReader(new FileReader("Data"));
     } catch (Throwable t)
     {
       t.printStackTrace();
     }

Các ngoại lệ phổ biến trong Selenium WebDriver

Selenium 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:

  • NoSuchElementException : Ngoại lệ này là do truy cập vào một phần tử không có sẵn trên trang.
  • NoSuchElementException
  • NoSuchWindowException
  • NoSuchFrameException
  • NoAlertPresentException : Người dùng cố gắng xử lý hộp cảnh báo nhưng cảnh báo không xuất hiện.
  • InvalidSelectorException
  • ElementNotVisibleException : Selenium cố gắng tìm một phần tử nhưng phần tử đó không hiển thị trong trang
  • ElementNotSelectableException
  • TimeoutException
  • NoSuchSessionException
  • StaleElementReferenceException
  • WebDriverException : Ngoại lệ xảy ra khi mã không thể khởi tạo WebDriver.

Avoiding và Handling các ngoại lệ phổ biến (nêu trên)

#1) org.openqa.selenium.NoSuchElementException

Lớp ngoại lệ thường thấy này là một lớp con của lớp

public static void main(String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new FileReader("Data"));
     while ((line = br.readLine()) != null)
         {
           System.out.println(line);
         }
}
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
try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    }
Finally {
          br.close();
        }
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à

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    }
Finally {
          br.close();
        }
1 sẽ được bắn ra:

driver.findElement(By.id("submit")).click();
Exception Handling:
 
try {
driver.findElement(By.id("submit")).click();
} catch (NoSuchElementException e)

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ụ:

try {
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.presenceOfElementLocated(By.id("submit")));
try {
driver.findElement(By.id("submit")).click();
} catch (WebDriverException e) {
System.out.println(“An exceptional case.”);
}
} catch (TimeOutException e) {
System.out.println(“WebDriver couldn’t locate the element”);
}

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

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }
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

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    }
Finally {
          br.close();
        }
3 nằm trong lớp
public static void main(String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new FileReader("Data"));
     while ((line = br.readLine()) != null)
         {
           System.out.println(line);
         }
}
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ề

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    }
Finally {
          br.close();
        }
5 nếu cửa sổ không tồn tại hoặc không có sẵn để chuyển đổi.

driver.switchTo().window(handle_1);

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.

for (String handle : driver.getWindowHandles()) {
    try {
        driver.switchTo().window(handle);
    } catch (NoSuchWindowException e) {
        System.out.println(“An exceptional case”);
    }
}

#3) org.openqa.selenium.NoSuchFrameException

Khi WebDriver cố gắng chuyển sang một khung không hợp lệ,

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    }
Finally {
          br.close();
        }
6 trong lớp
public static void main(String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new FileReader("Data"));
     while ((line = br.readLine()) != null)
         {
           System.out.println(line);
         }
}
9 được bắn ra.

Đoạn mã ví dụ dưới đây sẽ bắn về

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    }
Finally {
          br.close();
        }
8 nếu khung
try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    }
Finally {
          br.close();
        }
9 không tồn tại hoặc không có sẵn.

try {
   br = new BufferedReader(new FileReader("Data"));
     } catch (Throwable t)
     {
       t.printStackTrace();
     }
0

Exception Handling:

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
         ie.printStackTrace();
    }
0

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ụ: : 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

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }
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.

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
         ie.printStackTrace();
    }
1

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

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
         ie.printStackTrace();
    }
2

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    }
Finally {
          br.close();
        }
3 nằm trong lớp
public static void main(String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new FileReader("Data"));
     while ((line = br.readLine()) != null)
         {
           System.out.println(line);
         }
}
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:

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
         ie.printStackTrace();
    }
3

Trong 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.

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
         ie.printStackTrace();
    }
4

#4) org.openqa.selenium.NoAlertPresentException

try {
   br = new BufferedReader(new FileReader("Data"));
     } catch (Throwable t)
     {
       t.printStackTrace();
     }
1 nằm trong
public static void main(String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new FileReader("Data"));
     while ((line = br.readLine()) != null)
         {
           System.out.println(line);
         }
}
9 được bắn ra khi WebDriver cố gắng chuyển sang cảnh báo không khả dụng.

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
         ie.printStackTrace();
    }
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

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
         ie.printStackTrace();
    }
6

#6) org.openqa.selenium.ElementNotVisibleException

Lớp

try {
   br = new BufferedReader(new FileReader("Data"));
     } catch (Throwable t)
     {
       t.printStackTrace();
     }
6 là một lớp con của lớp
try {
   br = new BufferedReader(new FileReader("Data"));
     } catch (Throwable t)
     {
       t.printStackTrace();
     }
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ì

try {
   br = new BufferedReader(new FileReader("Data"));
     } catch (Throwable t)
     {
       t.printStackTrace();
     }
8 sẽ được bắn ra.: trong đoạn mã dưới đây, nếu nút có id = ‘submit’ bị ‘ẩn’ trong HTML, thì
try {
   br = new BufferedReader(new FileReader("Data"));
     } catch (Throwable t)
     {
       t.printStackTrace();
     }
8 sẽ được bắn ra.

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
         ie.printStackTrace();
    }
7

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. 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.

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
         ie.printStackTrace();
    }
8

#7) org.openqa.selenium.ElementNotSelectableException

Ngoại lệ này nằm trong lớp

try {
   br = new BufferedReader(new FileReader("Data"));
     } catch (Throwable t)
     {
       t.printStackTrace();
     }
9.
driver.findElement(By.id("submit")).click();
Exception Handling:
 
try {
driver.findElement(By.id("submit")).click();
} catch (NoSuchElementException e)
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ệ

driver.findElement(By.id("submit")).click();
Exception Handling:
 
try {
driver.findElement(By.id("submit")).click();
} catch (NoSuchElementException e)
0 nếu id “swift” bị vô hiệu hóa (disable).

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
         ie.printStackTrace();
    }
9

Exception Handling:

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }
0

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. 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.

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }
1

#8) org.openqa.selenium.TimeoutException

Ngoạ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ệ

try {
   br = new BufferedReader(new FileReader("Data"));
     } catch (Throwable t)
     {
       t.printStackTrace();
     }
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ệ
try {
   br = new BufferedReader(new FileReader("Data"));
     } catch (Throwable t)
     {
       t.printStackTrace();
     }
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ệ

driver.findElement(By.id("submit")).click();
Exception Handling:
 
try {
driver.findElement(By.id("submit")).click();
} catch (NoSuchElementException e)
4 sẽ được bắn ra.

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }
2

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ệ

driver.findElement(By.id("submit")).click();
Exception Handling:
 
try {
driver.findElement(By.id("submit")).click();
} catch (NoSuchElementException e)
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ề

driver.findElement(By.id("submit")).click();
Exception Handling:
 
try {
driver.findElement(By.id("submit")).click();
} catch (NoSuchElementException e)
6 trong 20 giây cho đến khi “complete” được trả về.

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }
3

Lời kết

Xử 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/