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

Chúng tôi có thể đặt thời gian chờ mặc định với Selenium webdriver. Phương thức set_page_load_timeout được sử dụng để có thời gian chờ tải trang. Thời gian chờ tính bằng giây được truyền dưới dạng tham số cho phương thức

cú pháp

driver.set_page_load_timeout(5)

Một TimeoutException được đưa ra nếu trang vẫn không được tải sau khi hết thời gian chờ

Chúng ta có thể sử dụng khái niệm đợi ngầm định trong quá trình đồng bộ hóa để xác định thời gian chờ mặc định. Đây là thời gian chờ toàn cầu và được áp dụng cho mọi thành phần trong trang. Phương thức implicitly_wait được sử dụng để xác định chờ đợi ngầm định. Thời gian chờ tính bằng giây được truyền dưới dạng tham số cho phương thức

Trong thế giới thử nghiệm tự động hóa, Selenium là một khung nguồn mở và miễn phí được sử dụng để thực hiện thử nghiệm ứng dụng web trong các trình duyệt web như Chrome, Safari, Firefox, Opera và Edge. Bạn có thể viết các bài kiểm tra Selenium IDE bằng nhiều ngôn ngữ lập trình khác nhau như Python, Java, JavaScript(Node. js), Kotlin, Ruby, PHP và C#

Mặc dù lợi ích của kiểm thử tự động bằng Selenium là vô tận, vẫn có những trường hợp lỗi và ngoại lệ xảy ra thường xuyên trong công cụ (hoặc khung) kiểm thử. Khi quá trình thực thi chương trình bị gián đoạn trong thời gian chạy, một ngoại lệ sẽ được đưa ra, ngăn các lệnh tiếp theo được thực thi. Lỗi thời gian chạy được đưa ra khi bạn thực hiện một thao tác không lường trước được trong thời gian chạy

Xử lý lỗi và ngoại lệ là một cơ chế lập trình theo đó sự xuất hiện của các lỗi và ngoại lệ làm dừng việc thực thi chương trình sẽ được chương trình phản hồi để đảm bảo việc thực thi mã bình thường

Trong blog này về xử lý ngoại lệ trong Selenium Python, chúng ta sẽ xem xét nhiều loại ngoại lệ và lỗi có thể xảy ra khi chạy thử nghiệm Selenium. Đến cuối blog này, bạn sẽ có thể triển khai xử lý lỗi và ngoại lệ cho các thử nghiệm tự động hóa Selenium

Vậy hãy bắt đầu

Giới thiệu về lỗi và ngoại lệ trong Selenium Python

Để một chương trình hoặc ứng dụng chạy được, nhà phát triển phải viết mã để kiểm tra mọi khía cạnh chức năng của nó. Tuy nhiên, các hướng dẫn được nêu trong mã đôi khi không thực thi như dự kiến

Đối với các kỹ sư QA, quy tắc tương tự cũng áp dụng khi viết mã được sử dụng để kiểm tra các tính năng và chức năng của ứng dụng đã được tạo để đảm bảo rằng ứng dụng đã sẵn sàng để sản xuất và sau đó được chuyển đến người dùng

Đây là một sự tương tự để giúp bạn hiểu rõ hơn về các lỗi và ngoại lệ trong Selenium Python

Hãy tưởng tượng bạn có một cuộc họp công việc trên Zoom hoặc bất kỳ ứng dụng hội nghị truyền hình trực tuyến nào khi đang ở nhà. Trong cuộc họp, điện bị cắt, được cho là đã ảnh hưởng đến toàn thành phố. Bạn không còn lựa chọn nào khác ngoài việc hủy bỏ cuộc họp và chờ điện được phục hồi. Tương tự như vậy, các lỗi phát sinh trong thời gian chạy và việc khắc phục chúng gần như là không thể

Ngược lại, ngoại lệ là các sự kiện làm tăng gián đoạn trong khi ứng dụng chạy và có thể được khắc phục bằng xử lý ngoại lệ

Ngoại lệ trong Selenium Python thường được phân thành hai loại

  • Đã kiểm tra ngoại lệ
  • Ngoại lệ không được kiểm tra

Đã kiểm tra Xử lý ngoại lệ trong Selenium được tiến hành trong khi viết mã. Mặt khác, Ngoại lệ không được kiểm tra được nâng lên trong thời gian chạy và có thể tạo ra các lỗi nghiêm trọng so với loại ngoại lệ trước đây

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

Hệ thống phân cấp lỗi và ngoại lệ trong Selenium Python

Bạn có thể nhanh chóng nâng cao kiến ​​thức của mình về các ngoại lệ trong Selenium Python bằng cách đọc qua blog chi tiết này về các ngoại lệ khác nhau trong Selenium

Việc thực hiện kiểm tra trình duyệt tự động Selenium khác nhau giữa các hệ sinh thái mà các kiểm tra đang được thực hiện. Các tập lệnh kiểm tra có thể khác nhau tùy thuộc vào hệ điều hành, trình duyệt hoặc ngôn ngữ lập trình mà chúng được viết bằng. Do đó, các lỗi và ngoại lệ được nêu trong Selenium Python có thể khác. Ví dụ: nếu trình duyệt không có phần tử được chỉ định, việc kiểm tra Selenium đối với thuộc tính phần tử trong trình duyệt web có thể đưa ra các ngoại lệ như NoSuchElementException

Để đảm bảo rằng các ứng dụng hoạt động chính xác và cản trở tương tác của người dùng với sản phẩm hoàn thiện, nên sử dụng xử lý ngoại lệ và lỗi Selenium như một thông lệ tiêu chuẩn

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

Theo một báo cáo gần đây, Python là ngôn ngữ lập trình phổ biến thứ tư trong số các nhà phát triển

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

Nó cung cấp một hệ thống hỗ trợ mạnh mẽ cho các khuôn khổ tự động hóa thử nghiệm và là ngôn ngữ lập trình đơn giản và thân thiện với người dùng nhất hiện có

Lỗi và ngoại lệ trong Selenium Python là phổ biến và có thể xảy ra khi viết bài kiểm tra. Các trường hợp ngoại lệ phải được bắt nguồn từ một lớp kế thừa từ BaseException. Nếu hai trường hợp ngoại lệ không có mối quan hệ lớp con, chúng không được coi là bằng nhau mặc dù có cùng thuộc tính, chẳng hạn như tên

Trong khi viết mã cho các tập lệnh kiểm tra, mã có thể chạy vào các ngoại lệ tích hợp sẵn hoặc bạn có thể đưa ra các ngoại lệ trong mã. Trình thông dịch hoặc các hàm tích hợp tạo ra các ngoại lệ tích hợp

selen. chung. gói ngoại lệ chứa các lớp ngoại lệ, có thể được nhập theo cách sau

cú pháp. từ selen. chung. nhập ngoại lệ [Tên ngoại lệ]

Dưới đây là một ví dụ về ngoại lệ được nhập

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

Ngoại lệ này chỉ ra rằng trang web không chứa thuộc tính của phần tử đang được tìm kiếm

Các ngoại lệ khác trong Selenium Python bao gồm

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

Khi một lệnh không hoàn thành trong khoảng thời gian đã đặt (giây), ngoại lệ này sẽ được đưa ra hoặc loại bỏ. Thời gian chờ có thể được xác định rõ ràng hoặc ngầm định

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

Khi một phần tử không thể được tìm thấy, ngoại lệ này được nâng lên hoặc ném ra. Tuy nhiên, các yếu tố khác nhau có thể dẫn đến ngoại lệ này được tạo ra

    • Phần tử chưa có trong DOM khi thao tác tìm được thực hiện do quá trình tải trang đang diễn ra
    • Bộ định vị phần tử không chính xác được sử dụng trong mã nguồn
  • ElementNotInteractableException

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

Các ngoại lệ như vậy trong Selenium Python được đưa ra bất cứ khi nào có một phần tử trong DOM nhưng không thể tương tác với

  • ElementNotVisibleException

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

Ngoại lệ này thường phát sinh khi tương tác liên quan đến việc nhấp hoặc đọc văn bản từ một phần tử không hiển thị trong DOM

  • StaleElementReferenceException

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

Phần tử lỗi thời hoặc không có sẵn trong DOM được gọi là phần tử cũ. Tham chiếu đến một phần tử hiện đang "cũ" sẽ tăng hoặc loại bỏ ngoại lệ này

Ví dụ: các lý do sau có thể dẫn đến ngoại lệ StaleElementReferenceException

    • Sau khi phần tử được định vị, trang đã thay đổi hoặc được làm mới
    • Bối cảnh được làm mới có thể chứa phần tử
    • Xóa hoàn toàn phần tử web được tham chiếu
  • ElementClickInterceptedException

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

Ngoại lệ này phát sinh khi phần tử nhận tương tác cản trở phần tử dự định được nhấp, do đó ngăn thao tác Nhấp vào phần tử được thực hiện

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

Ngoại lệ này sẽ được đưa ra nếu cookie có tên đường dẫn đã chỉ định không được chứa trong số các cookie tương ứng của tài liệu đang hoạt động trong phiên duyệt hiện tại. Để tìm hiểu thêm về cookie trong Selenium, hãy xem hướng dẫn chi tiết này về cách xử lý cookie trong Selenium WebDriver

    Xem video này để hiểu cách bạn có thể xử lý Cookie và thực hiện các thao tác khác nhau như xóa, nhận giá trị tham số và thêm chúng vào Selenium WebDriver bằng Java

  • Ngoại lệ đối số không hợp lệ

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

Một lệnh có đầu vào đối số không phù hợp hoặc không chính xác sẽ đưa ra một UnlimitedArgumentException

  • UnlimitedElementStateException

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

Ngoại lệ này được đưa ra khi chúng tôi cố gắng thực hiện một thao tác không áp dụng cho một phần tử. Ví dụ: nếu chúng tôi thực hiện thao tác nhấp trên nút radio bị vô hiệu hóa, ngoại lệ sẽ được đưa ra và do đó lệnh đã cho không thể được thực thi

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

Ngoại lệ này được đưa ra khi không thể tìm thấy mục tiêu cửa sổ dự định

Nếu bạn là một lập trình viên Python đang muốn tạo dấu ấn, thì bạn có thể nâng tầm sự nghiệp của mình lên một tầm cao mới với chứng chỉ Selenium Python 101 từ LambdaTest

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

Dưới đây là thông tin ngắn gọn về chứng nhận Selenium Python 101 từ LambdaTest

Xử lý lỗi và ngoại lệ trong Selenium Python

Xử lý lỗi và ngoại lệ trong Selenium Python rất quan trọng khi viết mã sẵn sàng sản xuất, vì các ngoại lệ và lỗi có thể phát sinh vì những lý do khác nhau, như đã thảo luận trước đó

Điều kiện tiên quyết để viết bài kiểm tra bằng Selenium Python là cài đặt Python và Selenium trên máy của bạn. Khi sử dụng Python để kiểm tra Selenium, khung mặc định được sử dụng là PyUnit, còn được gọi là unittest, chịu ảnh hưởng của JUnit. Nó hoạt động tương tự như các khung kiểm tra đơn vị khác

Tuy nhiên, trong blog này về xử lý lỗi và ngoại lệ trong Selenium Python, chúng tôi sẽ sử dụng Pytest, một khung kiểm tra Python khác hỗ trợ các chức năng, API và kiểm tra đơn vị. Nó tương thích với các phiên bản Python hiện tại và dễ dàng định cấu hình bằng lệnh Trình quản lý gói Python (pip) trong thiết bị đầu cuối

Nếu bạn chưa quen với việc thử nghiệm bằng Selenium Python, đây là hướng dẫn từng bước chi tiết về cách bắt đầu với Selenium Python. Bạn sẽ tìm hiểu cách định cấu hình Python, Selenium và Pytest trên máy của mình để bắt đầu thử nghiệm tự động với Selenium. Bạn có thể tìm hiểu thêm về Pytest qua hướng dẫn Selenium Pytest này

Thiết lập dự án

Để thiết lập dự án thử nghiệm, chúng tôi đang sử dụng Visual Studio (VS) Code IDE để viết các tập lệnh thử nghiệm. Ngoài ra, có sẵn các IDE khác, chẳng hạn như Pycharm, Atom và Sublime Text mà bạn cũng có thể sử dụng

Đối với trình quản lý gói, chúng tôi sẽ sử dụng Thơ, một công cụ Python quản lý và đóng gói các phụ thuộc cần thiết trong một môi trường ảo cụ thể cho dự án của bạn. Bạn có thể khai báo các thư viện mà dự án của bạn phụ thuộc vào và nó sẽ quản lý (cài đặt và cập nhật) chúng

  1. Để cài đặt Thơ trên thiết bị đầu cuối của máy cục bộ của bạn, vui lòng sử dụng lệnh sau
    • Cho cửa sổ
    • pip install poetry

    • dành cho máy Mac
    • pip3 install poetry (tùy thuộc vào phiên bản Python bạn đang sử dụng)

  2. Di chuyển đến thư mục chứa dự án của bạn
  3. Làm cách nào để giải quyết ngoại lệ hết thời gian chờ trong Selenium Python?

  4. Để khởi tạo Thơ trong terminal, chúng ta sử dụng lệnh thơ init. Lệnh này sẽ tạo ra một pyproject. tệp cấu hình toml chứa các yêu cầu hệ thống xây dựng cho các dự án Python
  5. Làm cách nào để giải quyết ngoại lệ hết thời gian chờ trong Selenium Python?

  6. Chúng tôi cần các thư viện sau trong dự án của mình để chạy thử nghiệm Selenium Python
    • selen (câu 4. 3. 0)
    • flake8 (câu 4. 0. 1)
    • pytest (câu 7. 1. 2)
    • pytest-xdist (v 2. 5. 0)
    • autopep8 (v 1. 6. 0)

    Plugin pytest-xdist thêm các chế độ thực thi thử nghiệm mới vào Pytest, cho phép chúng tôi chạy thử nghiệm Selenium Python song song. Autopep8 định dạng mã Python để tuân thủ hướng dẫn kiểu PEP 8. Flake8 là một công cụ tuyệt vời để kiểm tra lỗi mã của bạn so với hướng dẫn kiểu PEP 8

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

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

  11. Thêm pytest-xdist
  12. Làm cách nào để giải quyết ngoại lệ hết thời gian chờ trong Selenium Python?

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

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

  17. Sau khi cài đặt các phụ thuộc cần thiết, tiếp tục nhấn Enter, sau đó xác nhận việc tạo tệp
  18. dự án pyproject. tệp toml chứa tất cả các gói phải được cài đặt trong môi trường ảo

tác giả = ["Eugene Kwaka"]

[dụng cụ. thơ. phụ thuộc]

[dụng cụ. thơ. phụ thuộc dev]

yêu cầu = ["thơ-lõi>=1. 0. 0"]

build-backend="thơ. cốt lõi. nề. api"

Để cài đặt các phụ thuộc được đề cập, hãy chạy lệnh sau để tạo pyproject. toml và thơ. khóa tập tin trong thư mục

Môi trường ảo (venv) chứa các phụ thuộc đã cài đặt sẽ được Thơ tự động tạo. Điều này rất quan trọng vì chúng tôi không muốn trộn lẫn các phụ thuộc toàn cục của Python với các phụ thuộc cụ thể mà chúng tôi yêu cầu để chạy thử nghiệm trong dự án

Trong dự án của chúng tôi, chúng tôi tạo một thư mục chứa các chức năng kiểm tra. Hãy gọi nó là "seltests"

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

Tự động hóa các bài kiểm tra Python của bạn sau vài giây. Thử LambdaTest ngay

Xử lý Lỗi và Ngoại lệ trên Cloud Selenium Grid

Bây giờ chúng ta đã đề cập đến các yếu tố cần thiết để bắt đầu với tự động hóa web Python trong Selenium, chúng ta sẽ xem xét việc xử lý các lỗi và ngoại lệ trong Selenium Python trên lưới điện toán đám mây. Trong trường hợp này, chúng tôi đang sử dụng LambdaTest

LambdaTest là một nền tảng thử nghiệm trình duyệt chéo dựa trên đám mây cho phép bạn thực hiện thử nghiệm tự động hóa Python trên quy mô lớn trên một đám mây Selenium Grid. Nền tảng độc đáo và đầy đủ tính năng cung cấp một nhóm trình duyệt trực tuyến gồm hơn 3000 trình duyệt thực trên nhiều hệ điều hành;

Bạn cũng có thể Đăng ký Kênh YouTube LambdaTest và cập nhật các hướng dẫn mới nhất về kiểm tra trình duyệt tự động, kiểm tra Selenium, kiểm tra Cypress E2E, CI/CD, v.v.

Để bắt đầu với LambdaTest, vui lòng làm theo các bước được đề cập bên dưới

  1. Đăng ký và đăng nhập vào tài khoản LambdaTest của bạn
  2. Di chuyển đến Phần Hồ sơ LambdaTest và sao chép tên người dùng và khóa truy cập của bạn, khóa này sẽ được sử dụng để truy cập Lưới Selenium Từ xa của LambdaTest
  3. Bạn cũng sẽ cần các khả năng mong muốn được tạo bằng Trình tạo khả năng LambdaTest. Bạn có thể tạo các khả năng cần thiết cho bài kiểm tra cụ thể mà bạn đang thực hiện trên trang đó

Chúng tôi đã liệt kê các loại ngoại lệ khác nhau trong Selenium Python trong blog. Bây giờ, chúng ta sẽ tìm hiểu sâu hơn về hai ngoại lệ phổ biến trong Selenium Python khi thực hiện kiểm thử tự động

NoSuchElementException

Một NoSuchElementException được đưa ra nếu chúng tôi cố gắng xác định vị trí bất kỳ phần tử nào không khả dụng trên trang (hoặc DOM)

Tình huống 1 (Trình duyệt Chrome)

Tình huống 2 (Trình duyệt Firefox)

Triển khai (Kịch bản 1 trên Trình duyệt Chrome)

Tên tệp – test_nosuchelement_google. py

Triển khai (Kịch bản 2 trên Trình duyệt Firefox)

Tên tệp – test_nosuchelement_firefox. pyGitHub

Thực thi mã

Chúng tôi chạy hai tập lệnh thử nghiệm bằng cách sử dụng thử nghiệm song song, cho phép thực hiện đồng thời các thử nghiệm giống nhau. Để chạy thử nghiệm, gõ lệnh sau trong thiết bị đầu cuối

thơ chạy pytest seltests/test_nosuchelement_google. py seltests/test_nosuchelement_firefox. py -n 2

Thiết bị đầu cuối cho thấy việc thực hiện kiểm tra không thành công

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

Trong bảng điều khiển LambdaTest Builds, các lần thực thi thử nghiệm không thành công được hiển thị

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

Hướng dẫn mã

Chúng tôi đang tiến hành hướng dẫn mã chung vì các thư viện Selenium Python đã nhập được sử dụng trong cả hai kịch bản thử nghiệm giống hệt nhau

Bước 1. Nhập các lớp Selenium Python cần thiết – pytest, webdriver, sys, By, NoSuchElementException

từ Selenium nhập webdriver

từ selen. webdriver. chung. bằng cách nhập khẩu Bằng cách

từ selen. phổ thông. ngoại lệ nhập NoSuchElementException

Chúng tôi đã nhập pytest, chủ yếu được sử dụng để thử nghiệm đơn vị trong Selenium Python. Selenium WebDriver là một khung web cho phép chúng tôi thực hiện kiểm tra trên nhiều trình duyệt và trong trường hợp này, chúng tôi đang sử dụng Python để viết các tập lệnh kiểm tra. Truy vấn By dựa trên phương thức find_element() trong Selenium nhắm mục tiêu một công cụ định vị cụ thể

Bước 2. Chúng tôi chỉ định các khả năng của trình duyệt dựa trên trình duyệt mà chúng tôi sử dụng để tiến hành kiểm tra tự động trong LambdaTest. Chúng được tạo bằng Trình tạo khả năng LambdaTest

Trình duyệt Chrome

"khóa truy cập". "",

"xây dựng". "Thử nghiệm NoSuchElementException trên Chrome",

"Tên". "Thử nghiệm NoSuchElementException trên Chrome",

"Tên ga tàu". "cửa sổ 10"

"phiên bản trình duyệt". "102. 0",

firefox

"khóa truy cập". "",

"xây dựng". "Thử nghiệm NoSuchElementException cho LambdaTest (Firefox)",

"Tên". "Thử nghiệm NoSuchElementException cho LambdaTest (Firefox)",

"Tên ga tàu". "cửa sổ 10"

"phiên bản trình duyệt". "101. 0",

Bước 3. Chúng tôi xác định một chức năng bắt đầu bằng "kiểm tra" trong đó chúng tôi chỉ định các phương thức kiểm tra. Bạn có thể tìm hiểu thêm về nó thông qua blog này về thử nghiệm Pytest bằng Selenium WebDriver

def test_lambdatest_nosuchelement()

Bước 4. Sau đó, chúng tôi đặt tên người dùng và khóa truy cập LambdaTest của mình cho các biến mà chúng tôi đã thêm vào remote_url. URL từ xa này kết nối chúng tôi với Lưới Selenium từ xa (@hub. lambdatest. com/wd/trung tâm)

# Tên người dùng hồ sơ LambdaTest

# Khóa truy cập hồ sơ LambdaTest

# Url từ xa để kết nối với phiên bản LambdaTest của chúng tôi

remote_url = "https. //" + tên người dùng + ". " + app_key + " @hub. lambdatest. com/wd/trung tâm"

Bước 5. Sau đó, chúng tôi sử dụng remote_url và các khả năng của trình duyệt để khởi tạo trình duyệt tương ứng (tôi. e. Chrome hoặc Firefox)

Trình duyệt Chrome

ch_driver = trình điều khiển web. Xa(

command_executor=remote_url, wish_capabilities = ch_capabilities)

firefox

ff_driver = trình điều khiển web. Xa(

command_executor=remote_url, wish_capabilities = ff_capabilities)

Bước 6. Sau đó, chúng tôi nhận được URL của trang web mà chúng tôi muốn định vị một phần tử cụ thể. Trong thử nghiệm của chúng tôi, chúng tôi cố gắng xác định vị trí một phần tử theo tên của nó và nhấp vào nó. Khi phần tử đã được định vị và nhấp vào, chúng tôi thoát khỏi thử nghiệm

Trình duyệt Chrome

ch_driver. nhận ('https. //www. lambdatest. com/selenium-sân chơi/')

ch_driver. max_window()

# Sẽ tìm một phần tử theo thuộc tính NAME của nó trong trang và nhấp vào phần tử đó

ch_driver. find_element(Bởi. CLASS_NAME, "p-10"). nhấp chuột()

firefox

ff_driver. nhận ('https. //www. lambdatest. com/selenium-sân chơi/')

# Điều này sẽ tối đa hóa giao diện cửa sổ của lớp trình điều khiển trong trường hợp này là FIREFOX

ff_driver. max_window()

# Sẽ tìm một phần tử theo thuộc tính NAME của nó trong trang và nhấp vào phần tử đó

ff_driver. find_element(Bởi. CLASS_NAME, "p-10"). nhấp chuột()

Xem video này để tìm hiểu cách xử lý ngoại lệ trong Selenium, bao gồm các loại ngoại lệ khác nhau và cách xử lý chúng bằng các phương pháp khác nhau

Xử lý NoSuchElementException đang hoạt động

Theo ngoại lệ được đề cập ở trên, chúng tôi phải bắt “NoSuchElementException” và in các thông báo nhật ký thích hợp để đảm bảo rằng thử nghiệm của chúng tôi không thành công với thông báo lỗi thích hợp

Chúng tôi sử dụng phương pháp thử và ngoại trừ để bắt ngoại lệ khi nó được đưa ra trong tập lệnh thử nghiệm. Khối “thử” cho phép bạn kiểm tra mã lỗi, trong khi khối “ngoại trừ” cho phép bạn xử lý các lỗi hoặc ngoại lệ được đưa ra

Trình duyệt Chrome

từ Selenium nhập webdriver

từ selen. webdriver. chung. bằng cách nhập khẩu Bằng cách

từ selen. phổ thông. ngoại lệ nhập NoSuchElementException

"khóa truy cập". "",

"xây dựng". "Thử nghiệm NoSuchElementException trên Chrome",

"Tên". "Thử nghiệm NoSuchElementException trên Chrome",

"Tên ga tàu". "cửa sổ 10"

"phiên bản trình duyệt". "102. 0",

def test_lambdatest_nosuchelement()

# Tên người dùng hồ sơ LambdaTest

# Khóa truy cập hồ sơ LambdaTest

# Url từ xa để kết nối với phiên bản LambdaTest của chúng tôi

remote_url = "https. //" + tên người dùng + ". " + app_key + " @hub. lambdatest. com/wd/trung tâm"

ch_driver = trình điều khiển web. Xa(

command_executor=remote_url, wish_capabilities = ch_capabilities)

ch_driver. nhận ('https. //www. lambdatest. com/selenium-sân chơi/')

ch_driver. max_window()

# 'By' được sử dụng để định vị phần tử theo thuộc tính của nó

ch_driver. find_element(Bởi. CLASS_NAME, "p-10")

ngoại trừ NoSuchElementException

print("Xử lý ngoại lệ")

firefox

từ Selenium nhập webdriver

từ selen. webdriver. chung. bằng cách nhập khẩu Bằng cách

từ selen. phổ thông. ngoại lệ nhập NoSuchElementException

# Khả năng mong muốn theo SELENIUM 4

"khóa truy cập". "",

"xây dựng". "Thử nghiệm NoSuchElementException cho LambdaTest (Firefox)",

"Tên". "Thử nghiệm NoSuchElementException cho LambdaTest (Firefox)",

"Tên ga tàu". "cửa sổ 10"

"phiên bản trình duyệt". "101. 0",

def test_lambdatest_nosuchelement()

# Tên người dùng hồ sơ LambdaTest

# Khóa truy cập hồ sơ LambdaTest

# Url từ xa để kết nối với phiên bản LambdaTest của chúng tôi

remote_url = "https. //" + tên người dùng + ". " + app_key + " @hub. lambdatest. com/wd/trung tâm"

# tạo phiên bản Firefox dựa trên url từ xa và các khả năng mong muốn

ff_driver = trình điều khiển web. Xa(

command_executor=remote_url, wish_capabilities = ff_capabilities)

ff_driver. nhận ('https. //www. lambdatest. com/selenium-sân chơi/')

# Điều này sẽ tối đa hóa giao diện cửa sổ của lớp trình điều khiển trong trường hợp này là FIREFOX

ff_driver. max_window()

# Sẽ tìm một phần tử theo thuộc tính NAME của nó trong trang và nhấp vào phần tử đó

ff_driver. find_element(Bởi. CLASS_NAME, "p-10"). nhấp chuột()

ngoại trừ NoSuchElementException

print("Xử lý ngoại lệ")

Chấp hành

Sử dụng thiết bị đầu cuối để nhập lệnh sau để thực hiện kiểm tra Selenium Python song song trên LambdaTest Grid

thơ chạy pytest seltests/test_handle_nosuchelement_google. py

seltests/test_handle_nosuchelement_firefox. py -n 2

Các thử nghiệm sẽ được thực hiện thành công

Các bài kiểm tra đã vượt qua sẽ được hiển thị như sau trong Bảng điều khiển LambdaTest

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

Các bài kiểm tra đã vượt qua sẽ được hiển thị như sau trong Bảng điều khiển LambdaTest

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

Hướng dẫn mã

Khối “thử” sẽ chạy đối số find_element() và nhận truy vấn Theo để định vị một phần tử bằng cách sử dụng tên của nó trong URL được cung cấp

Bước 1. Trong công cụ kiểm tra của trình duyệt, bấm vào Console và gõ lệnh sau để tìm phần tử có tên “p-10”

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

Thử nghiệm không thất bại vì phần tử có tên “p-10” không tồn tại. Khối “ngoại trừ” sẽ chạy, bắt ngoại lệ

Bước 2. Khối mã thử và ngoại trừ giống nhau trong tập lệnh văn bản của Chrome và Firefox

Trình duyệt Chrome

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

firefox

StaleElementReferenceException

Ngoại lệ này được đưa ra bất cứ khi nào một phần tử không có trong DOM hoặc bị xóa

Tình huống 1 (Trình duyệt Chrome)

Tình huống 2 (Trình duyệt Firefox)

Triển khai (Kịch bản 1 trên Trình duyệt Chrome)

Tên tệp – test_staleelement_chrome. py

Triển khai (Kịch bản 2 trên Trình duyệt Firefox)

Tên tệp – test_staleelement_firefox. py

Chấp hành

Chạy lệnh sau trong thiết bị đầu cuối để thực thi các tập lệnh thử nghiệm trong thử nghiệm song song

thơ chạy pytest seltests/test_staleelement_google. py  seltests/test_staleelement_firefox. py

Chúng tôi nhận được thông báo Lỗi ngoại lệ phần tử cũ trong thiết bị đầu cuối

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

Chúng ta có thể xem các ngoại lệ đã nêu trong Bảng điều khiển LambdaTest

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

Chạy tập lệnh kiểm tra Python trên hơn 3000 thiết bị và trình duyệt. Thử LambdaTest ngay


Hướng dẫn mã

Bước 1. Nhập các lớp Selenium Python cần thiết – pytest, webdriver, sys, By và StaleElementReferenceException

từ Selenium nhập webdriver

từ selen. webdriver. chung. bằng cách nhập khẩu Bằng cách

từ selen. chung. ngoại lệ nhập StaleElementReferenceException

Bước 2. Chúng tôi tạo các chức năng trong LambdaTest Capabilities dựa trên trình duyệt và hệ điều hành

Trình duyệt Chrome

"khóa truy cập". "",

"xây dựng". "Thử nghiệm StaleElementReferenceException trên Chrome",

"Tên". "Thử nghiệm StaleElementReferenceException trên Chrome",

"Tên ga tàu". "cửa sổ 10"

"phiên bản trình duyệt". "102. 0",

firefox

"khóa truy cập". "",

"xây dựng". "Thử nghiệm StaleElementReferenceException cho LambdaTest (Firefox)",

"tên". "Thử nghiệm StaleElementReferenceException cho LambdaTest (Firefox)",

"Tên ga tàu". "cửa sổ 10"

"phiên bản trình duyệt". "101. 0",

Bước 3. Chúng tôi tạo một chức năng sẽ chứa các phương thức thử nghiệm của chúng tôi. Trong hàm, chúng tôi xác định tên người dùng và mật khẩu cho một remote_url sẽ kết nối với Lưới Selenium từ xa

def test_ecommerceplayground_staleelement()

# Tên người dùng hồ sơ LambdaTest

# Khóa truy cập hồ sơ LambdaTest

# Url từ xa để kết nối với phiên bản LambdaTest của chúng tôi

remote_url = "https. //" + tên người dùng + ". " + \

app_key + "@hub. lambdatest. com/wd/trung tâm"

# tạo phiên bản Chrome dựa trên url từ xa và các khả năng mong muốn

ch_driver = trình điều khiển web. Xa(

command_executor=remote_url, wish_capabilities=ch_capabilities)

'https. //sân chơi thương mại điện tử. lambdatest. io/chỉ mục. php?route=account/login')

emailElement = ch_driver. find_element(Bởi. ID, "đầu vào-email")

passwordElement = ch_driver. find_element(Bởi. ID, "mật khẩu đầu vào")

emailElement. send_keys("email@gmail. com")

ch_driver. find_element(Bởi. XPATH, "//input[@type='submit']"). nhấp chuột()

mật khẩuElement. send_keys("mật khẩu")

Mã cho các bài kiểm tra trình duyệt giống nhau. Chúng tôi đặt trình điều khiển web Chrome thành ch_driver trong khi trình điều khiển web Firefox là ff_driver. Dựa trên id của chúng, biến emailElement sẽ định vị phần tử đầu vào email, trong khi biến passwordElement sẽ định vị phần tử đầu vào

Sau đó, chúng tôi nhập email vào đầu vào email bằng cách sử dụng emailElement. send_keys() và xác định vị trí và nhấp vào nút đăng nhập, đó là loại “gửi”. Sau đó nhập mật khẩu và cuối cùng thoát khỏi bài kiểm tra với. chức năng bỏ ()

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

Khi mã được chạy, một StaleElementReferenceException sẽ được đưa ra vì những lý do sau

  • Trong Chrome, phần tử không được đính kèm vào tài liệu trang
  • Trong Firefox, mật khẩu tham chiếu phần tử không còn được đính kèm với DOM

Hướng dẫn mã

Chúng tôi áp dụng các khối mã thử và ngoại trừ để xử lý “StaleElementReferenceException” khi nó bị ném trong quá trình thực thi thử nghiệm của chúng tôi

Khối thử sẽ chạy mã để thêm mật khẩu trong đó ngoại lệ sẽ được đưa ra. Khối ngoại trừ sẽ xử lý ngoại lệ bằng cách định vị phần tử nhập mật khẩu và gửi giá trị mật khẩu

Khi mã được chạy, nó sẽ thực thi thành công trong thiết bị đầu cuối

thơ chạy pytest seltests/test_handle_staleelement_google. py seltests/test_handle_staleelement_firefox. py

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

Chúng ta có thể thấy các lần thực thi thử nghiệm thành công trong bảng điều khiển LambdaTest Build

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

Để có cái nhìn đầy đủ về tất cả các kết quả và xu hướng thử nghiệm, hãy xem Trang tổng quan LambdaTest Analytics của bạn. Nó cho phép bạn xem các bài kiểm tra đang diễn ra như thế nào, vì vậy bạn có thể đảm bảo rằng mọi thứ được thực thi tương ứng

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

Phần kết luận

Trong blog này, chúng ta đã xem xét một số ngoại lệ phổ biến trong Selenium Python. Chúng tôi cũng đã đi sâu vào các trường hợp ngoại lệ khác nhau và xem xét lý do tại sao NoSuchElementException và StaleElementReference được tạo ra cũng như cách xử lý chúng. Selenium Python cung cấp các phương thức để bạn có thể xử lý các ngoại lệ khác nhau và trong trường hợp này, chúng tôi đã tập trung vào phương thức thử và ngoại trừ

Câu hỏi thường gặp (FAQ)

Các ngoại lệ trong Selenium Python là gì?

Một ngoại lệ là một sự kiện, xảy ra trong khi chương trình của chúng ta đang chạy, ngăn cản việc thực thi các câu lệnh như bình thường. Khi một ngoại lệ xảy ra, việc thực thi các câu lệnh dừng lại và Python bắt đầu tìm kiếm một nơi để “nhảy ra” để

Năm ngoại lệ trong Selenium là gì?

  • NoSuchWindowException
  • NoSuchFrameException
  • NoSuchElementException
  • NoAlertPresentException
  • Ngoại lệ Selector không hợp lệ

Các loại ngoại lệ trong Selenium là gì?

Kiểm tra ngoại lệ được xử lý trong quá trình viết mã. Khi đó, các ngoại lệ này được xử lý trước quá trình biên dịch. Nếu nó xảy ra, một ngoại lệ như vậy sẽ được kiểm tra tại thời điểm biên dịch. Ngoại lệ được kiểm tra là những ngoại lệ được xử lý tại thời điểm mã được biên dịch. Các ngoại lệ này phải được xử lý tại thời điểm biên dịch và do đó, các ngoại lệ này được kiểm tra trước khi biên dịch mã

Làm cách nào để sửa lỗi ngoại lệ hết thời gian chờ trong Selenium Python?

A TimeoutException được đưa ra nếu trang vẫn không được tải sau khi hết thời gian chờ. Chúng ta có thể sử dụng khái niệm chờ ngầm định trong quá trình đồng bộ hóa để xác định thời gian chờ mặc định . Đây là thời gian chờ toàn cầu và được áp dụng cho mọi thành phần trong trang. Phương thức implicitly_wait được sử dụng để xác định chờ đợi ngầm định.

Làm cách nào để khắc phục lỗi hết thời gian chờ trong Selenium?

setScriptTimeout(); Điều này được sử dụng để đặt lượng thời gian mà WebDriver phải đợi tập lệnh không đồng bộ hoàn tất thực thi trước khi đưa ra lỗi. Nếu thời gian chờ là âm, thì tập lệnh sẽ được phép chạy vô thời hạn. time – Giá trị thời gian chờ.

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

Bạn đặt thời gian chờ (tính bằng giây) bằng cách sử dụng tham số timeout= khi thực hiện các yêu cầu HTTP trong thư viện yêu cầu Python .