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à SeleniumKhi 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 - 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.
- 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ý. - Ưu điểm và nhược điểm của phương pháp Avoid-Handle này:
Ư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ệ 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 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: - 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.NoSuchElementExceptionLớ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.NoSuchWindowExceptiontry {
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.NoSuchFrameExceptionKhi 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();
}
0Exception Handling: try {
br = new BufferedReader(new FileReader("Data"));
} catch(IOException ie)
{
ie.printStackTrace();
}
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 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();
}
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 try {
br = new BufferedReader(new FileReader("Data"));
} catch(IOException ie)
{
ie.printStackTrace();
}
2try {
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();
}
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. try {
br = new BufferedReader(new FileReader("Data"));
} catch(IOException ie)
{
ie.printStackTrace();
}
4#4) org.openqa.selenium.NoAlertPresentExceptiontry {
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.ElementNotVisibleExceptionLớ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();
}
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. try {
br = new BufferedReader(new FileReader("Data"));
} catch(IOException ie)
{
ie.printStackTrace();
}
8#7) org.openqa.selenium.ElementNotSelectableExceptionNgoạ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();
}
9Exception Handling: try {
br = new BufferedReader(new FileReader("Data"));
} catch(IOException ie)
{
ie.printStackTrace();
} catch(FileNotFoundException file){
file.printStackTrace();
}
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. try {
br = new BufferedReader(new FileReader("Data"));
} catch(IOException ie)
{
ie.printStackTrace();
} catch(FileNotFoundException file){
file.printStackTrace();
}
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ệ 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();
}
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ệ 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();
}
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/
|