JavaScriptExecutor là gì?
JavaScriptExecutor là một Giao diện giúp thực thi JavaScript thông qua Selenium Webdriver. JavaScriptExecutor cung cấp hai phương thức "executecript" & "executeAsyncScript" để chạy javascript trên cửa sổ đã chọn hoặc trang hiện tại.
Trong hướng dẫn này, bạn sẽ học -
- JavaScriptExecutor là gì?
- Tại sao chúng ta cần JavaScriptExecutor?
- Phương thức JavaScriptExecutor
- Ví dụ về executeAsyncScript
- Ví dụ 1: Thực hiện chế độ ngủ trong trình duyệt đang được kiểm tra.
- Ví dụ về executeScript
- 1) Ví dụ: Nhấp vào nút để đăng nhập và tạo cửa sổ Cảnh báo
- 2) Ví dụ: Chụp dữ liệu Scrape và điều hướng đến các trang khác nhau
- 3) Ví dụ: Scroll Downusing
Tại sao chúng ta cần JavaScriptExecutor?
Trong Selenium Webdriver, các trình định vị như XPath, CSS, v.v. được sử dụng để xác định và thực hiện các hoạt động trên một trang web.
Trong trường hợp, các trình đị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 một 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.JavascriptExecutor ) trong tập lệnh để sử dụng JavaScriptExecutor.
Phương thức JavaScriptExecutor
- executeAsyncScript
Với tập lệnh không đồng bộ, trang của bạn 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 hiển thị. Hàm này sẽ thực thi một đoạn JavaScript không đồng bộ trong ngữ cảnh của khung hoặc cửa sổ hiện đang được chọn trong Selenium. JS được thực thi như vậy là đơn luồng với một hàm gọi lại khác nhau chạy đồng bộ.
- thi hành
Phương thức này thực thi JavaScript trong ngữ cảnh của khung hoặc cửa sổ hiện đang đượ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 thân của một hàm ẩn danh (một hàm không có tên). Chúng ta cũng có thể chuyển các đối số phức tạp cho nó.
Tập lệnh có thể trả về giá trị. Các kiểu dữ liệu được trả về là
- Boolean
- Dài
- Chuỗi
- Danh sách
- WebElement.
Cú pháp cơ bản cho JavascriptExecutor được cung cấp bên dưới:
Cú pháp:
Trình điều khiển JavascriptExecutor js = (JavascriptExecutor);js.executeScript (Tập lệnh, Đối số);
- Tập lệnh - Đây là JavaScript cần thực thi.
- Đối số - Đó là các đối số cho tập lệnh. Nó là tùy chọn.
Ví dụ về executeAsyncScript
Sử dụng executeAsyncScript, giúp cải thiện hiệu suất của bài kiểm tra của bạn. Nó cho phép kiểm tra viết giống như một mã hóa thông thường.
ExecutiveSync chặn các hành động khác đang được thực hiện bởi trình duyệt Selenium nhưng thực thi executeAsync không chặn hành động. Nó sẽ gửi một cuộc gọi lại đến bộ Thử nghiệm phía máy chủ sau khi tập lệnh được thực hiện xong. Nó có nghĩa là mọi thứ bên trong script sẽ được thực thi bởi trình duyệt chứ không phải máy chủ.
Ví dụ 1: Thực hiện chế độ ngủ trong trình duyệt đang được kiểm tra.
Trong trường hợp 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 "http://demo.guru99.com/V4/".
- Ứng dụng chờ 5 giây để thực hiện thêm một hành động.
Bước 1) Ghi lại thời gian bắt đầu trước khi đợi 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 đó, lấy 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 đã qua.
Bước 5) Xác minh đầu ra mà nó sẽ hiển thị hơn 5000 mili giây
nhập java.util.concurrent.TimeUnit;nhập org.openqa.selenium.JavascriptExecutor;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập org.testng.annotations.Test;lớp công khai JavaSE_Test {@Kiểm trapublic void Đăng nhập (){Trình điều khiển WebDriver = new FirefoxDriver ();// Tạo đối tượng giao diện JavascriptExecutor bằng cách nhập kiểuTrình điều khiển JavascriptExecutor js = (JavascriptExecutor);// Khởi chạy trang web.driver.get ("http://demo.guru99.com/V4/");// Phóng to cửa sổdriver.manage (). window (). Maxim ();// Đặt Thời gian chờ tập lệnh thành 20 giâydriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Khai báo và đặt thời gian bắt đầulong start_time = System.currentTimeMillis ();// Gọi phương thức executeAsyncScript () để đợi trong 5 giâyjs.executeAsyncScript ("window.setTimeout (đối số [đối số.length - 1], 5000);");// Lấy sự khác biệt (currentTime - startTime) của thời gian.System.out.println ("Thời gian đã qua: + (System.currentTimeMillis () - start_time));}}
Kết quả: Hiển thị thành công thời gian đã qua hơn 5 giây (5000 mili giây) như hình dưới đây:
[TestNG] Đang chạy:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customsuite.xmllog4j: CẢNH BÁO Không tìm thấy trình phụ lục nào cho trình ghi nhật ký (org.apache.http.client.protocol.RequestAddCookies).log4j: CẢNH BÁO Vui lòng khởi chạy hệ thống log4j đúng cách.log4j: WARN Xem http://logging.apache.org/log4j/1.2/faq.html#noconfig để biết thêm thông tin.Thời gian đã qua: 5022ĐÃ PASSED: Đăng nhập===============================================Kiểm tra mặc địnhKiểm tra chạy: 1, Thất bại: 0, Bỏ qua: 0===============================================
Ví dụ về executeScript
Đối với executeScript, chúng ta sẽ thấy 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 JavaScriptExecutor.
Trong trường hợp này, chúng tôi sẽ sử dụng trang web demo "Guru99" để minh họa JavaScriptExecutor. Trong ví dụ này,
- Khởi chạy trình duyệt web
- mở trang web "http://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.
nhập org.openqa.selenium.By;nhập org.openqa.selenium.JavascriptExecutor;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập org.testng.annotations.Test;lớp công khai JavaSE_Test {@Kiểm trapublic void Đăng nhập (){Trình điều khiển WebDriver = new FirefoxDriver ();// Tạo đối tượng giao diện JavascriptExecutor bằng cách nhập kiểuTrình điều khiển JavascriptExecutor js = (JavascriptExecutor);// Khởi chạy trang web.driver.get ("http://demo.guru99.com/V4/");Nút WebElement = driver.findElement (By.name ("btnLogin"));// Đăng nhập vào Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("password")). sendKeys ("amUpenu");// Thực hiện Nhấp vào nút ĐĂNG NHẬP bằng JavascriptExecutorjs.executeScript ("đối số [0] .click ();", nút);// Để tạo cửa sổ Cảnh báo bằng JavascriptExecutor. Hiển thị thông báo cảnh báojs.executeScript ("alert ('Chào mừng đến với Guru99');");}}
Đầu ra: Khi mã được thực thi thành công. Bạn sẽ quan sát
- Nhấp 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ụ: Chụp dữ liệu Scrape và Điều hướng đến các trang khác nhau bằng JavaScriptExecutor.
Thực thi tập lệnh selen bên dưới. Trong ví dụ này,
- Khởi chạy trang web
- Tìm nạp các 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.
nhập org.openqa.selenium.JavascriptExecutor;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập org.testng.annotations.Test;lớp công khai JavaSE_Test {@Kiểm trapublic void Đăng nhập (){Trình điều khiển WebDriver = new FirefoxDriver ();// Tạo đối tượng giao diện JavascriptExecutor bằng cách nhập kiểuTrình điều khiển JavascriptExecutor js = (JavascriptExecutor);// Khởi chạy trang web.driver.get ("http://demo.guru99.com/V4/");// Tìm nạp Tên miền của trang web. Tostring () thay đổi đối tượng thành tên.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Tên miền của trang web =" + Tên miền);// Tìm nạp URL của trang web. Tostring () thay đổi đối tượng thành tênString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL của trang =" + url);// Phương thức document.title lấy tên Tiêu đề của trang web. Tostring () thay đổi đối tượng thành tênString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Tiêu đề của trang =" + Tên trang);// Điều hướng đến Trang mới tức là tạo trang truy cập. (khởi chạy url mới)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}
Đầu ra: Khi đoạn mã trên được thực thi thành công, nó sẽ tìm nạp thông tin chi tiết của trang web và điều hướng đến trang khác như hình dưới đây.
[TestNG] Đang chạy:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customsuite.xmllog4j: CẢNH BÁO Không tìm thấy trình phụ lục nào cho trình ghi nhật ký (org.apache.http.client.protocol.RequestAddCookies).log4j: CẢNH BÁO Vui lòng khởi chạy hệ thống log4j đúng cách.log4j: WARN Xem http://logging.apache.org/log4j/1.2/faq.html#noconfig để biết thêm thông tin.Tên miền của trang web = demo.guru99.comURL của trang web = http://demo.guru99.com/V4/Tiêu đề của trang = Trang chủ Ngân hàng Guru99ĐÃ PASSED: Đăng nhập===============================================Kiểm tra mặc địnhKiểm tra chạy: 1, Thất bại: 0, Bỏ qua: 0===============================================
3) Ví dụ: Cuộn xuống bằng cách sử dụng JavaScriptExecutor.
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
nhập org.openqa.selenium.JavascriptExecutor;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập org.testng.annotations.Test;lớp công khai JavaSE_Test {@Kiểm trapublic void Đăng nhập (){Trình điều khiển WebDriver = new FirefoxDriver ();// Tạo đối tượng giao diện JavascriptExecutor bằng cách nhập kiểuTrình điều khiển JavascriptExecutor js = (JavascriptExecutor);// Khởi chạy trang web.driver.get ("http://moneyboats.com/");// Phóng to cửa sổdriver.manage (). window (). Maxim ();// Cuộn dọc xuống 600 pixeljs.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).
Tóm lược:
JavaScriptExecutor được sử dụng khi Selenium Webdriver không thể nhấp 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 "executecript" & "executeAsyncScript" để xử lý.
- Đã thực thi JavaScript bằng Selenium Webdriver.
- Minh họa cách nhấp vào một phần tử thông qua JavaScriptExecutor, nếu selen không nhấp vào phần tử do một số vấn đề.
- Đã tạo cửa sổ 'Cảnh báo' bằng JavaScriptExecutor.
- Được điều hướng đến trang khác bằng JavaScriptExecutor.
- Cuộn xuống cửa sổ bằng JavaScriptExecutor.
- Đã tìm nạp URL, tiêu đề và tên miền bằng JavaScriptExecutor.