Selenium nodejs chờ phần tử

Người dùng nhấp vào một URL và do kết nối internet chậm/tối ưu hóa trang web không phù hợp/nội dung trang web nặng/bất kỳ lý do nào khác, trang web mất một lúc để tải. Rõ ràng, người dùng sẽ đợi trang tải trước khi nhấp vào nút, liên kết hoặc hình ảnh để tiếp tục hành trình duyệt web của họ

Trong thử nghiệm tự động hóa, tất cả các tình huống người dùng có thể (hoặc ít nhất là nhiều hơn) phải được tự động hóa để QA có thể theo dõi cách trang web hoạt động trong thế giới thực. Kịch bản chi tiết ở trên cũng phải được tự động hóa vì lý do tương tự

Cho rằng Selenium là khung kiểm tra tự động phổ biến nhất được sử dụng toàn cầu, bài viết này sẽ khám phá cách QA có thể sử dụng Selenium để chờ tải trang trong quá trình kiểm tra tự động

Trước khi tiếp tục với cách để Selenium đợi trang tải, hãy lưu ý rằng

  • Nói chung, thời gian chờ tải trang được kích hoạt cho đến khi DOM tải trước khi cho phép WebDriver tiếp tục. Ví dụ: nếu thử nghiệm tự động nhấp vào nút Thêm vào giỏ hàng của trang web, WebDriver sẽ chỉ thực thi dòng tiếp theo trong tập lệnh khi trang tải hoàn tất. Trong những trường hợp như vậy, không cần phải hướng dẫn WebDriver chờ tải trang riêng
  • Thường cần phải giới thiệu thời gian chờ trong tập lệnh Selenium khi điều hướng các phần tử động hoặc dựa trên Ajax có thể tiếp tục tải sau khi tải trang
  • Một số yếu tố chỉ có thể hiển thị sau khi tải trang hoặc sau khi người dùng thực hiện hành động nhưng sẽ có sẵn để tương tác sau vài giây trôi qua. Hãy nghĩ về một menu thả xuống với các giá trị động. Nó luôn có sẵn trên DOM, nhưng các giá trị của nó được điền dựa trên hành động của người dùng

Trong trường hợp này, khi một giá trị được chọn, WebDriver phải đợi giá trị đó hiển thị một phần tử trước khi phần tử đó có sẵn để tương tác

Vậy làm cách nào để người kiểm tra sử dụng Selenium để đợi trang web tải?

Câu trả lời. đợi lệnh

Cách triển khai Selenium chờ tải trang

Các lệnh Selenium Wait hướng dẫn kiểm tra tạm dừng trong một khoảng thời gian định trước trước khi chuyển sang bước tiếp theo trong tập lệnh. Việc tạm dừng cho phép tải trang và các phần tử web trở nên hiển thị/hiện tại/được điền/có thể nhấp trước khi WebDriver có thể tương tác với chúng và tiến hành thử nghiệm

Các lệnh đợi có lợi vì Selenium sẽ đưa ra một Element Not Visible Exception nếu nó không thể xác định vị trí phần tử cần thiết để chạy thử nghiệm. Với các lệnh chờ, kiểm tra sẽ đợi phần tử khả dụng, do đó ngăn không cho ngoại lệ hiển thị


Đọc thêm. Xử lý ngoại lệ trong Selenium WebDriver


Có ba cách để triển khai Selenium chờ tải trang

  • Sử dụng chờ ngầm
  • Sử dụng chờ đợi rõ ràng
  • Sử dụng Fluent Wait

Sử dụng chờ ngầm

Chờ ngầm báo cho WebDriver đợi một khoảng thời gian cụ thể (giả sử là 30 giây) trước khi tiếp tục bước tiếp theo. Nếu người kiểm tra biết trang và phần tử sẽ mất bao nhiêu thời gian để tải, thì họ nên sử dụng Implicit Wait

Giả sử một trang web đang được thử nghiệm mất mười giây để tải một trang cho đến khi một phần tử cụ thể xuất hiện. Trong trường hợp đó, hãy đặt chờ ngầm định trong 10 giây. Quá trình kiểm tra sẽ tạm dừng và khi thời gian trôi qua, Webdriver sẽ tiếp tục chạy tập lệnh theo kế hoạch

WebDriver driver => new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://url_that_delays_loading");
WebElement myDynamicElement = driver.findElement(By.id("myDynamicElement"));

Nguồn

Lưu ý rằng chức năng Chờ ngầm định sẽ được áp dụng miễn là trình duyệt hiện tại đang mở. Điều đó có nghĩa là tất cả các phần tử được tìm kiếm bởi tập lệnh Selenium sẽ mất thời gian được trình bày trong Chờ đợi ngầm định

Sử dụng chờ đợi rõ ràng

Explicit Wait tiên tiến hơn trong chức năng của nó. Nó hướng dẫn WebDriver tạm dừng kiểm tra cho đến khi hoàn thành một điều kiện xác định trước

Giả sử trang web đang thử nghiệm có tính năng hiển thị cửa sổ bật lên. Người dùng phải nhập một số dữ liệu, sau đó một cửa sổ bật lên xuất hiện. Tính năng này cần được kiểm tra theo trình tự chính xác này, bao gồm thời gian người dùng nhập dữ liệu, thời gian phản hồi của máy chủ, v.v.

Trong trường hợp này, Explicit Wait sẽ đợi cửa sổ bật lên xuất hiện trước khi tiến hành kiểm tra. Tuy nhiên, vì quá trình kiểm tra không thể đợi trong một khoảng thời gian vô hạn, nên những người kiểm tra cũng chèn một khoảng thời gian để WebDriver tạm dừng trước khi tiếp tục

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 EC

driver = webdriver.Firefox()
driver.get("http://www.example.com") #This is a dummy website URL
try:
elem = WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.ID, "Element_to_be_found")) #This is a dummy element
)
finally:
driver.quit()

Nguồn

Mã sẽ hướng dẫn WebDriver đợi trong 30 giây. Nếu điều kiện được chỉ định được đáp ứng trước đó, bài kiểm tra sẽ tiếp tục, Nếu không, nó sẽ đợi toàn bộ 30 giây trước khi tiếp tục

Để khai báo một sự chờ đợi rõ ràng, người ta phải sử dụng “ExpectedConditions”. Các Điều kiện Dự kiến ​​sau đây có thể được sử dụng trong Chờ đợi Rõ ràng

  • alertIsPresent()
  • phần tửSelectionStateToBe()
  • phần tửToBeClickable()
  • phần tửToBeSelected()
  • frameToBeAvaliableAndSwitchToIt()
  • invisibilityOfTheElementLocate()
  • invisibilityOfElementWithText()
  • hiện diệnOfAllElementsLocateBy()
  • hiện diệnOfElementLocate()
  • textToBePresentInElement()
  • textToBePresentInElementLocate()
  • textToBePresentInElementValue()
  • titleIst()
  • titleContains()
  • khả năng hiển thị của ()
  • visibilityOfAllElements()
  • khả năng hiển thịOfAllElementsLocateBy()
  • khả năng hiển thịOfElementLocation()

Sử dụng Fluent Wait

Chờ đợi thông thạo là một cải tiến trên Chờ đợi rõ ràng. Sử dụng nó, người kiểm tra có thể xác định một điều kiện cụ thể và tần suất mà WebDriver sẽ kiểm tra điều kiện xuất hiện trong một khoảng thời gian cụ thể

Giả sử trang web đang thử nghiệm bao gồm một số yếu tố tải động. Người thử nghiệm biết rằng phải mất tổng cộng 5 giây để tải, không nhiều hơn. Nhưng nó có thể hiển thị bất cứ lúc nào trong khoảng từ 0 đến 5 giây

Trong trường hợp này, Fluent Wait sẽ giải cứu. Người kiểm tra có thể sử dụng nó để hướng dẫn Selenium WebDriver tiếp tục kiểm tra phần tử theo định kỳ

//Declare and initialise a fluent wait
FluentWait wait = new FluentWait(driver);
//Specify the timout of the wait
wait.withTimeout(5000, TimeUnit.MILLISECONDS);
//Specify polling time
wait.pollingEvery(250, TimeUnit.MILLISECONDS);
//Specify what exceptions to ignore
wait.ignoring(NoSuchElementException.class)

//This is how we specify the condition to wait on.
wait.until(ExpectedConditions.alertIsPresent());

Nguồn

Fluent Wait hoạt động với hai tham số chính. giá trị thời gian chờ và tần suất bỏ phiếu. Mã xác định giá trị thời gian chờ là 5 giây và tần suất bỏ phiếu là 0. 25 giây. Điều đó có nghĩa là WebDriver sẽ đợi không quá 5 giây để xác minh điều kiện đã chỉ định. Nếu điều kiện xảy ra (phần tử được điền) trong 5 giây, nó sẽ chuyển sang bước tiếp theo trong tập lệnh kiểm tra. Nếu không, nó sẽ trả về “ElementNotVisibleException”

Để kết luận,

Sử dụng Selenium Đợi trang tải là khá cần thiết để kiểm tra Selenium tự động vì đây là điều thường xảy ra trong hành trình duyệt web của người dùng internet hàng ngày. Các lệnh Selenium Wait đặc biệt hiệu quả trong việc này và việc triển khai chúng khá đơn giản, như các ví dụ trên đã chứng minh

Selenium Waits giúp phát hiện và gỡ lỗi các sự cố có thể xảy ra do sự thay đổi về độ trễ thời gian. Tuy nhiên, để kết quả của các lệnh này luôn chính xác 100%, chúng phải được chạy trên các trình duyệt và thiết bị thực

Bất kể phần mềm là gì, các bài kiểm tra Selenium WebDriver phải được thực hiện trên các thiết bị và trình duyệt thực. Hãy nhớ rằng sự phân mảnh thiết bị là mối quan tâm chính đối với mọi nhà phát triển và người thử nghiệm. Mọi trang web phải hoạt động trơn tru trên nhiều kết hợp thiết bị-trình duyệt-HĐH. Với hơn 9000 thiết bị riêng biệt được sử dụng để truy cập internet trên toàn cầu, tất cả phần mềm phải được tối ưu hóa cho các cấu hình, chế độ xem và độ phân giải màn hình khác nhau

Ở trạng thái này, không trình giả lập hoặc trình mô phỏng nào có thể sao chép các điều kiện người dùng thực. Phần mềm cần được thử nghiệm trên thiết bị thực để chúng có thể hoạt động trong các trường hợp thực tế như pin yếu, cuộc gọi đến, cường độ mạng yếu, v.v. Nếu không thể truy cập phòng thí nghiệm nội bộ, hãy chọn tùy chọn thử nghiệm dựa trên đám mây cung cấp các thiết bị thực

Lưới Selenium trên đám mây của BrowserStack cung cấp hơn 2000 thiết bị và trình duyệt thực để thử nghiệm tự động. Điều đó có nghĩa là người dùng có thể chạy thử nghiệm trên nhiều thiết bị và trình duyệt thực bằng cách đăng ký, đăng nhập và chọn các kết hợp cần thiết. Người kiểm tra cũng có thể tiến hành kiểm tra Cypress trên hơn 30 phiên bản trình duyệt thực trên Windows và macOS. Phát hiện lỗi trước khi người dùng thực hiện bằng cách kiểm tra phần mềm trong điều kiện người dùng thực với BrowserStack

Chạy thử nghiệm Selenium trên các trình duyệt thực miễn phí

Selenium Trình quản trị web Selenium

Bài đăng này có hữu ích không?

Vâng, cảm ơn Không thực sự

Chúng tôi rất tiếc khi biết điều đó. Hãy chia sẻ phản hồi của bạn để chúng tôi có thể làm tốt hơn

Cảm ơn rất nhiều phản hồi của bạn

  • Selenium nodejs chờ phần tử
  • Selenium nodejs chờ phần tử
  • Selenium nodejs chờ phần tử
  • Selenium nodejs chờ phần tử

Thẻ

Selenium Trình quản trị web Selenium

Những bài viết liên quan

Selenium nodejs chờ phần tử

7 thực hành để tự động hóa trình duyệt web Selenium hiệu quả

Tìm hiểu 7 thực hành sẽ giúp tự động hóa trình duyệt web Selenium hiệu quả. Tự động xác minh

Tìm hiểu thêm

Selenium nodejs chờ phần tử

Bộ định vị trong Selenium. Hướng dẫn chi tiết

Tìm hiểu về các Trình định vị khác nhau trong Selenium - ID, XPath, Tên, DOM, Liên kết, Thẻ và hơn thế nữa cho phép

Tìm hiểu thêm

Selenium nodejs chờ phần tử

Thử nghiệm chức năng. Hướng dẫn chi tiết

Kiểm tra chức năng được thực hiện để đảm bảo rằng tất cả các phần của hệ thống/ứng dụng/trang web đang hoạt động bình thường.

Làm cách nào để đợi cho đến khi phần tử hiển thị trong Selenium javascript?

Selen. Đợi cho đến khi phần tử hiển thị . var wait = new WebDriverWait(driver, TimeSpan. FromSeconds(20)); Như bạn có thể thấy, chúng tôi cung cấp cho đối tượng WebDriverWait hai tham số. chính trình điều khiển và một đối tượng TimeSpan đại diện cho thời gian chờ để cố định vị phần tử.

Làm cách nào để thêm chờ trong Selenium javascript?

chờ = Selenium. Trình điều khiển web. Chờ đợi. mới(. hết thời gian chờ => 10) đợi. cho đến khi { người lái xe. find_element(. id, 'tin nhắn') .

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

Để 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.

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>()