Selenium đợi Python

Đợi một trang tải bằng Selenium Python. Trong bài viết này, bạn sẽ học cách làm điều đó. Đó là một chút phản trực giác

Selenium cho phép bạn tự động hóa trình duyệt nhưng không cần thời gian. ngủ để chờ tải trang hoàn tất. Trên thực tế, nó hoạt động khác với những gì bạn mong đợi

khóa học liên quan

  • Khóa học & ví dụ về tự động hóa web Selenium

ví dụ

Selenium chờ tải trang

Khối mã bên dưới chỉ cho bạn cách chờ tải trang hoàn tất. Nó sử dụng thời gian chờ. Nó đợi một phần tử hiển thị trên trang [bạn cần có id phần tử]

Sau đó, nếu trang được tải, nó sẽ hiển thị trang được tải. Nếu khoảng thời gian chờ [tính bằng giây] đã trôi qua, nó sẽ hiển thị lỗi hết thời gian chờ

Hướng dẫn này sẽ hướng dẫn bạn khái niệm về Selenium Webdriver waits [Implicit and Explicit Waits] và cách sử dụng chúng trong Python

Nếu bạn đang thực hiện tự động hóa trong Selenium Python và muốn viết các tập lệnh không có lỗi, thì bạn phải học cách sử dụng tính năng chờ. Chúng cho phép bạn xử lý mọi tình huống không mong muốn có thể xảy ra

Trong khi tự động hóa một ứng dụng web, bạn dự định viết một tập lệnh có thể thực thi các tác vụ sau

Nhấp vào đây để quay lại hướng dẫn chính về Selenium Python

  • Tải lên trình duyệt,
  • Mở trang web,
  • Xác định vị trí các phần tử và
  • Thực hiện hành động cần thiết

Tuy nhiên, tập lệnh kiểm tra đôi khi có thể bị lỗi do những lý do sau

  • Phần tử web không xuất hiện vì nó không thể tải do sự cố thời gian chạy
  • Việc sử dụng các kỹ thuật AJAX trong các ứng dụng web đã gây ra sự không chắc chắn theo nghĩa là việc tải trang web và các phần tử web có trong đó có thể xảy ra ở một khoảng thời gian khác
  • Nhiều lần, do lưu lượng truy cập cao nhất hoặc độ trễ mạng, ứng dụng của chúng tôi có thể hoạt động khác so với ở điều kiện bình thường, tối ưu

Trong những trường hợp này, chúng tôi cần đợi thời gian cho phép các phần tử web tải hoàn toàn trước khi sử dụng chúng trong các thử nghiệm của mình. Webdriver API cung cấp hai loại cơ chế chờ để xử lý các điều kiện như vậy. Chúng ta sẽ thảo luận chi tiết về các điều kiện chờ này

Trình điều khiển web Selenium chờ trong Python

Hai loại chờ Selenium Webdriver là

  • Chờ đợi tiềm ẩn
  • chờ đợi rõ ràng

Chờ đợi tiềm ẩn

Chờ đợi ngầm chỉ đạo WebDriver thăm dò DOM trong một khoảng thời gian nhất định [như đã đề cập trong lệnh] khi cố gắng xác định vị trí một phần tử không hiển thị ngay lập tức. Giá trị thời gian mặc định có thể được đặt bằng cách sử dụng Chờ ngầm định bằng không. Đơn vị tính bằng giây. Chờ đợi ngầm định vẫn được liên kết với phần tử web cho đến khi nó bị hủy

Thực hiện theo đoạn mã dưới đây minh họa việc sử dụng Chờ ẩn trong Python

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox[]
driver.implicitly_wait[100]

driver.get["//google.com"]
driver.maximize_window[]

print["Implicit Wait Example"]

inputElement = driver.find_element_by_id["lst-ib"]
inputElement.send_keys["Techbeamers"]
inputElement.submit[]

driver.close[]

Trong đoạn mã trên, phương thức implicitly_wait[] yêu cầu Webdriver thăm dò DOM nhiều lần trong một khoảng thời gian nhất định. Thời gian chờ trong ví dụ này là 100 giây sẽ kích hoạt nếu phần tử đích không khả dụng trong khoảng thời gian đó

Chúng tôi định nghĩa Chờ đợi ngầm định cho một đối tượng Webdriver để nó sẽ duy trì hoạt động cho đến khi đối tượng đó tồn tại

chờ đợi rõ ràng

Có thể xảy ra các tình huống khi thời gian chờ đợi không chắc chắn. Rõ ràng chờ đợi làm việc như một vị cứu tinh ở đó. Ở đây chúng ta có thể xác định một số điều kiện nhất định và Selenium WebDriver sẽ tiến hành thực hiện bước tiếp theo chỉ sau khi điều kiện này được đáp ứng

Chờ đợi rõ ràng là cách ưa thích nhất để triển khai Selenium webdriver chờ đợi trong tập lệnh thử nghiệm. Nó cung cấp sự linh hoạt để chờ một điều kiện tùy chỉnh xảy ra và sau đó chuyển sang bước tiếp theo

Sau đây là hai lớp Selenium Python cần thiết để triển khai các chờ đợi rõ ràng

  • WebDriverChờ và
  • lớp Điều kiện mong đợi của Python

Để hiểu cách sử dụng của nó, hãy lấy một ví dụ về cảnh báo JavaScript đơn giản trên trang web. Một nút hiện diện trên trang web để kích hoạt cảnh báo đó

Một trong những trường hợp sử dụng sẽ là nhấp vào nút và xác minh rằng nó kích hoạt cảnh báo khi không. Sử dụng thời gian chờ Rõ ràng với các điều kiện Dự kiến ​​WebDriver sẽ chỉ đợi thời gian cho đến khi JavaScript đơn giản không hiển thị trên màn hình. Ngay khi nó xuất hiện, WebDriver sẽ chuyển sang thực hiện bước tiếp theo

Tuy nhiên, nếu cảnh báo không xuất hiện cho đến khi thời gian chờ tối đa được xác định trong thời gian chờ rõ ràng, Webdriver sẽ đưa ra một “NoAlertPresentException. ”

Đây là mã HTML để tạo cảnh báo đơn giản bằng JavaScript


Simple Alert Demonstration

Press button underneath to generate an alert.

Generate Alert function alertFunction[] { alert["Hello! I'm a Simple Alert.\nPlease press the 'OK' button."]; }

Bạn cần lưu tệp này trên máy tính của mình và đặt tên là 'Simple_Alert. HTML. ’

Sau đây là đoạn mã thể hiện sự chờ đợi rõ ràng

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as cond
from selenium.common.exceptions import NoAlertPresentException
from selenium.common.exceptions import TimeoutException

driver = webdriver.Firefox[]
driver.maximize_window[]
#location = "file://"
location = "file://C:/Users/Automation-Dev/Desktop/Meenakshi/Selenium%20Python/Simple_Alert.HTML"
driver.get[location]

#Press the "Alert" button to demonstrate the Simple Alert
button = driver.find_element_by_name['alert']
button.click[]

try:
    # Wait as long as required, or maximum of 10 sec for alert to appear
    WebDriverWait[driver,10].until[cond.alert_is_present[]]

    #Change over the control to the Alert window
    obj = driver.switch_to.alert

    #Retrieve the message on the Alert window
    msg=obj.text
    print ["Alert shows following message: "+ msg ]
    
    #Use the accept[] method to accept the alert
    obj.accept[]

except [NoAlertPresentException, TimeoutException] as py_ex:
    print["Alert not present"]
    print [py_ex]
    print [py_ex.args]
finally:
    driver.quit[]

Trong đoạn script trên, giá trị thời gian chờ là 10 giây. Điều đó có nghĩa là Trình điều khiển web sẽ đợi trong 10 giây trước khi ném TimeoutException
Nếu phần tử có mặt, thì phần tử đó có thể quay lại trong vòng 0 – 10 giây. Theo mặc định, API WebDriverWait thực thi Điều kiện mong đợi cứ sau 500 mili giây cho đến khi nó trả về thành công

Nếu Điều kiện mong đợi khớp, thì giá trị trả về sẽ là Boolean [TRUE] trong khi giá trị khác null cho tất cả các loại Điều kiện mong đợi khác

Điều kiện dự kiến ​​​​tiêu chuẩn

không có. các điều kiện tiêu chuẩn mà bạn có thể thường gặp phải khi tự động hóa các trang web. Dưới đây là danh sách hiển thị tên của từng người trong số họ. Tất cả các lớp này đều có sẵn trong “Selenium. webdriver. ủng hộ. mong đợi_điều kiện” Mô-đun Python

  1. lớp alert_is_present
    Nó cho phép chờ một cảnh báo xuất hiện
  2. phần tử lớp_location_selection_state_to_be[ui_locator, is_selection]
    Nó cho phép chờ một phần tử xác định vị trí có trạng thái được chỉ định
  3. phần tử lớp_location_to_be_sSelected[ui_locator]
    Nó cho phép chờ một phần tử xác định vị trí ở trạng thái đã chọn
  4. phần tử lớp_selection_state_to_be[ui_element, được chọn]
    Nó cho phép đợi để tìm một phần tử có trạng thái xác định
  5. phần tử lớp_to_be_clickable[ui_locator]
    Nó cho phép chờ một phần tử xác định vị trí ở trạng thái có thể nhấp
  6. phần tử lớp_to_be_sSelected[ui_element]
    Nó cho phép chờ một phần tử tìm thấy ở trạng thái đã chọn
  7. lớp frame_to_be_available_and_switch_to_it[ui_locator]
    Nó cho phép đợi một khung có sẵn để chuyển đổi
  8. lớp tàng hình_of_element_location[ui_locator]
    Nó cho phép chờ một phần tử ẩn hoặc không có trong DOM
  9. lớp staleness_of[ui_element]
    Nó cho phép chờ một phần tử bị xóa khỏi DOM
  10. lớp text_to_be_present_in_element[ui_locator, inner_text]
    Nó cho phép chờ một phần tử tìm thấy với một văn bản nhất định
  11. lớp text_to_be_present_in_element_value[ui_locator, giá trị]
    Nó cho phép chờ một phần tử tìm thấy với một văn bản nhất định bên trong bộ định vị
  12. lớp title_contains[title_text]
    Nó cho phép chờ đợi để tìm tiêu đề chứa văn bản đã chỉ định ở định dạng phân biệt chữ hoa chữ thường
  13. tiêu đề lớp_is [tiêu đề]
    Nó cho phép chờ đợi để tìm một tiêu đề khớp với văn bản được chỉ định chính xác
  14. lớp visibility_of[ui_element]
    Nó cho phép chờ đợi để tìm một phần tử có thể nhìn thấy chức năng
  15. lớp visibility_of_all_elements_location[ui_locator]
    Nó cho phép chờ đợi để tìm tất cả các phần tử có thể nhìn thấy chức năng mà bộ định vị đã chỉ định sẽ trả về
  16. lớp visibility_of_any_elements_location[ui_locator]
    Nó cho phép chờ để tìm ít nhất một phần tử có thể nhìn thấy chức năng mà bộ định vị đã chỉ định sẽ trả về
  17. lớp visibility_of_element_location[ui_locator]
    Nó cho phép chờ đợi để tìm một phần tử cụ thể và có thể nhìn thấy chức năng mà bộ định vị đã chỉ định sẽ trả về

Trong liên kết Selenium Python, bạn có thể dễ dàng tìm thấy các phương thức để xử lý các. Nó giúp bạn không phải viết bất kỳ lớp điều kiện dự kiến ​​nào do người dùng định nghĩa hoặc tạo một gói cho cùng một lớp.

Tóm tắt nhanh – Trình quản trị web Selenium đang chờ trong Python

Hiểu biết về Selenium Webdriver đợi là chìa khóa để tạo ra các kịch bản thử nghiệm tự động hóa chất lượng cao. Chúng tôi hy vọng hướng dẫn này sẽ hướng dẫn bạn cách tiếp cận phù hợp

Để biết thêm thông tin cập nhật về hướng dẫn Selenium Python, hãy theo dõi các tài khoản mạng xã hội [Facebook/Twitter] của chúng tôi

Làm cách nào để đợi 10 giây trong Selenium Python?

Chúng ta có thể khiến Selenium đợi trong 10 giây. Điều này có thể được thực hiện bằng cách sử dụng Chủ đề. phương thức ngủ . Ở đây, thời gian chờ [10 giây] được truyền dưới dạng tham số cho phương thức.

Làm cách nào để đưa ra thời gian chờ trong Python Selenium?

Có một số phương thức tiện lợi được cung cấp giúp bạn viết mã sẽ chỉ đợi trong khoảng thời gian cần thiết. WebDriverWait kết hợp vớiexpectedCondition là một cách để đạt được điều này. Trong đoạn mã trên, Selenium sẽ đợi tối đa 10 giây để tìm thấy phần tử phù hợp với tiêu chí đã cho.

Làm thế nào để sử dụng chờ đợi trong Selenium?

Cú pháp. .
Wait fluentWait = new FluentWait[driver].
withTimeout[60, SECONDS] // điều này xác định tổng số lượng
thời gian để chờ đợi
pollingEvery[2, SECONDS] // điều này xác định tần suất bỏ phiếu
bỏ qua [NoSuchElementException. .
ngoại lệ để bỏ qua
WebElement foo =fluentWait. .
Phần tử web>[]

Chủ Đề