Như bạn đã biết cơ chế của Selenium Webdriver là sử dụng JavaScript để thực hiện các thao tác với trình duyệt.
Bài này chúng tôi hướng dẫn bạn bơm (inject) JQuery trong Selenium WebDriver. Sau đó bạn có thể thực thi các câu lệnh jQuery trên trang web mà bạn đang kiểm thử.
Nội dung chính
Ví dụ Inject JQuery trong Selenium WebDriver
1. Tạo file MyJQuery.txt
Tạo file MyJQuery.txt và lưu trong ổ D:/ hoặc bất kỳ nơi nào bạn muốn.
(function(jqueryUrl, callback) { if (typeof jqueryUrl != 'string') { jqueryUrl = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'; } if (typeof jQuery == 'undefined') { var script = document.createElement('script'); var head = document.getElementsByTagName('head')[0]; var done = false; script.onload = script.onreadystatechange = (function() { if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) { done = true; script.onload = script.onreadystatechange = null; head.removeChild(script); callback(); } }); script.src = jqueryUrl; head.appendChild(script); } else { callback(); } })(arguments[0], arguments[arguments.length - 1]);
2. Tạo lớp MyUtils.java
Lớp này chưa phương thức openChrome(), readFile() và injectJQuery() - để bơm JQuery vào trang web mà bạn kiểm thử.
package vn.kienthuclaptrinh.selenium; import java.awt.AWTException; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.Charset; import java.util.concurrent.TimeUnit; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class MyUtils { /** * open chrome browser * * @author phamvanthanh * @throws InterruptedException * @throws AWTException */ public static WebDriver openChrome() { System.setProperty("webdriver.chrome.driver", "D:\\SeleniumWebdriver\\chromedriver.exe"); return new ChromeDriver(); } /** * read file * * @author kienthuclaptrinh.net * @param file * @return * @throws IOException */ public static String readFile(String file) throws IOException { Charset cs = Charset.forName("UTF-8"); FileInputStream stream = new FileInputStream(file); try { Reader reader = new BufferedReader(new InputStreamReader(stream, cs)); StringBuilder builder = new StringBuilder(); char[] buffer = new char[8192]; int read; while ((read = reader.read(buffer, 0, buffer.length)) > 0) { builder.append(buffer, 0, read); } return builder.toString(); } finally { stream.close(); } } /** * inject jQuery to page * * @author kienthuclaptrinh.net * @throws IOException */ public static void injectJQuery(WebDriver driver, String jQueryStr) throws IOException { String jQueryLoader = MyUtils.readFile(jQueryStr); driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS); JavascriptExecutor js = (JavascriptExecutor) driver; js.executeAsyncScript(jQueryLoader); } }
3. Tính độ vao trang kienthuclaptrinh.net bằng cách sử dụng hàm height() trong JQuery
package vn.kienthuclaptrinh.selenium; import java.io.IOException; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; public class Test { // lenh height() trong JQuery private static String HEIGHT_JQ = "return $(document ).height();"; private static String JQUERY_FILE = "D:\\MyJQuery.txt"; public static void main(String[] args) throws IOException { WebDriver driver = MyUtils.openChrome(); driver.manage().window().maximize(); driver.get(""); // Inject JQuery trong Selenium WebDriver MyUtils.injectJQuery(driver, JQUERY_FILE); // tinh chieu cao cua trang kienthuclaptrinh.net JavascriptExecutor jse = ((JavascriptExecutor) driver); long pageHeight = (Long) jse.executeScript(HEIGHT_JQ); System.out.println("$(document ).height() = " + pageHeight); } }
Kết quả:
$(document ).height() = 2727