Hướng dẫn selenium jquery python - trăn jquery selen
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ử. 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ử. 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. 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.viettuts.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 viettuts.vn * @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 viettuts.vn * @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 viettuts.vn bằng cách sử dụng hàm height() trong JQuery package vn.viettuts.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 viettuts.vn JavascriptExecutor jse = ((JavascriptExecutor) driver); long pageHeight = (Long) jse.executeScript(HEIGHT_JQ); System.out.println("$(document ).height() = " + pageHeight); } } Kết quả: $(document ).height() = 2727 Trong lĩnh vực công nghệ thông tin những năm gần đây, ngôn ngữ lập trình Python đang ngày càng trở nên phổ biến. Với bất kỳ lập trình viên nào, việc tự kiểm thử (test) những dòng code mình viết ra là rất quan trọng. Với Python, người lập trình cần nắm được những kỹ năng kiểm thử đặc thù. Trong bài viết này, chuyên gia của CO-WELL Asia sẽ hướng dẫn cơ bản về selenium trong Python sử dụng UnitTest. Nội dung chính
1. Tìm hiểu về Test automation trong pythonCác lý do chọn Python là ngôn ngữ để thực hiện automation
TestCase và data test
2. Cài đặt môi trườngCài đặt Python
Cài đặt selenium với PythonCài đặt IDE Cài đặt IDE3. Tạo script đơn giản 3. Tạo script đơn giảnTestCase và data testTạo project mới trong IDE
Tốc độ xử lý khá nhanh vì không cần phải biên dịch code trước khi chạy. Python unit test Python unittest (còn được gọi là PyUnit) là một nền tảng kiểm thử (testing framework), được phát triển từ JUnit dành cho Python. Tạo project mới trong IDE Tạo script Python có cộng đồng hỗ trợ đông đảo.
Tạo scriptTải driver chrome theo version chrome hiện có và lưu vào folder “drivers” (Downloads – ChromeDriver – WebDriver for Chrome) Đọc dữ liệu test từ file data test (Được lưu trong excel)Tạo function ReadDataTest.py từ folder “steps” dùng để đọc data test từ file excel đã chuẩn bị.
Custom trình duyệt ChromeTạo function CustomChromeDriver.py từ folder “utils” dùng để tùy chỉnh profile của trình duyệt muốn mở: Tạo file testTại folder “tests” tạo mới file Python: Nhập tên file và chọn “Python unit test” File LoginTests.py ① Nhận data test đã được tạo trong file ReadDataTest.py ② Mở trình duyệt Chrome ③ Truy nhập URL dùng để chạy script ④ Đóng trình duyệt khi kết thúc test ⑤ Các bước khi test login: Nhập username, password, nhấn nút login ⑥ Kiểm tra kết quả mong muốn đã define trong dataTest với kết quả thực tế khi test 3.3.4. Get các element cần thao tác Tạo file Page_login.py lưu các element cần thao tác. Tạo script thực hiện step Tạo file Step_login.py trong folder “step” ① Các thao tác dùng để login: nhập username → nhập password → nhấn nút login. ② Get các element từ các locator trong file Page_login.py. 3.3.6. Tạo script kiểm tra kết quả Script này để get kết quả sau khi thực hiện login. Ở đây tôi sẽ get nội dung thông báo và so sánh với nội dung thông báo mong muốn trong file data test. Chạy scriptĐể xem được kết quả test thuận tiện thì cần thêm html-report vào script: Trên file LoginTests.py thêm package vn.viettuts.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 viettuts.vn * @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 viettuts.vn * @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); } }1 sau đó import thư viện HTMLTestRunner vào hoặc chạy lệnh package vn.viettuts.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 viettuts.vn * @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 viettuts.vn * @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); } }2 Trên file LoginTests.py thêm package vn.viettuts.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 viettuts.vn * @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 viettuts.vn * @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); } }1 sau đó import thư viện HTMLTestRunner vào hoặc chạy lệnh package vn.viettuts.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 viettuts.vn * @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 viettuts.vn * @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); } }2 Ở lệnh unittest.main() gọi đến phương thức report: Kết quả chạy test sẽ được lưu vào report: Ngoài ra để report được dễ nhìn hơn thì có thể custom tại template. Ví dụ template đã được custom lại:
Trên đây là những hướng dẫn cơ bản của chuyên gia từ CO-WELL Asia về Unit Testing trong Python. Đừng quên theo dõi chuyên mục CODEWELL trên website CO-WELL Asiađể đón đọc những bài viết công nghệ bổ ích nhé!chuyên mục CODEWELL trên website CO-WELL Asiađể đón đọc những bài viết công nghệ bổ ích nhé! |