Python xử lý ngoại lệ hết thời gian chờ trong selen như thế nào?

Đôi khi điều này hoạt động và đôi khi nó không hoạt động và tôi gặp lỗi Phần tử không thể nhấp được tại điểm (X, Y). Tôi đã thêm mã để tối đa hóa trang web trong trường hợp liên kết bị chồng chéo bởi thứ gì đó

Có vẻ như lỗi là do trang web không phải lúc nào cũng tải kịp thời. Để khắc phục điều này, tôi đã cố gắng sử dụng các thư viện điều kiện mong đợi và chờ đợi của Selenium

Tôi đã nghĩ ra cách sau nhưng nó không hoạt động, tôi chỉ nhận được TimeoutException

link = wait(driver, 60).until(EC.element_to_be_clickable((By.XPATH,'//*[@id="zbCenter"]/div/span/table[3]/tbody/tr/td/table/tbody/tr/td[8]/nobr/a/b')))
link.click()

Tôi nghĩ XPATH có lẽ là lựa chọn tốt nhất ở đây hoặc có lẽ là tên lớp, nhưng không có ID. Tôi không chắc có phải vì liên kết nằm trong một bảng nào đó mà nó không hoạt động hay không, nhưng tôi thấy lạ là đôi khi nó hoạt động mà không cần phải đợi gì cả

Tôi đã thử cách tiếp cận của Jacob. Vấn đề là tôi muốn nó năng động để nó hoạt động cho các công ty khác. Ngoài ra, khi tôi lần đầu tiên truy cập vào trang tóm tắt, URL có những thứ khác ở cuối nên tôi không thể thêm /financials vào URL

Đây là URL nó cung cấp cho tôi. https. //www. người sàng lọc thị trường. com/ĐÔ LA-TỔNG HỢP-CÔNG TY CỔ PHẦN-5699818/?type recherche=rapid mots=DG

Bắt một ngoại lệ trong mã tự động hóa là rất phổ biến. 'Ngoại lệ' như từ chỉ ra, là trường hợp đặc biệt hoặc không phổ biến

Việc thực thi mã tự động hóa thường có thể không diễn ra như mong đợi do nhiều yếu tố liên quan đến quá trình thực thi, chẳng hạn như sự cố ổn định mạng, sự cố Internet, sự ổn định của máy chủ, v.v. Chúng tôi có thể gặp ngoại lệ do không đủ thời gian chờ hoặc cú pháp, tham số không chính xác, v.v.

Python xử lý ngoại lệ hết thời gian chờ trong selen như thế nào?

Trong hướng dẫn WebDriver lần trước, chúng ta đã tìm hiểu về 3 loại phần tử web quan trọng khác nhau như Bảng Web, Khung và phần tử Động và cơ chế xử lý của chúng trong tập lệnh Selenium

Trước khi tiếp tục với các hướng dẫn về Framework trong loạt bài đào tạo về Selenium này, ở đây trong hướng dẫn này, chúng ta sẽ tìm hiểu về các loại ngoại lệ và cách xử lý các ngoại lệ trong các tập lệnh Java và Selenium. Nhà phát triển/người thử nghiệm sử dụng khung xử lý ngoại lệ để xử lý ngoại lệ trong tập lệnh Selenium

Bạn sẽ học được gì

Ngoại lệ là gì?

Ngoại lệ là các sự kiện do đó chương trình java kết thúc đột ngột mà không đưa ra kết quả mong đợi. Java cung cấp một khung nơi người dùng có thể xử lý các ngoại lệ

Quá trình xử lý Ngoại lệ được gọi là Xử lý Ngoại lệ

Các ngoại lệ cần được xử lý vì chúng phá vỡ luồng thực thi bình thường của chương trình. Một trong những mục đích quan trọng của xử lý ngoại lệ là ngăn chặn sự phá vỡ này và tiếp tục thực hiện chương trình. Đôi khi, bạn có thể muốn thực hiện một số hành động khi xảy ra một ngoại lệ nhất định

Khi một ngoại lệ xảy ra, một đối tượng ngoại lệ được tạo ra, về mặt kỹ thuật được gọi là 'Ném một ngoại lệ' và chúng tôi thêm các khối Thử/Bắt như,

try {
// Protected code 
} catch (ExceptionName e) {
// Catch block 
}

#1) Đoạn mã có thể đưa ra ngoại lệ được thêm vào bên trong khối Thử

#2) Câu lệnh Catch bắt ngoại lệ và lấy nó làm tham số

#3) Khi không có ngoại lệ nào được đưa ra, câu lệnh try được thực thi chứ không phải câu lệnh catch

Thí dụ. Khi tập lệnh Selenium bị lỗi do định vị sai, thì nhà phát triển sẽ có thể hiểu lý do lỗi và điều này có thể đạt được dễ dàng nếu ngoại lệ được xử lý đúng cách trong chương trình

Theo kinh nghiệm của tôi, tốt nhất là cố gắng tránh các trường hợp ngoại lệ của WebDriver bất cứ khi nào có thể và nắm bắt các trường hợp thực sự đặc biệt. Sử dụng try/catch để xử lý những sự cố nằm ngoài tầm kiểm soát của tôi

Tránh những cái tôi có thể Bắt những người khác

Đây là chiến lược tốt nhất đã làm việc cho tôi

Ví dụ: hãy xem xét một trang thử nghiệm mất nhiều thời gian hơn bình thường để tải trên máy chủ thử nghiệm. Chúng tôi sẽ nhận được các ngoại lệ thường xuyên khi thực hiện các hành động trên trang này. Vì vậy, thay vì chỉ nắm bắt điều này mọi lúc, chúng ta có thể

  • Thêm lệnh chờ và cố gắng tránh ngoại lệ
  • Sử dụng 'Try/Catch' để xử lý trong trường hợp xảy ra trường hợp thực sự đặc biệt

Do đó làm giảm cơ hội cho các trường hợp ngoại lệ

Python xử lý ngoại lệ hết thời gian chờ trong selen như thế nào?

Ưu điểm và nhược điểm của phương pháp Tránh-Xử lý

Ưu điểm

Nhược điểm

1) Cách tiếp cận này làm giảm khả năng nhận ngoại lệ. 1) Tăng số dòng mã vì bạn thêm mã bổ sung để tránh ngoại lệ Nếu ngoại lệ vẫn bị phát hiện 2) sẽ là một trường hợp thực sự đặc biệt đáng để kiểm tra 2) Cần hiểu rõ hơn về API Trình điều khiển Web, các lệnh và ngoại lệ Giảm thời gian gỡ lỗi. Mã tự động hóa nhằm mục đích tìm lỗi và bạn không muốn thấy quá nhiều trường hợp ngoại lệ không mong muốn 3) và tìm lý do đằng sau mỗi trường hợp đó4) Trong khối Bắt, bạn xử lý các trường hợp hợp lệ hơn5) Giảm lỗi sai6) Báo cáo rõ ràng hơn

Trong hướng dẫn này, chúng ta sẽ thảo luận về phương pháp Tránh-Và-Xử lý cho 10 ngoại lệ phổ biến nhất trong Selenium WebDriver. Trước đó, chúng ta hãy tìm hiểu cơ bản về Xử lý ngoại lệ và các khối Thử/Bắt

Các loại ngoại lệ trong Java và Selenium

Dưới đây chúng tôi đã mô tả các loại ngoại lệ và các cách khác nhau để chúng tôi có thể sử dụng khung xử lý ngoại lệ trong tập lệnh Selenium

Có ba loại ngoại lệ

  1. Đã kiểm tra ngoại lệ
  2. Ngoại lệ không được kiểm tra
  3. Lỗi

Hệ thống phân cấp lớp của ngoại lệ và lỗi

Python xử lý ngoại lệ hết thời gian chờ trong selen như thế nào?

#1) Đã kiểm tra ngoại lệ. Ngoại lệ đã kiểm tra được xử lý trong thời gian biên dịch và nó báo lỗi biên dịch nếu không được phát hiện và xử lý trong thời gian biên dịch.

Thí dụ. FileNotFoundException, IOException, v.v.

#2) Ngoại lệ không được kiểm tra. Trong trường hợp ngoại lệ không được kiểm tra, 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.

Thí dụ. ArrayIndexoutOfBoundException

#3) Lỗi. Khi một tình huống nghiêm trọng và chương trình không thể phục hồi thì JVM sẽ báo lỗi. Các lỗi không thể được xử lý bởi khối try-catch. 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, nó cũng không thể khắc phục lỗi.

Thí dụ. Lỗi xác nhận, OutOfMemoryError, v.v.

Xử lý ngoại lệ

Thử và bắt khối

các khối try-catch thường được sử dụng để xử lý các ngoại lệ. Loại ngoại lệ được khai báo trong khối bắt dự kiến ​​​​sẽ đến. Khi một ngoại lệ xuất hiện trong khối thử, ngay lập tức điều khiển di chuyển để bắt khối

Thí dụ

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

Có thể có nhiều khối bắt cho một khối thử tùy thuộc vào loại ngoại lệ

Thí dụ

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

ném ngoại lệ

ném từ khóa trong java được sử dụng để ném một ngoại lệ hơn là xử lý nó. Tất cả các ngoại lệ được kiểm tra có thể được ném bằng các phương thức

Thí dụ

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

cuối cùng chặn

cuối cùng, khối thực thi bất kể khối try-catch được thực thi như thế nào và nó thực thi ngay sau khi khối try/catch hoàn thành

Về cơ bản đóng tệp, kết nối cơ sở dữ liệu, v.v. có thể được đóng trong khối cuối cùng

Thí dụ

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 cuối cùng. anh. close() sẽ luôn thực thi bất kể thực thi khối try and catch

Ghi chú. khối cuối cùng có thể tồn tại mà không cần bất kỳ khối bắt nào. Không nhất thiết phải luôn có một khối bắt

Có thể có nhiều khối bắt nhưng chỉ có thể sử dụng một khối cuối cùng

Ném được. Throwable là một lớp cha cho lỗi và ngoại lệ. Nói chung là khó xử lý lỗi trong java. Nếu một lập trình viên không chắc chắn về loại lỗi và ngoại lệ, thì nên sử dụng lớp Throwable có thể bắt cả lỗi và ngoại lệ

Thí 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ó bộ ngoại lệ riêng. Trong khi phát triển tập lệnh Selenium, lập trình viên phải xử lý hoặc loại bỏ các ngoại lệ đó

Dưới đây là một số ví dụ về ngoại lệ trong Selenium

Tất cả các lớp ngoại lệ thời gian chạy trong Selenium WebDriver đều thuộc lớp cha WebDriverException

Python xử lý ngoại lệ hết thời gian chờ trong selen như thế nào?

Mặc dù có nhiều lớp Ngoại lệ trong WebDriverException, nhưng chúng ta thường thấy những lớp bên dưới

  • NoSuchElementException
  • NoSuchWindowException
  • NoSuchFrameException
  • NoAlertPresentException
  • Ngoại lệ Selector không hợp lệ
  • ElementNotVisibleException
  • ElementNotSelectableException
  • Hết thời gian ngoại lệ
  • NoSuchSessionException
  • StaleElementReferenceException

Thông tin chi tiết

ElementNotVisibleException. Nếu selen cố gắng tìm một phần tử nhưng phần tử đó không hiển thị trong trang

NoAlertPresentException. Nếu 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

NoSuchAttributeException. Trong khi cố gắng lấy giá trị thuộc tính nhưng thuộc tính không có sẵn trong DOM

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

WebDriverException. Ngoại lệ xuất hiện khi mã không thể khởi tạo WebDriver

Tránh và xử lý các ngoại lệ phổ biến

Hãy thảo luận về phương pháp Tránh và Xử lý đối với các trường hợp ngoại lệ nêu trên

#1) tổ chức. openqa. selen. NoSuchElementException

Lớp ngoại lệ thường thấy này là một lớp con của lớp NotFoundException. Ngoại lệ xảy ra khi WebDriver không thể tìm và định vị các phần tử

Thông thường, điều này 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 findElement(By, by)

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 đã đề cập sai thành 'fistfield'. Trong trường hợp này, WebDriver không thể định vị phần tử và tổ chức. openqa. selen. NoSuchElementException sẽ bị ném

driver.findElement(By.id("submit")).click();
Exception Handling:

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

Trong trường hợp này, ngoại lệ được ném ngay cả khi phần tử không được tải

Phòng Tránh Và Xử Lý. Hãy thử đưa ra một lệnh chờ

Thí dụ. Lệnh đợi bên dưới đợi 10 giây để có sự hiện diện của phần tử web có id 'gửi'. Sau đó, nó cố gắng nhấp 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 cách 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 Thử/Bắt, chúng tôi đảm bảo rằng chương trình sẽ tiếp tục ngay cả khi việc chờ đợi không giúp được gì

________số 8

#2) tổ chức. openqa. selen. NoSuchWindowException

NoSuchWindowException thuộc lớp NotFoundException. Điều này được đưa 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 có thể ném org. openqa. selen. NoSuchWindowException nếu tay cầm cửa sổ không tồn tại hoặc không có sẵn để chuyển đổi

tài xế. chuyển sang(). cửa sổ(tay cầm_1);

Phòng Tránh Và Xử Lý. Chúng tôi sẽ sử dụng tay cầm cửa sổ để 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 trên cùng một cửa sổ

Trong ví dụ bên dưới, đối với mỗi tay cầm cửa sổ, trình điều khiển chuyển sang được thực thi. Do đó, khả năng truyền sai thông số cửa sổ giảm xuống

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

#3) tổ chức. openqa. selen. NoSuchFrameException

Khi WebDriver đang cố chuyển sang khung không hợp lệ, NoSuchFrameException trong lớp NotFoundException sẽ bị ném

Đoạn mã dưới đây có thể ném org. openqa. selen. NoSuchFrameException nếu khung “frame_11” không tồn tại hoặc không có sẵn

tài xế. chuyển sang(). khung(“khung_11”);

Xử lý ngoại lệ

try {
// Protected code 
} catch (ExceptionName e) {
// Catch block 
}
0

Trong trường hợp này, ngoại lệ được đưa ra ngay cả khi khung không được tải

Phòng Tránh Và Xử Lý. Cố gắng đưa ra một lệnh chờ

Trong ví dụ bên dưới, WebDriver đợi 10 giây để có khung. Nếu khung có sẵn mà vẫn có ngoại lệ thì nó bị bắt

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

#4) tổ chức. openqa. selen. NoAlertPresentException

NoAlertPresentException trong NotFoundException bị ném khi WebDriver cố gắng chuyển sang một cảnh báo, không khả dụng

tổ chức. openqa. selen. NoAlertPresentException sẽ bị ném Nếu mã tự động hóa bên dưới gọi hoạt động accept() trên lớp Alert() khi chưa có cảnh báo trên màn hình

tài xế. chuyển sang(). báo động(). Chấp nhận();

Xử lý ngoại lệ

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

Trong trường hợp này, ngoại lệ được đưa ra ngay cả khi cảnh báo không được tải hoàn toàn

Phòng Tránh Và Xử Lý. Luôn sử dụng chức năng chờ rõ ràng hoặc trôi chảy trong một thời điểm cụ thể trong mọi trường hợp dự kiến ​​có cảnh báo. 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();
    }
2

#5) tổ chức. openqa. selen. Ngoại lệ Selector không hợp lệ

Lớp con này của lớp NoSuchElementException xảy ra khi bộ chọn không chính xác hoặc không hợp lệ về mặt cú pháp. Ngoại lệ này thường xảy ra khi sử dụng bộ định vị XPATH

Xem xét ví dụ dưới đây

clickXPathButtonAndWait(“//button[@type=’button’][100]”);

Điều này sẽ đưa ra một InvalidSelectorExeption vì cú pháp XPATH không chính xác

Phòng tránh và xử lý. Để tránh điều này, chúng ta nên kiểm tra bộ định vị được sử dụng vì rất có thể bộ định vị không chính xác hoặc sai cú pháp. Sử dụng Firebug để tìm xpath có thể giảm ngoại lệ này

Mã bên dưới cho biết cách xử lý bằng Try/Catch

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

#6) tổ chức. openqa. selen. ElementNotVisibleException

Lớp ElementNotVisibleException là lớp con của lớp ElementNotInteractableException. Ngoại lệ này được đưa ra khi WebDriver cố gắng thực hiện một hành động trên một phần tử web vô hình, 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 loại nút có id 'gửi' là 'ẩn' trong HTML, org. openqa. selen. ElementNotVisibleException sẽ bị ném

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

Trong trường hợp này, ngoại lệ được đưa ra ngay cả khi trang chưa được tải hoàn toàn

Phòng Tránh Và Xử Lý. Có hai cách để làm điều này. Chúng ta có thể sử dụng đợi phần tử hoàn thành

Đoạn mã dưới đây đợi 10 giây cho phần tử. 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();
    }
5

#7) tổ chức. openqa. selen. ElementNotSelectableException

Ngoại lệ này thuộc lớp UnlimitedElementStateException. ElementNotSelectableException chỉ ra rằng phần tử web có trong trang web nhưng không thể chọn được

Ví dụ: đoạn mã dưới đây có thể ném ElementNotSelectableException nếu id “swift” bị tắt

Chọn danh sách thả xuống = mới Chọn (trình điều khiển. findElement(By. id(“nhanh”)));

Xử lý ngoại lệ

thử {
Select dropdown = new Select(driver. findElement(By. id(“swift”)));
} catch (ElementNotSelectableException e)

Trong trường hợp này, ngoại lệ được ném ngay cả khi phần tử được bật sau một thời gian

Phòng Tránh Và Xử Lý. Chúng ta có thể thêm lệnh đợi để đợi cho đến khi phần tử có thể nhấp được. Nếu vẫn còn một ngoại lệ, nó sẽ bị bắt

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

#8) tổ chức. openqa. selen. Hết thời gian ngoại lệ

Ngoại lệ này xảy ra khi hoàn thành lệnh mất nhiều hơn thời gian chờ đợi. Chờ chủ yếu được sử dụng trong WebDriver để tránh ngoại lệ ElementNotVisibleException

Đôi khi trang kiểm tra có thể không 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ệ ElementNotVisibleException sẽ bị ném. Để tránh ngoại lệ này, các lệnh đợi đượ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ờ đợi, ngoại lệ tổ chức. openqa. selen. TimeoutException sẽ bị ném

tài xế. quản lý(). thời gian chờ(). ngầm định Wait(10,TimeUnit. GIÂY) ;

tài xế. nhận(“https. //www. trợ giúp kiểm thử phần mềm. com” );

Trong chương trình trên, thời gian chờ 10 giây được thêm vào. Nếu trang www. trợ giúp kiểm thử phần mềm. com không tải trong 10 giây, thì TimeoutException sẽ bị ném

Phòng tránh và xử lý. Để 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, chúng tôi có thể thêm thời gian chờ rõ ràng bằng cách sử dụ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, chúng tôi gọi JavaScript return document. readyState trong 20 giây cho đến khi "hoàn thành" được trả về

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

#9) tổ chức. openqa. selen. NoSuchSessionException

Ngoại lệ này được đưa ra khi một phương thức được gọi sau khi thoát khỏi trình duyệt bởi WebDriver. từ bỏ(). Điều này cũng có thể xảy ra do các sự cố trình duyệt web như sự cố và WebDriver không thể thực thi bất kỳ lệnh nào bằng phiên bản trình điều khiển

Để xem ngoại lệ này, đoạn mã dưới đây có thể được thực thi

tài xế. từ bỏ()

Chọn danh sách thả xuống = mới Chọn (trình điều khiển. findElement(By. id(“nhanh”)));

Phòng tránh và xử lý. Luôn chọn phiên bản ổn định mới nhất của trình duyệt để chạy các testcase Selenium Webdriver

Có thể giảm ngoại lệ này bằng cách sử dụng trình điều khiển. khỏi () khi hoàn thành tất cả các bài kiểm tra. Đừng cố sử dụng chúng sau mỗi trường hợp thử nghiệm. Điều này có thể dẫn đến sự cố khi phiên bản trình điều khiển không có giá trị và các trường hợp thử nghiệm sắp tới sẽ cố gắng sử dụng nó mà không cần khởi tạo

Đoạn mã dưới đây tạo cá thể WebDriver trong chú thích @B BeforeSuite TestiNG và hủy nó trong chú thích @afterSuite TestiNG

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

#10) tổ chức. openqa. selen. StaleElementReferenceException

Ngoại lệ này nói rằng một phần tử web không còn xuất hiện trong trang web

Lỗi này không giống với ElementNotVisibleException

Tuy nhiên, StaleElementReferenceException được ném khi một đối tượng cho một phần tử web cụ thể được tạo trong chương trình mà không gặp bất kỳ sự cố nào; . Điều này có thể xảy ra nếu có một

  • Điều hướng đến một trang khác
  • DOM đã làm mới
  • Công tắc khung hoặc cửa sổ

WebElement firstName = trình điều khiển. findElement(By. id(“tên”));

tài xế. chuyển sang(). cửa sổ(Child_Window);

yếu tố. sendKeys(“Aaron”);

Trong đoạn mã trên, đối tượng FirstName đã được tạo và sau đó cửa sổ được chuyển đổi. Sau đó, WebDriver cố gắng nhập 'Aaron' vào trường biểu mẫu. Trong trường hợp này, StaleElementReferenceException bị ném

Phòng tránh và xử lý. Xác nhận rằng chúng tôi đang cố gắng thực hiện hành động trong đúng cửa sổ. Để tránh các sự cố do làm mới DOM, chúng ta có thể sử dụng Dynamic Xpath

Hãy thảo luận về một ví dụ khác

Giả sử 'id' của trường tên người dùng là 'username_1' và XPath sẽ là //*[@id=’firstname_1?]. Khi bạn mở lại trang, 'id' có thể thay đổi thành ''firstname _11'. Trong trường hợp này, quá trình kiểm tra sẽ thất bại vì WebDriver không thể tìm thấy phần tử. Trong trường hợp này, StaleElementReferenceException sẽ bị ném

Trong trường hợp này, chúng ta có thể sử dụng xpath động như,

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

Trong ví dụ trên, XPATH động được sử dụng và nếu ngoại lệ vẫn được tìm thấy, thì nó sẽ bị bắt

Phần kết luận

Xử lý ngoại lệ là một phần thiết yếu của mọi chương trình java cũng như tập lệnh selen. Chúng ta có thể xây dựng mã mạnh mẽ và tối ưu bằng cách xử lý ngoại lệ theo những cách thông minh. Và đó cũng là cách tốt nhất để xử lý các ngoại lệ trong tập lệnh sẽ cung cấp cho bạn báo cáo tốt hơn khi chương trình bị lỗi vì bất kỳ lý do gì

Ở đây chúng tôi đã cố gắng đề cập đến quy trình và khuôn khổ xử lý ngoại lệ cần được triển khai trong các tập lệnh Selenium

Hãy nhớ rằng không bắt buộc phải luôn xử lý ngoại lệ trong khối thử bắt. Bạn cũng có thể đưa ra một ngoại lệ tùy thuộc vào yêu cầu trong tập lệnh

Không nên bỏ qua một ngoại lệ khi chúng phá vỡ quá trình thực thi chương trình. Trong hướng dẫn này, chúng tôi đã xem xét các trường hợp ngoại lệ khác nhau và các cách để giảm cơ hội nhận được chúng thông qua kiểm tra thủ công và mã

Việc thêm thời gian chờ có thể kiểm soát một số trường hợp như ‘NoSuchElementException‘, ‘ElementNotFoundException‘, ‘ElementNotVisibleException‘

Làm cách nào để giải quyết ngoại lệ hết thời gian chờ trong Selenium Python?

Giải pháp .
Bạn có thể tăng thời gian chờ theo cách thủ công bằng cách nhấn và dùng thử. Nếu sự cố vẫn tiếp diễn trong một khoảng thời gian dài hơn, có thể có một số vấn đề khác và bạn nên tiếp tục giải pháp tiếp theo
Bạn có thể thêm thời gian chờ một cách rõ ràng bằng cách sử dụng JavaScript Executor

Python xử lý lỗi hết thời gian như thế nào?

Trong Python, sử dụng stdin. readline() và thiết bị xuất chuẩn. viết() thay vì nhập và in . Đảm bảo rằng giá trị đầu vào cho các trường hợp thử nghiệm được chuyển ở định dạng dự kiến.

Làm cách nào để bỏ qua ngoại lệ hết thời gian chờ trong Selenium Python?

thử. khối ngoại trừ sẽ cho phép bạn bỏ qua thời gian chờ.

Selenium xử lý thời gian chờ kết nối như thế nào?

Bạn nên cố gắng tăng thời gian chờ để đảm bảo rằng các đối tượng có sẵn để Selenium hoạt động . Nếu bạn muốn xử lý lỗi, tốt hơn hãy đưa mã này vào chú thích @B BeforeTest hoặc @B BeforeSuite để đảm bảo toàn bộ bộ kiểm tra sẽ không chạy nếu điều này không thành công.