Javascriptexecutor đợi trong Selenium

Chúng ta có thể đợi một trang phức tạp có JavaScript tải bằng Selenium. Sau khi trang được tải, chúng ta có thể gọi tài liệu phương thức Javascript. readyState và đợi cho đến khi hoàn thành được trả về

cú pháp

JavascriptExecutor js = [JavascriptExecutor]driver;
js.executeScript["return document.readyState"].toString[].equals["complete"];

Tiếp theo, chúng tôi có thể xác minh xem trang đã sẵn sàng cho bất kỳ hành động nào hay chưa bằng cách sử dụng khái niệm chờ rõ ràng trong đồng bộ hóa. Chúng ta có thể đợi điều kiện dự kiến ​​là hiện diện của ElementLocate cho phần tử. Chúng tôi sẽ thực hiện toàn bộ xác minh trong khối thử bắt

Trong Selenium – Waits [các lệnh đợi/chờ] là một yếu tố đóng vai trò rất quan trọng khi thực hiện các trường hợp thử nghiệm. Waits giúp người dùng giải quyết sự cố khi chuyển hướng đến các trang web khác nhau bằng cách làm mới toàn bộ trang web và tải lại các phần tử web mới. Vì một số nguyên nhân liên quan đến việc xử lý các phần tử web, Ajax và Javascript ở phía ứng dụng web nên việc tải các phần tử không thể diễn ra cùng một lúc được. Vì vậy, việc sử dụng Waits sẽ tạo ra một khoảng thời gian thời gian trong khi tải và phản ánh các thành phần web, tránh xảy ra lỗi khi tải dữ liệu

Ở bài viết này chúng ta sẽ cùng nhau khám phá Implicit Wait và Explicit Wait là 2 ứng dụng Wait phổ biến. Đây là hai kiểu đợi [đợi] để xử lý tải trang định kỳ, tải phần tử web;

Nguyễn Thị Hoa @nguyenhoa

Theo dõi

1. 4K 71 54

Đã đăng vào ngày 22 tháng 8 năm 2020 6. 13 CH 11 phút đọc

4. 6K

1

1

Chờ ngầm định và Chờ đợi rõ ràng trong Selenium WebDriver

  • Report
  • Add to series of me

Bài đăng này đã không được cập nhật trong 2 năm

Trong Selenium – Waits [các lệnh đợi/chờ] là một yếu tố đóng vai trò rất quan trọng khi thực hiện các trường hợp thử nghiệm. Waits giúp người dùng giải quyết sự cố khi chuyển hướng đến các trang web khác nhau bằng cách làm mới toàn bộ trang web và tải lại các phần tử web mới. Vì một số nguyên nhân liên quan đến việc xử lý các phần tử web, Ajax và Javascript ở phía ứng dụng web nên việc tải các phần tử không thể diễn ra cùng một lúc được. Vì vậy, việc sử dụng Waits sẽ tạo ra một khoảng thời gian thời gian trong khi tải và phản ánh các thành phần web, tránh xảy ra lỗi khi tải dữ liệu

Ở bài viết này chúng ta sẽ cùng nhau khám phá Implicit Wait và Explicit Wait là 2 ứng dụng Wait phổ biến. Đây là hai kiểu đợi [đợi] để xử lý tải trang định kỳ, tải phần tử web;

WebDriver chờ ngầm định

Implicit wait được sử dụng để cung cấp một khoảng thời gian chờ mặc định [giả định sử dụng 30 giây] giữa mỗi bước/lệnh kiểm tra liên tiếp trong toàn bộ tập lệnh kiểm tra [tập lệnh kiểm tra]. Theo đó, bước kiểm tra tiếp theo sẽ chỉ thực hiện sau 30 giây kể từ thời điểm thực hiện xong lệnh kiểm tra trước đó

Ghi chú chính

  • Chờ đợi ngầm định là một dòng mã đơn được khai báo trong quá trình thiết lập phương thức của tập lệnh thử nghiệm [tập lệnh thử nghiệm]
  • Vậy với Explicit wait thì Implicit wait tường minh và đơn giản hơn. Cú pháp và cách tiếp cận của Implicit wait cũng đơn giản hơn

Ngoài ưu điểm dễ dàng và đơn giản để áp dụng, Ngầm chờ đợi cũng có một số nhược điểm như. nó làm tăng thời gian thực thi lệnh thử nghiệm của tập tin vì sau mỗi lệnh sẽ bị dừng để chờ trong một khoảng thời gian quy định trước khi tiếp tục thực thi lệnh tiếp theo

Vì vậy, để giải quyết vấn đề này, WebDriver cung cấp sự chờ đợi rõ ràng, nơi chúng ta có thể áp dụng các sự chờ đợi bất kể khi nào phát sinh sự cố/tình huống thay vì bắt buộc phải chờ đợi trong khi thực hiện từng bước kiểm tra

Báo cáo nhập khẩu

WebDriverWait wait = new WebDriverWait[drv,30];
2 – Để có thể truy cập và áp dụng Ngầm chờ trong tập lệnh thử nghiệm của mình, chúng ta bắt buộc phải nhập gói này vào tập lệnh thử nghiệm

cú pháp

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

pass the code line to the file command try the after the step startup to the WebDriver. Đây là tất cả những gì cần thiết để đặt một chờ đợi ngầm định vào tập lệnh thử nghiệm của bạn

Hướng dẫn mã

Implicit wait bao gồm 2 tham số/đối số. Đối số đầu tiên để biết thời gian bằng chữ số mà hệ thống cần đợi [trong ví dụ này là 10]. Đối số thứ hai chỉ ra đơn vị thời gian [trong ví dụ này là giây]. Ghép lại, trong đoạn mã trên, chúng ta đã thiết lập 10 giây làm thời gian chờ mặc định của Implicit wait

WebDriver chờ rõ ràng

Chờ đợi rõ ràng được sử dụng để tạm dừng việc thực thi tập lệnh này cho đến khi một công cụ điều kiện có thể chỉ được giải đáp ứng dụng hoặc thời gian tối đa trôi qua. Khác với Chờ đợi ngầm định, Chờ đợi rõ ràng chỉ được áp dụng cho một trường hợp cụ thể có thể thay thế vì sử dụng cho toàn bộ lệnh trong tập lệnh

WebDriver cung cấp các lớp

WebDriverWait wait = new WebDriverWait[drv,30];
3 và
WebDriverWait wait = new WebDriverWait[drv,30];
4 để sử dụng cho Explicit đợi. Hãy bắt đầu làm quen với Explicit đợi thông qua ví dụ trên trang “gmail. com”

Kịch bản

  • Khởi động trình duyệt web và mở trang “gmail. com”
  • Nhập tên người dùng hợp lệ
  • Nhập mật khẩu hợp lệ
  • Bấm vào nút Đăng nhập
  • Nút "Soạn thư" xuất hiện sau khi tải trang

Mã WebDriver sử dụng Chờ rõ ràng

Chúng ta sẽ sử dụng luôn project “Learning_Selenium” đã tạo ở các bài trước để tạo lệnh cho kịch bản trên

Bước 1. Tạo 1 class java mới có tên “Wait_Demonstration” trong project “Learning_Selenium”

Bước 2. Sao chép và dán đoạn mã dưới đây vào lớp “Wait_Demonstration. java” vừa tạo. Đây là đoạn mã tương ứng với kịch bản được tạo ở trên

import static org.junit.Assert.*;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
 
public class Wait_Demonstration {
 
       // created reference variable for WebDriver
       WebDriver drv;
       @Before
       public void setup[] throws InterruptedException {
 
              // initializing drv variable using FirefoxDriver
              drv=new FirefoxDriver[];
              // launching gmail.com on the browser
              drv.get["//gmail.com"];
              // maximized the browser window
              drv.manage[].window[].maximize[];
              drv.manage[].timeouts[].implicitlyWait[10, TimeUnit.SECONDS];
       }
 
       @Test
       public void test[] throws InterruptedException {
 
              // saving the GUI element reference into a "username" variable of WebElement type
              WebElement username = drv.findElement[By.id["Email"]];
 
              // entering username
              username.sendKeys["shruti.shrivastava.in"];
 
              // entering password
              drv.findElement[By.id["Passwd"]].sendKeys["password"];
 
              // clicking signin button
              drv.findElement[By.id["signIn"]].click[];
 
              // explicit wait - to wait for the compose button to be click-able
              WebDriverWait wait = new WebDriverWait[drv,30];
 
         wait.until[ExpectedConditions.visibilityOfElementLocated[By.xpath["//div[contains[text[],'COMPOSE']]"]]];
              // click on the compose button as soon as the "compose" button is visible
       drv.findElement[By.xpath["//div[contains[text[],'COMPOSE']]"]].click[];
       }
 
       @After
       public void teardown[] {
       // closes all the browser windows opened by web driver
   drv.quit[];     
       }
}

Báo cáo nhập khẩu

Trong đoạn mã trên, 2 góiexpectedConditions và WebDriverWait được nhập vào lớp đầu đoạn trước khi tạo tập lệnh thực thi cho phần Chờ rõ ràng

  • WebDriverWait wait = new WebDriverWait[drv,30];
    
    5
  • WebDriverWait wait = new WebDriverWait[drv,30];
    
    6

Ngoài ra còn có 1 số gói khác đã được đề cập ở các bài trước. ví dụ như các trang tham chiếu đến lớp Chọn để xử lý trình đơn thả xuống

Khởi tạo đối tượng cho lớp WebDriverWait

WebDriverWait wait = new WebDriverWait[drv,30];

Tạo một biến tham chiếu “chờ” cho lớp WebDriverWait và khởi động nó bằng cách sử dụng biến có thể WebDriver và khai báo thời gian chờ tối đa để quá trình tạm dừng thực thi. Thời gian chờ tối đa này được tính bằng "giây" [trong ví dụ này được đặt là 30 giây]

Quá trình khởi động WebDriver đã được đề cập ở các bài trước

Điều kiện dự kiến

wait.until[ExpectedConditions.visibilityOfElementLocated[By.xpath["//div[contains[text[],'COMPOSE']]"]]];
drv.findElement[By.xpath["//div[contains[text[],'COMPOSE']]"]].click[];

Lệnh trên có nghĩa là chờ đợi một khoảng thời gian quy định hoặc một điều kiện dự kiến ​​​​sẽ xảy ra, điều kiện xảy ra trước đó

Để có thể thực hiện công việc này, chúng tôi sử dụng biến tham chiếu "chờ" của lớp

WebDriverWait wait = new WebDriverWait[drv,30];
3 đã tạo ở bước trước cùng với lớp
WebDriverWait wait = new WebDriverWait[drv,30];
4 và một điều kiện thực tế dự kiến ​​sẽ xảy ra [visibilityOfElementLocation[By. xpath. ]]. Ngay khi điều kiện mong đợi xảy ra, bộ điều khiển chương trình sẽ chuyển sang bước thực hiện tiếp theo thay vì bắt buộc phải chờ trong toàn bộ 30 giây [thời gian chờ tối đa được đặt ở trên]

Chờ nút “Soạn thư” xuất hiện và tải xong, chương trình tiếp tục gọi lệnh tiếp theo. nhấp vào nút “Soạn thư”

Các loại điều kiện mong đợi

Lớp

WebDriverWait wait = new WebDriverWait[drv,30];
4 cung cấp một bộ trợ giúp tuyệt vời để giải quyết các vấn đề trong đó chúng ta phải xác định các điều kiện xảy ra trước khi thực hiện các bước kiểm tra thực tế

Lớp

WebDriverWait wait = new WebDriverWait[drv,30];
4 đi kèm với một loạt các điều kiện mong đợi có thể được truy cập với sự trợ giúp của biến tham chiếu
WebDriverWait wait = new WebDriverWait[drv,30];
3 và phương thức
wait.until[ExpectedConditions.visibilityOfElementLocated[By.xpath["//div[contains[text[],'COMPOSE']]"]]];
drv.findElement[By.xpath["//div[contains[text[],'COMPOSE']]"]].click[];
2

Một số điều kiện mong muốn dictionary dictionary

#1] elementToBeClickable[] – Điều kiện mong đợi là chờ một phần tử có thể nhấp được, tức là phần tử đó phải hiển thị / được hiển thị trên màn hình và phải được bật [có thể nhấp]

Mã mẫu

wait.until[ExpectedConditions.elementToBeClickable[By.xpath[“//div[contains[text[],'COMPOSE']]”]]];

#2] textToBePresentInElement[] – Điều kiện mong đợi là đợi một phần tử chứa đoạn văn bản được định nghĩa

Mã mẫu

wait.until[ExpectedConditions.textToBePresentInElement[By.xpath[“//div[@id= ‘forgotPass'”], “text to be found”]];

#3] alertIsPresent[] – Điều kiện mong đợi là đợi một hộp cảnh báo xuất hiện

Mã mẫu

wait.until[ExpectedConditions.visibilityOfElementLocated[By.xpath["//div[contains[text[],'COMPOSE']]"]]];
drv.findElement[By.xpath["//div[contains[text[],'COMPOSE']]"]].click[];
3

#4] titleIs[] – Điều kiện mong đợi là đợi một trang có tiêu đề cụ thể

Mã mẫu

wait.until[ExpectedConditions.visibilityOfElementLocated[By.xpath["//div[contains[text[],'COMPOSE']]"]]];
drv.findElement[By.xpath["//div[contains[text[],'COMPOSE']]"]].click[];
4

#5] frameToBeAvailableAndSwitchToIt[] – Điều kiện mong đợi là đợi một khung có sẵn [có sẵn] và ngay sau khi có khung, điều khiển sẽ tự động chuyển sang nó

Mã mẫu

wait.until[ExpectedConditions.frameToBeAvailableAndSwitchToIt[By.id[“newframe”]]];

Điều hướng bằng WebDriver

Có một hành động mà người dùng rất phổ biến là nhấp chuột qua lại nhiều lần vào nút quay lại [quay lại] và chuyển tiếp [chuyển tiếp] của trình duyệt web để điều hướng đến các trang web khác nhau đã truy cập trong phiên bản hiện tại trên . Để mô phỏng các hành động như vậy, WebDriver giới thiệu các lệnh Điều hướng. Dưới đây là 1 số lệnh chi tiết

#1] điều hướng[]. trở lại[]

Lệnh điều hướng đến trang web trước đó đã truy cập

mã mẫu

driver.navigate[].back[];

Lệnh trên không yêu cầu tham số và đưa người dùng trở lại trang web trước đó trong lịch sử duyệt web

#2] điều hướng[]. phía trước[]

Lệnh này cho phép người dùng điều hướng đến trang web tiếp theo có tham chiếu đến lịch sử của trình duyệt

mã mẫu

driver.navigate[].forward[];

Lệnh chuyển tiếp trên cũng không yêu cầu tham số và đưa người dùng đến trang web tiếp theo trong lịch sử của trình duyệt web [trang web tiếp theo sau của trang web đã điều hướng đến bằng lệnh quay lại]

#3] điều hướng[]. Làm tươi[]

Lệnh này cho phép người dùng làm trang web mới hiện tại sẽ tải xuống tất cả các phần tử web trong trang

mã mẫu

driver.navigate[].refresh[];

Đây cũng là 1 lệnh không có tham số

#4] điều hướng[]. đến[]

Lệnh này cho phép người dùng khởi động một cửa sổ duyệt web mới và điều hướng đến URL đã được định sẵn

mã mẫu

import static org.junit.Assert.*;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
 
public class Wait_Demonstration {
 
       // created reference variable for WebDriver
       WebDriver drv;
       @Before
       public void setup[] throws InterruptedException {
 
              // initializing drv variable using FirefoxDriver
              drv=new FirefoxDriver[];
              // launching gmail.com on the browser
              drv.get["//gmail.com"];
              // maximized the browser window
              drv.manage[].window[].maximize[];
              drv.manage[].timeouts[].implicitlyWait[10, TimeUnit.SECONDS];
       }
 
       @Test
       public void test[] throws InterruptedException {
 
              // saving the GUI element reference into a "username" variable of WebElement type
              WebElement username = drv.findElement[By.id["Email"]];
 
              // entering username
              username.sendKeys["shruti.shrivastava.in"];
 
              // entering password
              drv.findElement[By.id["Passwd"]].sendKeys["password"];
 
              // clicking signin button
              drv.findElement[By.id["signIn"]].click[];
 
              // explicit wait - to wait for the compose button to be click-able
              WebDriverWait wait = new WebDriverWait[drv,30];
 
         wait.until[ExpectedConditions.visibilityOfElementLocated[By.xpath["//div[contains[text[],'COMPOSE']]"]]];
              // click on the compose button as soon as the "compose" button is visible
       drv.findElement[By.xpath["//div[contains[text[],'COMPOSE']]"]].click[];
       }
 
       @After
       public void teardown[] {
       // closes all the browser windows opened by web driver
   drv.quit[];     
       }
}
0

Khác với các lệnh trên, đây là 1 lệnh có tham số đầu vào là 1 URL [địa chỉ muốn điều hướng đến]. URL này được định nghĩa chỉ để mở trong quá trình duyệt web mới khởi động

Lời kết

Bài dịch trên còn thiếu sót, nếu bạn quan tâm có thể tìm hiểu bài viết gốc tại đây. https. //www. trợ giúp kiểm thử phần mềm. com/selenium-webdriver-wait-selenium-tutorial-15/

Ngoài 2 loại chờ được đề cập đến trong bài, thì còn 1 loại chờ nữa khá phổ biến là Chờ thông thạo. Sử dụng Fluent wait trong những trường hợp kiểu như, đôi khi là ta gặp những phần tử cần từ một đến hai giây để tải, nhưng khi khác có khi lại cần nhiều thời gian hơn đến tận hưởng mấy giây thật là có hạn. Fluent wait will find search đi search lại cho đến khi tìm được phần tử đó hoặc đến khi hết thời gian thì thôi. Nếu bạn quan tâm có thể tìm hiểu thêm ở bài viết này. https. //vananhtooo. báo chí. com/2017/11/13/implicit-wait-explicit-wait-va-fluent-wait-trong-selenium-webdriver/

Chủ Đề