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.
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,
- Khởi chạy trình duyệt web
- mở trang web https://demo.guru99.com/V4/ và
- đăng nhập bằng thông tin đăng nhập
- 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).
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.
[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 ===============================================
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).
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.