Selenium đợi cho đến khi phần tử hiển thị python

Bài viết này là một phần của Trung tâm nội dung của chúng tôi. Để biết thêm các tài nguyên chuyên sâu, hãy xem trung tâm nội dung của chúng tôi trên Hướng dẫn Selenium Python

Một trong những yêu cầu chính để tự động hóa các tương tác với WebElement trong DOM là nó phải hiển thị và có thể tương tác được. Giống như tôi, bạn cũng sẽ gặp một số tình huống trong đó các tập lệnh Selenium Python của bạn đã tạo ra một ElementNotVisibleException

Lỗi trong tập lệnh tự động hóa thử nghiệm có thể là do sự hiện diện của WebElements động trên trang web. WebElement đang thử nghiệm có thể chưa được tải trên trang web và thử nghiệm của bạn đang cố thực hiện một số hoạt động trên WebElement đó. Được biết, tải nội dung động bằng AJAX được sử dụng rộng rãi trên các sản phẩm web (hoặc trang web) khác nhau. Khi tương tác với WebElements động bằng cách sử dụng tự động kiểm tra Selenium, bạn nên thêm Selenium đợi trang tải để phần tử có sẵn để thực hiện kiểm tra

Selenium đợi cho đến khi phần tử hiển thị python

Nguồn

Chờ đợi Selenium trong Python cung cấp thêm thời gian để tải WebElements trong DOM. Trong bài viết này, chúng tôi đi sâu vào các loại chờ khác nhau trong Selenium WebDriver cùng với việc sử dụng Selenium chờ tải trang trong Python

Tại sao nên sử dụng Selenium Đợi trang tải?

Để trả lời câu hỏi này, điều cần thiết là phải hiểu 'ở đâu' và 'tại sao' tải trang động. Một số điều kiện được đề cập dưới đây có thể bạn đã biết hoặc bạn có thể đã gặp phải chúng

Trường hợp 1. Đang tải tệp lên

Tôi chắc chắn rằng bạn có thể đã tải lên một số tệp, hình ảnh hoặc video trên một nền tảng trực tuyến nào đó. Bạn có thể nhận thấy rằng khi bạn chọn tệp, sẽ mất một chút thời gian để tải tệp đó lên. TRÊN các dòng tương tự, khi bạn cố gắng tải tệp lên bằng cách sử dụng tập lệnh tự động kiểm tra Selenium, bạn sẽ cần triển khai Selenium Wait trong Python để thực hiện tải tệp lên thành công. thành công. Nếu bạn không sử dụng Selenium đợi trang tải sau khi tải lên, bạn có thể gặp một số lỗi

Trường hợp 2. Thông báo xác nhận bị trì hoãn

Các ứng dụng như Gmail cho phép người dùng tương tác và làm việc trên cơ sở thời gian thực. Mặc dù bạn có thể tương tác với ứng dụng thông qua usecase gửi email, nhưng bạn không nhận được xác nhận gửi ngay lập tức. Việc xác nhận phụ thuộc vào một số yếu tố như tính khả dụng của mạng, kích thước tệp đính kèm, v.v.

Là một kỹ sư QA, chúng ta cần tính đến các điều kiện như vậy khi lập kế hoạch và thực hiện các bài kiểm tra khả năng sử dụng và mức độ chấp nhận của người dùng. Đối với Python, bạn sẽ phải triển khai Selenium Chờ tải trang để đảm bảo rằng các thử nghiệm được thực hiện với các WebElements cần thiết trong DOM

Trường hợp 3. Tải phần tử trang có điều kiện

Một số trang web có một số thành phần hoặc yếu tố bị ẩn hoặc không hiển thị ở giai đoạn đầu. Chúng chỉ có thể được tương tác sau khi đáp ứng một số điều kiện đặt trước. Ví dụ: Trên trang web bán vé xem phim, nút đặt chỗ chỉ khả dụng sau một khoảng thời gian đặt trước. Đây là trường hợp điển hình của việc tải các thành phần trang có điều kiện. Để xử lý các tình huống như vậy trong các tập lệnh tự động hóa thử nghiệm, bạn sẽ cần triển khai Selenium chờ tải trang

Selenium đợi để đảm bảo trang tải được áp dụng trong các trường hợp khác như bỏ qua quảng cáo trong YouTube, tải chậm hình ảnh trong các trang web, v.v.

Bắt đầu thử nghiệm tự động hóa Python miễn phí của bạn ngay hôm nay

Chứng nhận này dành cho các chuyên gia muốn phát triển kiến ​​thức chuyên môn nâng cao, thực hành về thử nghiệm tự động hóa Selenium với Python và đưa sự nghiệp của họ lên một tầm cao mới

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

Các loại khác nhau của Python Selenium Chờ

Selenium WebDriver cung cấp gói "chờ" để xử lý các điều kiện mà bạn cần đợi trước khi tương tác với các WebElements mục tiêu. Bạn cũng có thể tận dụng chức năng 'Ngủ' của Python để đợi trong một khoảng thời gian xác định, tuy nhiên, cách tiếp cận đó không phải là cách được khuyến nghị

Có ba cách khác nhau để triển khai Selenium Chờ trong Python để tải trang

  • chờ đợi rõ ràng
  • chờ đợi tiềm ẩn
  • trôi chảy chờ đợi

Chờ đợi rõ ràng trong Selenium Python

Chờ đợi rõ ràng được giới thiệu để tạm thời đóng băng việc thực thi tập lệnh tự động kiểm tra Selenium. Nó sử dụng các chức năng có sẵn trong gói chờ của Selenium WebDriver. Chương trình tạm dừng thực hiện trong một thời gian xác định hoặc cho đến khi một điều kiện dự kiến ​​nhất định được đáp ứng

Chờ đợi rõ ràng có thể được thực hiện bằng cách sử dụng lớp WebDriverWait của các liên kết python Selenium. Hãy xem lớp WebDriverWait

lớp selen. webdriver. ủng hộ. Chờ đã. WebDriverWait(trình điều khiển, thời gian chờ, poll_frequency=0. 5, bỏ qua_ngoại lệ=Không có)

Như bạn có thể thấy, nó chấp nhận hai tham số bắt buộc. trình điều khiển và thời gian chờ; . thăm dò_tần suất và bỏ qua_ngoại lệ

  • trình điều khiển – Đây là phiên bản của WebDriver bạn đang sử dụng để thực hiện kiểm tra ứng dụng của mình. Ví dụ – Chrome, Remote, Firefox, v.v. ,
  • thời gian chờ - Nó đề cập đến số giây trước khi quá trình chờ này không thành công và đưa ra một ngoại lệ
  • poll_frequency – tần suất thăm dò (tham số tùy chọn) là khoảng thời gian chờ/ngủ trước khi WebDriverWait gọi để kiểm tra lại các điều kiện. Theo mặc định, nó là 500 mili giây trong Selenium. Bạn có thể sửa đổi giá trị theo yêu cầu của bạn. Nếu bạn vượt qua poll_frequency là “0”, hàm tạo WebDriverWait __init__ sẽ đặt nó trở lại 0. 5, là thời gian chờ mặc định giữa hai lần gọi lại
  • bị bỏ qua_ngoại lệ - Trình tạo WebDriverWait __init__ được triển khai theo cách mà theo mặc định, nó bỏ qua NoSuchElementException. Nếu tập lệnh tự động kiểm tra Selenium của bạn yêu cầu bạn bỏ qua nhiều ngoại lệ hơn thì hãy chuyển danh sách ngoại lệ cho thuộc tính ignore_exceptions. Hàm xây dựng WebDriverWait mở rộng danh sách các ngoại lệ của nó sẽ bị bỏ qua bằng cách lặp lại danh sách mà bạn vượt qua

Bên cạnh __init__, lớp WebDriverWait cũng chứa hàm đối tượng __repr__ trả về biểu diễn đối tượng ở định dạng chuỗi khi hàm repr() được gọi trên một đối tượng. Nói một cách đơn giản hơn, hàm repr() được sử dụng bởi các hàm khác của lớp WebDriverWait để ghi lại thông tin hữu ích về đối tượng mà nó được gọi

Hai chức năng quan trọng của lớp WebDriverWait được sử dụng để đưa ra các điều kiện là cho đến khi và cho đến khi_không

  • until(self, method, message=''). Điều này chấp nhận một phương thức làm đối số và một thông báo tùy chọn. cho đến khi gọi phương thức này lặp đi lặp lại sau một khoảng thời gian cố định (i. e. poll_frequency [mặc định 500 mili giây]). Việc gọi phương thức đã chỉ định chỉ dừng khi giá trị trả về không đánh giá là “Sai” i. e, cho đến khi phương thức trả về Thành công
  • until_not(self, method, message=''). cho đến khi_not hoạt động giống như cho đến khi. Sự khác biệt duy nhất là until_not lặp đi lặp lại các lệnh gọi phương thức tại một khoảng thời gian cố định [poll_frequency] nếu nó đánh giá là True. Thông thường, nó được sử dụng khi bạn muốn đợi cho đến khi một phần tử biến mất

WebDriverWait tăng TimeoutException nếu phương thức không trả về True cho đến khi hoặc Sai cho đến khi_not

Thí dụ

WebDriverWait(trình điều khiển, 10). cho đến khi (EC. sự hiện diện_of_element_location((Bởi. ID, "chờTạo")))

Điều kiện mong đợi trong Selenium là một lớp tiện lợi được sử dụng nhiều với lớp WebDriverWait của Selenium. EC phổ biến nhất bao gồm

  • Cảnh_báo_hiện_tại
  • Element_to_be_clickable
  • Element_to_be_sselected
  • Frame_to_be_available_and_switch_to_it
  • New_window_is_opened
  • Số_của_cửa_sổ_to_be
  • Presence_of_element_location
  • Text_to_be_present_in_element
  • Title_contains
  • Title_is
  • Url_changes
  • Url_contains
  • Url_matches

Xem video này để tìm hiểu những gì đang chờ trong Selenium và cách xử lý chúng bằng các phương pháp khác nhau như tạm dừng được mã hóa cứng và bằng cách kết hợp các chờ rõ ràng với các mẫu thiết kế khác nhau

Chờ đợi ngầm định trong Selenium Python

Thời gian chờ ngầm định được triển khai bằng cách sử dụng hàm implicitly_wait(time_to_wait). Điều này đặt thời gian chờ cố định cho mỗi phiên (tôi. e. thời gian chờ thực hiện lệnh hoặc tìm phần tử trong phiên). Có rất nhiều sự khác biệt giữa chờ đợi ngầm định và chờ đợi rõ ràng trong Selenium

Tại đây, WebDriver thăm dò DOM để tìm một WebElement trong một khoảng thời gian xác định trước khi đưa ra một ngoại lệ. Giá trị đối số time_to_wait mặc định được đặt thành “0”. Có, điều đó có nghĩa là nó bị tắt theo mặc định

Thí dụ-

tài xế. ngầm_chờ(10)

Đọc – Chờ ngầm định và Chờ đợi rõ ràng trong Selenium PHP

Chờ đợi trôi chảy trong Selenium Python

Chờ thông thạo tương tự như Chờ rõ ràng nhưng chúng vẫn được phân loại thành các loại chờ khác nhau trong tài liệu chính thức của Selenium. Tại sao các tài liệu liệt kê chúng là hai loại khác nhau? . e, sử dụng ít chuyên biệt hơn, ít kiểm soát hơn đối với các chức năng bên trong của lớp WebDriverWait)

Trong các tài liệu, họ đã minh họa bằng cách sử dụng 2 đối số này trong phần Chờ thông thạo để có thêm quyền kiểm soát đối với những ngoại lệ nào sẽ bị bỏ qua và tần suất trình điều khiển nên thăm dò DOM. Nói một cách rõ ràng, sự chờ đợi trôi chảy là cách sử dụng rõ ràng hơn của sự chờ đợi rõ ràng

Thí dụ-

WebDriverWait(trình điều khiển, 7, poll_frequency=5). cho đến khi (EC. alert_is_present(), 'Đã hết thời gian chờ cảnh báo đơn giản xuất hiện')

Đọc – Chờ rõ ràng và Chờ thông thạo trong Selenium C# [Hướng dẫn]

trình diễn. Selenium Đợi trang tải

Bây giờ hãy xem xét một ví dụ đơn giản để chứng minh việc sử dụng Selenium chờ đợi để đảm bảo tải trang. Tập lệnh HTML bên dưới sẽ được sử dụng để trình diễn

        

Nhấp vào nút để tạo phần tử BUTTON bằng văn bản

        

Phần tử nút được tạo sau 3 giây

Thử nó

var btn = tài liệu. createElement("NÚT");

btn. InternalHTML = "BẤM VÀO TÔI";

tài liệu. cơ thể người. appendChild(btn);

setTimeout(function () { alert("Tôi được tạo sau 2 giây nút waitCreate. "); }, 2000);

Khi được thực thi, trang sẽ hiển thị dưới dạng

Selenium đợi cho đến khi phần tử hiển thị python

Bây giờ khi bạn sẽ cố gắng nhấp vào nút Hãy thử

  • Nút “BẤM VÀO TÔI” được tạo sau 3 giây nhấp vào nút có sẵn
  • Selenium đợi cho đến khi phần tử hiển thị python

  • Cảnh báo hiển thị sau 2 giây khi nút được tải
  • Selenium đợi cho đến khi phần tử hiển thị python

Điều này chỉ có thể thực hiện được với sự trợ giúp của Selenium wait. Điều này khiến nút BẤM VÀO TÔI tải, chỉ sau 3 giây kể từ khi nhấp vào nút Dùng thử và hộp cảnh báo xuất hiện sau 2 giây tương ứng

Trong phần sắp tới, chúng tôi sẽ trình bày cách đợi khi tương tác với các WebElements này (i. e. nút và hộp cảnh báo bằng cách sử dụng Python Selenium Chờ). Và chúng tôi cũng sẽ hiển thị thời gian thực hiện bởi các phương pháp tương ứng để thăm dò DOM và thực thi các lệnh

Selenium đợi cho đến khi phần tử hiển thị python

Cách triển khai Chờ rõ ràng và Chờ thông thạo trong Selenium bằng Python

Xem xét triển khai sau sử dụng trang web trên để nhận ra Selenium đợi trang tải

đầu ra

Đây là kết quả thực thi khi tập lệnh tự động hóa thử nghiệm Selenium được chạy trên Selenium Grid dựa trên đám mây của LambdaTest

Selenium đợi cho đến khi phần tử hiển thị python

Quan sát thời gian thực hiện để tìm các yếu tố. Nút “BẤM VÀO TÔI” được thăm dò bằng cách sử dụng poll_frequency mặc định của WebDriverWait là 500 mili giây. Mặc dù chúng tôi đã đưa ra đối số thời gian chờ là 10 giây, nhưng sự hiện diện của nút BẤM VÀO TÔI đã được xác định trong đúng ba giây (i. e. thời gian sau đó nó được tạo khi chúng tôi nhấp vào nút “Dùng thử”)

Nhưng sự hiện diện của cảnh báo được thăm dò bằng cách sử dụng poll_frequency trong 5 giây. Vì vậy, mặc dù thực tế là cảnh báo chỉ xuất hiện sau hai giây tạo nút BẤM VÀO TÔI, nhưng Fluent WebDriver phải mất 5 giây để xác định sự hiện diện của nó. Điều này chắc chắn làm rõ việc sử dụng poll_frequency

Xem nhanh video thực thi trên nền tảng LambdaTest sẽ đưa ra dấu hiệu cho thấy quá trình chờ đang hoạt động như mong đợi

Selenium đợi cho đến khi phần tử hiển thị python

Đọc – Cách đo thời gian tải trang bằng Selenium

Selenium đợi cho đến khi phần tử hiển thị python

CHẠY KẾ HOẠCH PYTHON CỦA BẠN TRÊN LƯỚI SELENIUM

Hơn 3000 trình duyệt VÀ hệ điều hành

ĐĂNG KÝ MIỄN PHÍ

Cách triển khai Chờ ngầm định trong Selenium bằng Python

Xem xét cách triển khai bên dưới sử dụng Selenium ẩn chờ tải trang. Để cho ngắn gọn, chúng tôi chỉ minh họa việc chờ nút BẤM VÀO TÔI bằng cách sử dụng chức năng chờ ngầm định trong Selenium Python

đầu ra

Quan sát cách khối thử đầu tiên thành công và không đưa ra bất kỳ sự chờ đợi rõ ràng nào WebDriver chờ nút BẤM VÀO TÔI được tạo

Selenium đợi cho đến khi phần tử hiển thị python

Selenium đợi cho đến khi phần tử hiển thị python

Các loại chờ Selenium khác trong Python

Có thêm ba loại chờ đợi trong Selenium Python

  1. Thời gian chờ để thực thi tập lệnh JS không đồng bộ – set_script_timeout(time_to_wait) được sử dụng để chỉ định thời gian chờ tối đa (tính bằng giây) để exec_async_script() hoàn thành việc thực thi tập lệnh JS không đồng bộ trước khi đưa ra lỗi

    cú pháp. driver.set_script_timeout(30)

  2. Thời gian chờ cho thời gian tải trang – set_page_load_timeout(self, time_to_wait) được sử dụng để chỉ định thời gian chờ tối đa (tính bằng giây) để một trang tải hoàn toàn trong trình duyệt được Selenium WebDriver kiểm soát. Điều này rất hữu ích khi bạn đang thực hiện kiểm thử tự động hóa Selenium trong điều kiện mạng điều chỉnh

    cú pháp. set_page_load_timeout(30)

  3. Sleep(time_to_sleep) – Đây là hàm Python tích hợp để tạm dừng chương trình trong một số giây được chỉ định. Tuy nhiên, việc sử dụng chế độ ngủ không được coi là một trong những phương pháp hay nhất để thử nghiệm tự động hóa Selenium

    cú pháp. Sleep(3000)

polling2 Thư viện cho Selenium Chờ trong Python

Bạn cũng có thể sử dụng thư viện polling2 của Python để đợi các phần tử trong Selenium WebDriver. Bạn sẽ phải cài đặt riêng thư viện polling2, sử dụng lệnh bên dưới

pip install polling2

Ví dụ sử dụng thư viện polling2 trong Python

từ Selenium nhập webdriver

trình điều khiển = webdriver. Trình duyệt Chrome()

tài xế. lấy ('http. //www. lambdatest. com')

email_box = bỏ phiếu2. thăm dò ý kiến ​​(lambda. tài xế. find_element_by_id('useremail'), bước=0. 5, hết giờ = 7)

Hộp thư điện tử. send_keys('email@email. com')

Phần kết luận

Selenium đợi cho đến khi phần tử hiển thị python

Nguồn

Trong blog này, chúng tôi đã khám phá các thời gian chờ khác nhau khi triển khai Selenium chờ trang tải trong Python. Sự chờ đợi của Selenium sẽ hữu ích khi các thử nghiệm phải được chạy trên WebElements được tải động. Chờ trôi chảy trong Selenium Python cho phép bạn kiểm soát tần suất bỏ phiếu theo mặc định được đặt thành 250 ms trong Chờ rõ ràng. Hãy cho chúng tôi biết bạn đang sử dụng Selenium như thế nào, chờ tải trang bằng Python để xử lý tính năng động của WebElements

Làm cách nào để sử dụng đợi cho đến khi trong Selenium Python?

Selenium Webdriver cung cấp hai kiểu chờ đợi - ngầm định & rõ ràng. Chờ rõ ràng khiến WebDriver đợi một điều kiện nhất định xảy ra trước khi tiếp tục thực thi . Một sự chờ đợi ngầm khiến WebDriver thăm dò DOM trong một khoảng thời gian nhất định khi cố gắng định vị một phần tử.

Làm cách nào để đợi phần tử xuất hiện trong Selenium?

Chờ hoàn toàn chỉ đạo Selenium WebDriver chờ một khoảng thời gian nhất định trước khi đưa ra một ngoại lệ. Khi thời gian này được đặt, WebDriver sẽ đợi phần tử trước khi ngoại lệ xảy ra. Khi lệnh được đặt đúng chỗ, Chờ đợi tiềm ẩn sẽ giữ nguyên vị trí trong toàn bộ thời gian mà trình duyệt đang mở.

Làm cách nào để đợi cho đến khi một phần tử không có trong Selenium Python?

Để kiểm tra xem một phần tử có còn tồn tại trên trang hay không, chúng ta có thể nhờ sự trợ giúp của điều kiện dự kiến ​​invisibilityOfElementLocation . Để triển khai các điều kiện chờ rõ ràng, chúng tôi phải nhờ sự trợ giúp của lớp WebDriverWait vàexpectedCondition.