JavaScriptExecutor trong Selenium với Ví dụ

Là gì JavaScriptExecutor là gì?

JavaScriptExecutor là một Giao diện giúp thực thi JavaKịch bản thông qua Selenium Webdriver. JavaScriptExecutor cung cấp hai phương thức “executescript” và “executeAsyncScript” để chạy javascript trên cửa sổ đã chọn hoặc trang hiện tại.

JavaScriptExecutor

Tại sao chúng ta cần JavaScriptExecutor là gì?

In Selenium Webdriver, các bộ định vị như XPath, CSS, v.v. được sử dụng để xác định và thực hiện các thao tác trên một trang web.

Trong trường hợp các bộ định vị này không hoạt động, bạn có thể sử dụng JavaScriptExecutor. Bạn có thể sử dụng JavaScriptExecutor để thực hiện thao tác mong muốn trên một phần tử web.

Selenium hỗ trợ javaScriptExecutor. Không cần thêm plugin hoặc tiện ích bổ sung. Bạn chỉ cần nhập (org.openqa.selenium.JavascriptCông chức) trong tập lệnh để sử dụng JavaTrình thực thi tập lệnh.

JavaPhương pháp ScriptExecutor trong Selenium

tập lệnh thực thi

Phương pháp này thực hiện JavaScript trong ngữ cảnh của khung hoặc cửa sổ hiện được chọn trong Selenium. Tập lệnh được sử dụng trong phương thức này chạy trong phần nội dung của một hàm ẩn danh (một hàm không có tên). Chúng ta cũng có thể truyền những đối số phức tạp cho nó.

Tập lệnh có thể trả về giá trị. Kiểu dữ liệu trả về là

  • Boolean
  • dài
  • Chuỗi
  • Danh sách
  • Phần tử Web.

JavascriptCú pháp thực thi:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Script - Đây là JavaTập lệnh cần thực thi.
  • Lập luận – Đó là những lập luận cho kịch bản. Đó là tùy chọn.

thực hiệnAsyncScript

Với tập lệnh không đồng bộ, trang của bạn sẽ hiển thị nhanh hơn. Thay vì buộc người dùng phải đợi tập lệnh tải xuống trước khi trang được hiển thị. Hàm này sẽ thực thi một phần không đồng bộ JavaTập lệnh trong bối cảnh của khung hoặc cửa sổ hiện đang được chọn trong Selenium. JS được thực thi theo cách này là luồng đơn với nhiều hàm gọi lại chạy đồng bộ.

Cách Sử dụng JavaScriptExecutor trong Selenium

Dưới đây là quy trình từng bước về cách sử dụng JavaScriptExecutor trong Selenium:

Bước 1) Nhập gói.

import org.openqa.selenium.JavascriptExecutor;

Bước 2) Tạo một tài liệu tham khảo.

JavascriptExecutor js = (JavascriptExecutor) driver;

Bước 3) Gọi JavascriptPhương pháp thực hiện.

js.executeScript(script, args);

Ví dụ về Nhấp vào một phần tử bằng cách sử dụng JavaScriptExecutor trong Selenium

Đối với execScript, chúng ta sẽ xem lần lượt ba ví dụ khác nhau.

1) Ví dụ: Nhấp vào nút để đăng nhập và tạo cửa sổ Cảnh báo bằng cách sử dụng JavaTrình thực thi tập lệnh.

Trong trường hợp này, chúng tôi sẽ sử dụng trang demo “Guru99” để minh họa JavaScriptExecutor. Trong ví dụ này,

Nhấp vào nút để đăng nhập và tạo cửa sổ cảnh báo bằng cách sử dụng JavaScriptExecutor

  • Hiển thị cửa sổ cảnh báo khi đăng nhập thành công.
import org.openqa.selenium.By;		
import org.openqa.selenium.JavascriptExecutor;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.WebElement;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.annotations.Test;		
    		
public class JavaSE_Test {				


    @Test		
    public void Login() 					
    {		
        WebDriver driver= new FirefoxDriver();			
        		
        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("https://demo.guru99.com/V4/");			
        		
        WebElement button =driver.findElement(By.name("btnLogin"));			
        		
        //Login to Guru99 		
        driver.findElement(By.name("uid")).sendKeys("mngr34926");					
        driver.findElement(By.name("password")).sendKeys("amUpenu");					
        		
        //Perform Click on LOGIN button using JavascriptExecutor		
        js.executeScript("arguments[0].click();", button);
                                
        //To generate Alert window using JavascriptExecutor. Display the alert message 			
        js.executeScript("alert('Welcome to Guru99');");   
    		
    }		
}

Đầu ra: Khi mã được thực thi thành công. Bạn sẽ quan sát

  • Nhấp chuột thành công vào nút đăng nhập và
  • Cửa sổ cảnh báo sẽ được hiển thị (xem hình ảnh bên dưới).

Nhấp vào nút để đăng nhập và tạo cửa sổ cảnh báo bằng cách sử dụng JavaScriptExecutor

2) Ví dụ: Thu thập dữ liệu Scrape và điều hướng đến các trang khác nhau bằng cách sử dụng JavaTrình thực thi tập lệnh.

Thực thi tập lệnh selen bên dưới. Trong ví dụ này,

  • Khởi chạy trang web
  • Lấy thông tin chi tiết của trang web như URL của trang web, tên tiêu đề và tên miền của trang web.
  • Sau đó điều hướng đến một trang khác.
import org.openqa.selenium.JavascriptExecutor;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.annotations.Test;		
    		
public class JavaSE_Test {				

    @Test		
    public void Login() 					
    {		
        WebDriver driver= new FirefoxDriver();			
        		
        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("https://demo.guru99.com/V4/");
			
        //Fetching the Domain Name of the site. Tostring() change object to name.		
        String DomainName = js.executeScript("return document.domain;").toString();			
        System.out.println("Domain name of the site = "+DomainName);					
          		
        //Fetching the URL of the site. Tostring() change object to name		
        String url = js.executeScript("return document.URL;").toString();			
        System.out.println("URL of the site = "+url);					
          		
       //Method document.title fetch the Title name of the site. Tostring() change object to name		
       String TitleName = js.executeScript("return document.title;").toString();			
       System.out.println("Title of the page = "+TitleName);					

        		
      //Navigate to new Page i.e to generate access page. (launch new url)		
      js.executeScript("window.location = 'https://demo.guru99.com/'");			
    }		
}

Đầu ra: Khi đoạn mã trên được thực thi thành công, nó sẽ lấy thông tin chi tiết của trang web và điều hướng đến trang khác như hiển thị bên dưới.

Thu thập dữ liệu Scrape và điều hướng đến các trang khác nhau bằng cách sử dụng JavaScriptExecutor

[TestNG] Running:		
  C:\Users\gauravn\AppData\Local\Temp\testng-eclipse-467151014\testng-customsuite.xml		

log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).		
log4j:WARN Please initialize the log4j system properly.		
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.		
Domain name of the site = demo.guru99.com		
URL of the site = https://demo.guru99.com/V4/		
Title of the page = Guru99 Bank Home Page		
PASSED: Login		

===============================================		
    Default test		
    Tests run: 1, Failures: 0, Skips: 0
===============================================

Thu thập dữ liệu Scrape và điều hướng đến các trang khác nhau bằng cách sử dụng JavaScriptExecutor

3) Ví dụ: Cuộn xuống bằng cách sử dụng JavaTrình thực thi tập lệnh.

Thực thi tập lệnh selen bên dưới. Trong ví dụ này,

  • Khởi chạy trang web
  • Cuộn xuống 600 pixel
import org.openqa.selenium.JavascriptExecutor;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.annotations.Test;		
    		
public class JavaSE_Test {				

    @Test		
    public void Login() 					
    {		
        WebDriver driver= new FirefoxDriver();			
        		
        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("http://moneyboats.com/");			
     
        //Maximize window		
        driver.manage().window().maximize();		
        		
        //Vertical scroll down by 600  pixels		
        js.executeScript("window.scrollBy(0,600)");			
    }		
}

Đầu ra: Khi đoạn mã trên được thực thi, nó sẽ cuộn xuống 600 pixel (xem hình ảnh bên dưới).

Cuộn xuống bằng cách sử dụng JavaScriptExecutor

Ví dụ về executeAsyncScript trong Selenium

Sử dụng executeAsyncScript giúp cải thiện hiệu suất kiểm tra của bạn. Nó cho phép viết kiểm tra giống như mã hóa thông thường.

giám đốc điều hànhSync chặn các hành động tiếp theo được thực hiện bởi Selenium trình duyệt nhưng execAsync không chặn hành động. Nó sẽ gửi lệnh gọi lại đến phía máy chủ Kiểm tra suite sau khi tập lệnh hoàn tất. Điều đó có nghĩa là mọi thứ bên trong tập lệnh sẽ được trình duyệt thực thi chứ không phải máy chủ.

Ví dụ 1: Thực hiện chế độ ngủ trong trình duyệt đang được thử nghiệm.

Trong kịch bản này, chúng tôi sẽ sử dụng trang web demo “Guru99” để minh họa executeAsyncScript. Trong ví dụ này, bạn sẽ

  • Khởi chạy trình duyệt.
  • Mở trang web https://demo.guru99.com/V4/.
  • Ứng dụng chờ 5 giây để thực hiện hành động tiếp theo.

Bước 1) Ghi lại thời gian bắt đầu trước khi chờ 5 giây (5000 mili giây) bằng cách sử dụng phương thức executeAsyncScript().

Bước 2) Sau đó, sử dụng executeAsyncScript() để đợi 5 giây.

Bước 3) Sau đó, có được thời gian hiện tại.

Bước 4) Trừ (thời gian hiện tại – thời gian bắt đầu) = thời gian đã trôi qua.

Bước 5) Xác minh đầu ra nó sẽ hiển thị hơn 5000 mili giây

import java.util.concurrent.TimeUnit;		

import org.openqa.selenium.JavascriptExecutor;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.annotations.Test;		
    		
public class JavaSE_Test {				

    @Test		
    public void Login() 					
    {		
        		
        WebDriver driver= new FirefoxDriver();			

        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("https://demo.guru99.com/V4/");			
     
          //Maximize window		
          driver.manage().window().maximize();		
        		
          //Set the Script Timeout to 20 seconds		
          driver.manage().timeouts().setScriptTimeout(20, TimeUnit.SECONDS);			
             
          //Declare and set the start time		
          long start_time = System.currentTimeMillis();			
                   
          //Call executeAsyncScript() method to wait for 5 seconds		
          js.executeAsyncScript("window.setTimeout(arguments[arguments.length - 1], 5000);");			
          		
         //Get the difference (currentTime - startTime)  of times.		
         System.out.println("Passed time: " + (System.currentTimeMillis() - start_time));					
                    		
    }		
}			

Đầu ra: Hiển thị thành công thời gian đã trôi qua hơn 5 giây (5000 mili giây) như hiển thị bên dưới:

[TestNG] Running:		
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse-387352559\testng-customsuite.xml		
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).		
log4j:WARN Please initialize the log4j system properly.		
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.		
Passed time: 5022		
PASSED: Login		

===============================================		
    Default test		
    Tests run: 1, Failures: 0, Skips: 0		
===============================================

Tổng kết

JavaScriptExecutor được sử dụng khi Selenium Webdriver không bấm được vào bất kỳ phần tử nào do một số vấn đề.

  • JavaScriptExecutor cung cấp hai phương thức “executescript” và “executeAsyncScript” để xử lý.
  • Đã thực hiện JavaTập lệnh sử dụng Selenium Webdriver.
  • Minh họa cách nhấp chuột vào một phần tử thông qua JavaScriptExecutor, nếu selenium không thể nhấp vào phần tử do một số vấn đề.
  • Đã tạo cửa sổ 'Cảnh báo' bằng cách sử dụng JavaTrình thực thi tập lệnh.
  • Điều hướng đến trang khác bằng cách sử dụng JavaTrình thực thi tập lệnh.
  • Cuộn xuống cửa sổ bằng cách sử dụng JavaTrình thực thi tập lệnh.
  • Đã tìm nạp URL, tiêu đề và tên miền bằng cách sử dụng JavaTrình thực thi tập lệnh.

Tìm hiểu thêm về PNV Xem tiếp