Chờ thông thạo trong python selen là gì?

Selenium là một trong những công cụ đáng tin cậy nhất để thử nghiệm ứng dụng web và chiếm nhiều thị phần nhất trong số các đối tác của nó. Các nhà phát triển của nó luôn quan tâm đến phản hồi của người thử nghiệm [nhờ là nguồn mở] và triển khai các tính năng mới với mỗi bản cập nhật. Một tính năng như vậy xuất hiện dưới dạng Selenium Waits hay còn được gọi là lệnh Selenium Wait. Như tên của nó đã cung cấp một dấu ấn tinh tế, các lệnh Selenium Wait cho phép quá trình thực thi tự động hóa chờ một thời gian trước khi tiếp tục thực thi bình thường. Theo ý kiến ​​của tôi, điều đó làm cho quá trình thực hiện của chúng tôi trông hơi "con người" hoặc tương tự như những gì người dùng cuối sẽ gặp phải trong quá trình duyệt internet của họ

Chương về Selenium Wait trình bày chi tiết các lệnh khác nhau triển khai các kiểu chờ đợi khác nhau. e. làm thế nào chúng ta có thể đạt được việc tạm dừng quá trình cho đến thời điểm được chỉ định. Ví dụ, nếu tôi muốn đợi mọi lúc trên mọi phần tử thì sao? . Do đó, để cung cấp cho bạn một ý tưởng ngắn gọn về nội dung, bài đăng sẽ di chuyển theo thứ tự sau

  • Chờ đợi trong Selenium là gì?
  • Các loại Selenium chờ đợi
    • Chờ đợi ngầm định trong Selenium
      • ngầmChờ[]
      • pageLoadTimeout[]
      • setScriptTimeout[]
    • Chờ đợi rõ ràng trong Selenium
      • WebDriverĐợi
      • Lưu loátChờ đợi

Chờ đợi trong Selenium là gì?

Nói một cách đơn giản, Selenium Wait chỉ là một tập hợp các lệnh chờ trong một khoảng thời gian xác định trước khi thực thi các tập lệnh kiểm tra trên các phần tử. Thời điểm chờ đợi và thời gian chờ đợi bao lâu tùy thuộc vào kịch bản được viết và loại chờ đợi được sử dụng. Bạn có thể đang đợi một phần tử tải hoặc hiển thị hoặc bạn có thể muốn đợi cho đến khi tải toàn bộ trang. Do đó, Selenium Wait là một phương pháp được ưa thích khi các tình huống như vậy gặp phải hoặc được mong đợi trên một trang web [điều này khá thường xuyên do sử dụng thuộc tính không đồng bộ]. Nó giúp ngăn chặn ngoại lệ NoSuchElementFound

Về mặt kỹ thuật, các lệnh Selenium Wait ngăn chặn các điều kiện cạnh tranh giữa các thành phần của trang web. Vấn đề cốt lõi sinh ra Selenium Wait là Selenium chỉ đợi tài liệu. readyState của trang trở thành "hoàn thành". Trong quá trình này, do sử dụng nhiều JS, rất nhiều yếu tố cộng lại ngay cả sau khi trạng thái thay đổi thành "hoàn thành". Điều này có thể thực thi tập lệnh trên các phần tử chưa có trên trang web

Các loại Selenium chờ đợi

Lệnh đợi Selenium có hai phần

  • chờ đợi ngầm định
  • chờ đợi rõ ràng

Cả hai phần này đều có mức độ liên quan và trường hợp sử dụng riêng, theo đó chúng được người thử nghiệm ưa thích hơn trong thử nghiệm tự động hóa. Trong các phần tiếp theo, chúng ta sẽ thảo luận về hai phần này với các lệnh khác nhau mà chúng nắm giữ dưới quyền của mình.

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

Chờ ngầm định là lệnh chờ không có điều kiện trong Selenium. Vì nó không có điều kiện nên nó được áp dụng cho tất cả các phần tử web trên trang web

Điều này có nghĩa là chúng ta có thể nói với Selenium rằng chúng ta muốn nó đợi một khoảng thời gian nhất định trước khi đưa ra một ngoại lệ rằng nó không thể tìm thấy phần tử trên trang hoặc trang không được tải hoặc quá trình thực thi javascript chưa kết thúc. Ngoài ra, điều quan trọng cần lưu ý là sau khi được đặt, Chờ ngầm định sẽ giữ nguyên vị trí trong toàn bộ thời gian trình duyệt mở

Chúng ta có thể áp dụng chờ ngầm thông qua ba chức năng

  • ngầmChờ[]
  • pageLoadTimeout[]
  • setScriptTimeout[]

Mặc dù chúng là ba chức năng có thể gọi riêng biệt, nhưng tất cả chúng đều là một phần của thời gian chờ trong Selenium

lệnh ngầm hiểu trong thời gian chờ Selenium

Trong thời gian chờ đợi ngầm định, WebDriver sẽ thăm dò DOM trong một số đơn vị thời gian nhất định trong khi cố gắng tìm bất kỳ phần tử nào. Nếu phần tử được tìm thấy sớm hơn, thì quá trình kiểm tra sẽ thực hiện tại thời điểm đó, nếu không thì WebDriver sẽ đợi trong khoảng thời gian đã chỉ định

Thời gian bỏ phiếu [hoặc khoảng thời gian bỏ phiếu] là khoảng thời gian mà Selenium bắt đầu tìm kiếm lại sau lần thử thất bại cuối cùng. Nó phụ thuộc vào loại trình điều khiển trình duyệt bạn đang làm việc. Một số có thể có 500 mili giây trong khi một số có thể có 1 giây làm thời gian bỏ phiếu. Thời gian bỏ phiếu được tích hợp sẵn trong implicitlyWait và không có cách nào để sửa đổi khoảng thời gian. Nhưng trong Fluent đợi, bạn có thể chỉ định và ghi đè khoảng thời gian bỏ phiếu

Để thêm chờ đợi ngầm định trong tập lệnh thử nghiệm, hãy nhập gói sau

import java.util.concurrent.TimeUnit;

cú pháp

driver.manage[].timeouts[].implicitlyWait[10, TimeUnit.SECONDS];

Lệnh implicitlyWait đợi một phần tử tải trong một khoảng thời gian xác định

WebDriver driver = new FirefoxDriver[];
driver.manage[].timeouts[].implicitlyWait[Duration.ofSeconds[10]];
driver.get["//somedomain/url_that_delays_loading"];
WebElement myDynamicElement = driver.findElement[By.id["myDynamicElement"]]

Ở đây, người kiểm tra đã chỉ định đợi trong 10 giây [thông qua Thời lượng. ofSeconds[10]] trước khi tiếp tục tương tác với phần tử. Tuy nhiên, người kiểm tra cũng có thể áp dụng các đơn vị thời gian khác, chẳng hạn như được hiển thị bằng tùy chọn tự động điền này trong IntelliJ

Giá trị mặc định của chờ ngầm định là 0

Vui lòng làm theo phần còn lại của mã với loạt bài dành cho người mới bắt đầu sử dụng Selenium của chúng tôi để giải thích chi tiết các chức năng

lệnh pageLoadTimeout trong thời gian chờ Selenium

Như tên gợi ý, lệnh pageLoadTimeout đợi trang tải hoàn toàn trong một số giây được chỉ định. Giá trị mặc định là 0 và giá trị âm có nghĩa là thời gian chờ vô hạn

WebDriver driver = new FirefoxDriver[];
driver.manage[].timeouts[].pageLoadTimeout[30, TimeUnit.SECONDS];
driver.get["//www.google.com/"];

Tại đây, người thử nghiệm đã chỉ định đợi trong 30 giây trước khi tiếp tục tương tác với phần tử. Do đó, WebDriver sẽ đợi tối đa là 30 giây. pageLoadTimeout là một tùy chọn tốt khi bạn đang muốn kiểm tra hiệu suất tải trang có nằm trong giới hạn không. Ví dụ: chúng ta có thể sử dụng điều tiết mạng và làm chậm băng thông để kiểm tra thời gian tải trang tại đây. Sử dụng mã trên trong cùng một kịch bản, chúng tôi có thể biết liệu trang của chúng tôi có thể tải trên mạng 3G hay mạng 2G, v.v.

lệnh setScriptTimeout trong thời gian chờ Selenium

Lệnh setScriptTimeout đợi các phần không đồng bộ của trang web tải xong trong một số giây đã chỉ định

driver.manage[].timeouts[].setScriptTimeout[15, TimeUnit.SECONDS];
[[JavascriptExecutor] driver].executeScript["alert['hello world'];"];
[[JavascriptExecutor] driver].executeAsyncScript["window.setTimeout[arguments[arguments.length - 1], 500];"];

Tại đây, người thử nghiệm đã chỉ định đợi trong 15 giây trước khi tiếp tục tương tác với phần tử

Loại lệnh chờ ngầm được sử dụng tùy thuộc vào người kiểm tra và quyết định bị ảnh hưởng bởi tập lệnh kiểm tra và đặc tính của phần tử đích. Với phần giới thiệu về sự chờ đợi ngầm định trong Selenium, điều quan trọng cần lưu ý là nó có một số nhược điểm và một cảnh báo quan trọng

Không nên trộn lẫn chờ đợi ngầm với chờ đợi rõ ràng trong các tập lệnh thử nghiệm. Tập lệnh kiểm tra có cả thời gian chờ có thể tạo ra hành vi không thể đoán trước do thời lượng chờ không đúng

Ngoài cảnh báo trên, bạn chỉ nên sử dụng chờ ngầm khi bạn có toàn quyền kiểm soát tập lệnh và việc sử dụng kiểu chờ này là cực kỳ cần thiết. Vì thời gian chờ ngầm định được áp dụng trong suốt thời gian tồn tại của Webdriver nên nó có thể kéo dài thời gian thực hiện kiểm tra đến một giá trị lớn tùy thuộc vào số lượng phần tử mà nó được gọi. Như đã nói, nếu người thử nghiệm biết kịch bản của họ, thì có thể áp dụng chờ ngầm mà không phải lo lắng

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

Chờ rõ ràng là một chiến lược chờ có điều kiện trong Selenium, nói cách khác, bạn đợi cho đến khi điều kiện bạn chỉ định trở thành đúng hoặc khoảng thời gian đã trôi qua. Vì chức năng chờ rõ ràng hoạt động với một điều kiện, nên chúng giúp đồng bộ hóa trình duyệt, mô hình đối tượng tài liệu và tập lệnh thực thi thử nghiệm. Do đó, kết quả thực hiện tổng thể là thỏa đáng và có thời hạn. Chờ đợi rõ ràng cung cấp các điều kiện sau để sử dụ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[]

Các điều kiện trên thuộc hai loại lệnh chờ rõ ràng

  • WebDriverĐợi
  • Lưu loátChờ đợi

Hãy xem mức độ liên quan của mỗi người trong số họ trong quá trình thực thi thử nghiệm

Lệnh WebDriverWait trong Selenium

WebDriverWait chỉ định điều kiện và thời gian mà WebDriver cần đợi. Trên thực tế, WebDriverWait và chờ rõ ràng đồng nghĩa với nhau vì định nghĩa và cách sử dụng của chúng hoàn toàn khớp với nhau. Vì vậy, nếu ai đó yêu cầu bạn viết một số tập lệnh chờ rõ ràng, thì có thể an toàn khi cho rằng các tập lệnh được yêu cầu yêu cầu WebDriverWait

WebElement firstResult = new WebDriverWait[driver, Duration.ofSeconds[10]]
        .until[ExpectedConditions.elementToBeClickable[By.xpath["//a/h3"]]];

Tại đây, thời gian chờ được người kiểm tra chỉ định là 10 giây theo Thời lượng. ofSeconds[10] và điều kiện được sử dụng là elementToBeClickable. Do đó, đoạn mã trên tóm tắt là - "WebDriver sẽ đợi tối đa 10 giây để phần tử được xác định bởi XPath có thể nhấp được. Tất cả các lệnh này sẽ phục vụ như một chủ đề cốt lõi khi chúng ta nói về sự chờ đợi rõ ràng trong chương tiếp theo

Chờ thông thạo trong Selenium

Sự chờ đợi trôi chảy tương tự như sự chờ đợi rõ ràng trong Selenium với một đối số bổ sung về tần suất [còn được gọi là thời gian bỏ phiếu]. Số tần suất báo cho WebDriver tiếp tục kiểm tra phần tử theo định kỳ và đợi cho đến khi tối đa "Thời lượng. giây". Điều này giúp tiết kiệm thời gian thực hiện. Nếu phần tử có sẵn sớm hơn, chúng tôi có thể tiến hành thực hiện và hoàn thành nhanh chóng

Wait wait = new FluentWait[driver]
  .withTimeout[Duration.ofSeconds[30]]
  .pollingEvery[Duration.ofSeconds[5]]
  .ignoring[NoSuchElementException.class];

Trong đoạn mã trên, thời gian chờ tối đa cho phép được chỉ định là 30 giây [Duration. ofSeconds[30]] và thời gian bỏ phiếu là 5 giây [pollingEvery[Duration. ofSeconds[5]]]. Với sự sắp xếp này, WebDriver sẽ tiếp tục kiểm tra phần tử cứ sau 5 giây trong khoảng thời gian tối đa là 30 giây

Ở dòng cuối cùng của mã, hãy chú ý đến một chức năng khác "bỏ qua". Đây là cấu hình tùy chỉnh do người kiểm tra viết và không bắt buộc mỗi lần. Ý nghĩa của việc "bỏ qua" là bỏ qua một số ngoại lệ có thể cản trở quá trình thực hiện kiểm thử. Trong mã này, NoSuchElementException là ngoại lệ bị bỏ qua

FluentWait trong Selenium là một lớp quan trọng khi chúng ta xử lý các phần tử AJAX. Khi người dùng đang khám phá trang web trên mạng chậm hơn, các yếu tố này có thể mất nhiều thời gian hơn để tải so với thời gian họ thực hiện trong thử nghiệm trong phòng thí nghiệm. Để chơi an toàn, FluentWait giúp chúng tôi bắt chước các tình huống như vậy và tạo ra ứng dụng web chất lượng tốt nhất

Chìa khóa rút ra

Sau đây là những điểm chính từ bài đăng của chúng tôi trên Selenium Wait

  • Chờ Selenium là một khái niệm yêu cầu Selenium đợi trong một khoảng thời gian nhất định hoặc cho đến khi phần tử hiển thị/đã tải/được bật
  • Sự chờ đợi của Selenium chia thành sự chờ đợi ngầm định và rõ ràng
  • Thời gian chờ ngầm xác định thời gian chờ trong suốt thời gian tồn tại của WebDriver và được áp dụng cho từng phần tử i. e. thực hiện một lần. Tuy nhiên, chờ đợi rõ ràng phụ thuộc vào các điều kiện
  • Thời gian chờ rõ ràng phụ thuộc vào điều kiện đã chỉ định hoặc khoảng thời gian chờ tối đa được phép

câu hỏi thường gặp

Là chờ đợi rõ ràng tốt hơn chờ đợi ngầm định?

Bản chất cốt lõi của chờ đợi rõ ràng giúp tiết kiệm thời gian và không áp dụng cho tất cả các phần tử. Điều này mang lại ấn tượng rằng sự chờ đợi rõ ràng sẽ tốt hơn và được ưu tiên hơn để tạo thử nghiệm. Tuy nhiên, không có bằng chứng nào như vậy và mỗi kiểu chờ đợi đều có mức độ phù hợp riêng

Khi nào thì sử dụng chờ ẩn và khi nào sử dụng chờ rõ ràng?

Chờ ngầm định được áp dụng một lần cho tất cả các phần tử và chu kỳ chờ tiếp theo bắt đầu sau khi chu kỳ chờ trước đó hoàn thành. Nếu tình huống như vậy phù hợp với yêu cầu của bạn, các lệnh chờ ngầm định là tốt nhất trong những trường hợp như vậy. Ví dụ: nếu bạn chỉ muốn thực hiện một tác vụ sau khi tải toàn bộ trang, bạn có thể tiếp tục với pageLoadTimeout. Nhưng sự chờ đợi này dù sao cũng nên được áp dụng

Sự chờ đợi rõ ràng là có điều kiện trong tự nhiên. Nếu bạn chỉ muốn đợi một vài phần tử được chọn dựa trên các điều kiện, thì cách tốt nhất là chờ đợi rõ ràng. Tuy nhiên, chờ đợi ngầm được sử dụng mà không hiểu rõ về tập lệnh có thể dẫn đến thời gian hoàn thành tập lệnh dài không cần thiết

Bỏ phiếu trong chờ đợi ngầm định là gì?

Việc chờ đợi ngầm định được thực hiện cho đến khi phần tử được tìm thấy hoặc thời gian tối đa đã trôi qua. Nhưng đối với dự phòng, sự chờ đợi ngầm định trong Selenium đi kèm với một tính năng được gọi là thăm dò ý kiến. Với bỏ phiếu, chờ đợi ngầm định tiếp tục tìm kiếm phần tử theo các khoảng thời gian đều đặn cho đến khi tìm thấy phần tử hoặc thời gian tối đa đã trôi qua

Loại chờ Selenium nào tốt nhất?

Không có loại chờ Selenium "tốt nhất" khi thử nghiệm một ứng dụng web. Các trường hợp sử dụng khác nhau yêu cầu các loại điều kiện chờ khác nhau và do đó yêu cầu các lệnh thích hợp

bài tập

Bạn có thể tiếp tục với các bài tập sau trên Selenium Wait để làm cho kiến ​​thức cơ bản của bạn vững chắc hơn

  • Khởi chạy một trình duyệt mới [chẳng hạn như ChromeDriver]
  • Mở URL "https. // demoqa. com/thuộc tính động"
  • Phóng to cửa sổ
  • Tìm một phần tử có id "visibleAfter". Phần tử này mất 5 giây để tải, nghĩa là phần tử này sẽ xuất hiện sau 5 giây
  • Sử dụng implicitlyWait để đợi phần tử đó
package org.example;

import java.time.Duration;
import java.util.concurrent.TimeUnit;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class ImplicitWait {

    protected WebDriver driver;
    @Test
    public void implicitWaitExcercise[]
    {
        driver = new ChromeDriver[];
        driver.manage[].timeouts[].implicitlyWait[Duration.ofSeconds[10]];

        // launch Chrome and redirect it to the URL
       	driver.get["//demoqa.com/dynamic-properties"];

        //This element will appear after 5 secs
	driver.findElement[By.id["visibleAfter"]].click[];

        //close browser
        driver.close[];
    }
}

Bạn sẽ nhận thấy rằng mặc dù phần tử mất 5 giây để xuất hiện, tập lệnh Selenium vẫn sẽ vượt qua. Vì đợi ngầm nên nó tự động chờ phần tử xuất hiện

Sự khác biệt giữa chờ đợi WebDriver và chờ đợi trôi chảy là gì?

Sự khác biệt giữa WebDriverWait và FluentWait . Vì vậy, thay vì đợi rồi sử dụng findElement. WebDriverWait đợi = WebDriverWait mới [trình điều khiển, 18]; . cho đến khi [Điều kiện dự kiến. In FluentWait you have more options to configure, along with maximum wait time, like polling interval, exceptions to ignore etc. So, instead of waiting and then using findElement : WebDriverWait wait = new WebDriverWait[driver, 18]; wait. until[ExpectedConditions.

Sự khác biệt giữa chờ đợi tiềm ẩn và trôi chảy là gì?

Ví dụ: đặt thời gian chờ ngầm định là 10 giây và thời gian chờ rõ ràng là 15 giây, có thể khiến hết thời gian chờ sau 20 giây. thời gian chờ Thông thạo là khi chúng tôi có thể thiết lập chu kỳ thời gian lặp lại để xác minh điều kiện có được đáp ứng hay không .

Chủ Đề