[ThaoVTP] Dịch bài viết liên quan đến Tool test tự động Selenium WebDriver_Phần 1

Selenium WebDriver-Vũ khí cuối cùng của test tự động Browser cho cả iPhone/Android

Tôi sẽ giới thiệu đơn giản 3 đặc trưng, môi trường và cách code của tool tự động hóa test Web mà Java, C#, Python, Ruby có thể sử dụng với Browser: Chrome, Firefox, Internet Explorer, Opera, Android, iOS.

「Selenium WebDriver」vô cùng tiện lợi cho test Web

Selenium WebDriver」mà đang được chú ý như là tool hỗ trợ tự động test Web application đã được release năm 2011.

Selenium WebDriver via kwout

Selenium WebDriver là sản phẩm kết hợp「Selenium 1」thực hiện hỗ trợ rộng rãi Web Browser và「WebDriver」 có chức năng của Web Browser Emulator đa năng với dung lương ít tốc độ cao.

Tôi sẽ chia làm 2 phần để giới thiệu về đặc trưng của Selenium WebDriver cho những người muốn thử thực hiện Selenium WebDriver và những người đang cân nhắc thực hiện test tự động, và cùng với đó sẽ giới thiệu phương pháp code, cách thực hiện của test tự động đơn giản với Web application sử dụng Selenium WebDriver.

Giải thích thuật ngữ dùng trong bài viết

  • Selenium WebDriver Selenium WebDriver là bản kế tiếp của Selenium 1.x. Trong bài viết này tôi viết là 「Selenium WebDriver」- để chỉ nhóm library hoặc cơ chế control Web Browser.

  • driver Tồn tại WebDriver như là API dùng để control Web Browser. API dùng cho các Web Browser như FirefoxDriver, ChromeDriver, etc… sẽ được code cho từng cái, và để chỉ các coding đó.

3 đặc trưng của Selenium WebDriver

Selenium WebDriver-Tool tự động test Web application có 3 đặc trưng lớn sau.

  1. Hỗ trợ nhiều ngôn ngữ

  2. Hỗ trợ nhiều Web Browser Hỗ trợ nhiều ngôn ngữ chương trình test, hỗ trợ nhiều Web Browser với từng ngôn ngữ

  3. Tính rõ ràng của design/Coding Design thì dễ hiểu, chương trình test thì dễ thực hiện

Tôi sẽ giải thích chi tiết hơn về từng đặc trưng.

Trước hết, liên quan đến đặc trưng thứ 1, thứ 2: hỗ trợ nhiều Web Browser, nhiều ngôn ngữ thì tham khảo hình 1: Hình ảnh khi thực hiện test.

**     Hình 1 Hình ảnh thực hiện test của Selenium WebDriver**

【1】Hỗ trợ  nhiều ngôn ngữ :Java, C#, Python, Ruby

Khi thực hiện test sử dụng Selenium WebDriver, có thể control Web Browser từ test program bằng cách sử dụng API của từng Web Browser mà được gọi là 「driver」- được cung cấp bởi Selenium WebDriver project.

Selenium WebDriver đang hỗ trợ 4 ngôn ngữ Java, C#, Python, Ruby như là các ngôn ngữ của test program. Do đó, có thể sử dụng ngôn ngữ mà người dùng dễ code để tạo test program.

【2】Hỗ trợ nhiều Web Browser bao gồm iPhone/Android

Ngoài ra, sẽ thay đổi driver sử dụng cho phù hợp với Web Browser đối tượng test, rồi chạy chương trình test. Hiện tại, Web Browser đang hỗ trợ là Chrome, Firefox, Internet Explorer, Opera, Web Browser tiêu chuẩn của Android, 「Safari」-Web Browser tiêu chuẩn của iPhone.

Ở hình 1, đang vẽ cả mũi tên truyền server, control Web Browser. Cái này để truyền server giữa driver và Web Browser, thực hiện control của Web Browser trong trường hợp sau.

  • Trường hợp Web Browser đối tượng control không cùng một PC với test program
  • Trường hợp sử dụng tool 「Selenium-Grid」-thực hiện phân nhánh song song test case
  • Trường hợp code test program bằng ngôn ngữ lập trình khác Java, và thực hiện test sử dụng HtmlUnit Driver (driver thực hiện test Web Browser, không sử dụng GUI)

【3】Tính rõ ràng của design/Coding

Liên quan đến đặc trưng thứ 3: Dễ hiểu design, dễ dàng code thì tham khảo hình 2: Mối liên quan kế thừa giữa class cha và các driver.

**   Hình 2 Hình ảnh mối liên quan của từng Web Browser với WebDriver**

Xem mối quan hệ kế thừa thì chúng ta sẽ hiểu là thực hiện code WebDriver , đang được design để có thể sử dụng API chung, ngoại trừ trường hợp đặc biệt API khác nhau ở từng Web Browser.

Tất nhiên, cũng có chỗ phải thực hiện code xử lý vốn có đặc trưng của Web Browser nhưng nếu nhìn từ tổng thể thì những chỗ như thế không nhiều. Có thể nói cái này có ý nghĩa vô cùng đối với project cần hỗ trợ nhiều Web Browser.

Chuẩn bị để sử dụng Selenium WebDriver

Tôi đã nói về đặc trưng của Selenium WebDriver. Giờ tôi sẽ giới thiệu cách code của Selenium WebDriver sử dụng sample application.

Nhưng trước hết tôi sẽ giải thích về việc chuẩn bị và môi trường tiền đề trước khi giới thiệu coding sử dụng sample.

Cài Selenium WebDriver

Đầu tiên, download Selenium WebDriver từ link Download của ngôn ngữ đối tượng sẽ thực hiện chương trình test có trong mục Selenium Client Drivers」 của Download page.

Trường hợp thực hiện test trên Chrome thì cũng cần cài riêng ChromeWebDriver. Cách lấy thì download file phù hợp với môi trường OS của bản thân từ「Downloads - chromedriver - WebDriver for Google Chrome - Google Project Hosting」.

Setting cho ChromeWebDriver thì làm theo giải thích「ChromeDriver - selenium - Information about the Chrome Driver - Browser automation framework - Google Project Hosting」.

Khái quát môi trường tiền đề

Dưới đây, giả sử đang thực hiện trong môi trường sau (Bảng 1) để giải thích sample.

Category Software Version
OS Windows 7 Professional 64bit
Java Java SE 6 Update 32
Web/Application server Tomcat 7.0.27
IDE Eclipse 3.7.2
Eclipse plugin sysdeo tomcat plugin 3.3.0
Web Browser Firefox 13.0
Chrome 19.0.1084.56m
Internet Explorer(Bản 64bit) 9.0.8112.16421
Selenium WebDriver (Dùng cho Java) 2.21.0

Bảng1 Môi trường tiền đề

Ở trang tiếp theo, tôi sẽ giải thích đơn giản về cách viết chương trình test của Selenium WebDriver.

Giải thích khái quát cách coding Selenium WebDriver

Chương trình sử dụng Selenium WebDriver đang thao tác với Web Browser, sử dụng API của WebDriver như đã giải thích ở trên.

Ví dụ, code sample sau, sử dụng WebDriver dùng cho Firefox,  thực hiện xử lý mở, đóng Web site dùng để test. Sample code thì đang sử dụng Java.

Sample code 1 EmployeeManagerOpen

package open;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

public class EmployeeManagerOpen {

public static void main(String[] args) {

WebDriver driver = new FirefoxDriver();//…【1】

driver.get("http://localhost:8080/EmployeeManager/index.jsp");//…【2】

driver.quit();//…【3】

}

}

Trước hết, nếu thực hiện【1】trong sample code 1 thì có thể confirm khởi động Firefox như hình 3.

**                    Hình 3 FirefoxWeb Browser đã khởi động bằng Firefox Driver**

Tiếp tục, nếu code【2】 được chạy thì load data của URL đối số bằng Web Browser đã khởi động ở 1-? như hình 4.

**                    Hình 4 Màn hình List nhân viên đã được load bằng Firefox Driver**

Ngoài ra, có thể confirm việc close FirefoxWeb Browser đã khởi động nếu【3】 được run.

Như vậy, WebDriver có thể thực hiện một chuỗi flow như sau: Khởi động Web Browser ~(Xử lý riêng biệt cho từng Web Browser) ~Close Web Browser. Ở sample code 1 đang viết từ method main nhưng cũng có thể sử dụng Junit rồi viết như sample code 2 bên dưới.

Sample code 2 EmployeeManagerOpenTest

package open;

import org.junit.After;

import org.junit.Before;import org.junit.Test;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

public class EmployeeManagerOpenTest {

private  WebDriver driver;

@Before

public void beforeTest() {

driver = new FirefoxDriver();

}

@Test

public void open() {

driver.get("http://localhost:8081/EmployeeManager/index.jsp");

}

@After

public void afterTest() {

driver.quit();    }}

Ngoài ra, ở sample code 1, 2 đang chỉ sử dụng API(get() method) mở màn hình nhưng ở org.openqa.selenium.WebDriver cũng đang chuẩn bị sẵn mấy API khác để dùng cho thao tác Web Browser (Refer Bảng 2).

Bảng 2 Khái quát WebDriver API của Java

Giá trị trả về Method Khái quát xử lý
void close() Close cửa sổ Web Browser đang handle hiện tại
org.openqa.selenium.WebElement findElement(By by) Tìm kiếm WebElement bằng phương thức đối số trong page Web Browser hiện tại rồi trả về giá trị đã get đầu tiên
java.util.List findElements(By by) Tìm kiếm WebElement bằng phương thức đối số trong page Web Browser hiện tại rồi trả về tất cả những giá trị đã get được vào List
void get(String url) Load URL đã được chỉ định bằng đối số
java.lang.String getCurrentUrl() Get string hiển thị URL đang hiển thị trên page Web Browser hiện tại
java.lang.String getPageSource() Get source của page đã load cuối cùng
java.lang.String getTitle() Get string hiển thị URL đang hiển thị trên page Browser hiện tại
java.lang.String getWindowHandle() Hiển thị string để hiển thị cửa sổ Web Browser hiện tại (Sử dụng string này để chỉ định cửa sổ di chuyển đến trong trường hợp đang mở nhiều cửa sổ chẳng hạn)
java.util.Set getWindowHandles() Get string hiển thị tất cả cửa sổ Web Browser đang mở hiện tại
org.openqa.selenium.WebDriver.Options manage() Get option interface
org.openqa.selenium.WebDriver.Navigation navigate() Access đến thông tin lịch sử của Web Browser
void quit() Close tất cả cửa sổ Web Browser
org.openqa.selenium.WebDriver.TargetLocator switchTo() Get interface dùng để di chuyển đối tượng quản lý của WebDriver đến frame khác hoặc đến cửa sổ khác.

Ở bảng này chỉ mô tả khái quát nhất về WebDriver trong Java. Thông tin chi tiết thì tham khảo tài liệu API các ngôn ngữ của Selenium WebDriver nhé.

Phần 2 sẽ nói về sample app và testcase

Phần này tôi đã giải thích khái quát môi trường tiền đề và cách code để có thể chạy sample. Phần sau tôi sẽ giải thích về sample application và testcase.

Nguồn: http://www.atmarkit.co.jp/ait/articles/1210/05/news104.html