CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.4. BỘ CÔNG CỤ SELENIUM – WEBDRIVER TRONG VIỆC KIỂM THỬ GIAO DIỆN ỨNG DỤNG WEB
Selenium là một tập hợp mạnh mẽ các công cụ hỗ trợ phát triển nhanh chóng của các thử nghiệm tự động hóa cho các ứng dụng Web [6]. Selenium cung cấp một tập phong phú các thử nghiệm chức năng đặc biệt hướng đến các nhu cầu của các
thử nghiệm trong một ứng dụng Web. Các hoạt động này là rất linh hoạt, cho phép nhiều tùy chọn cho vị trí các thành phần giao diện và so sánh kết quả thử nghiệm dự kiến sẽ chống lại hành vi ứng dụng thực tế.
2.4.1. Tổng quan về Selenium
Selenium ra đời năm 2004 bởi Jason Huggin. Ông đã phát triển một thƣ viện Javascript điều khiển tương tác với các trang, cho phép chạy lại kiểm thử đối với nhiều trang. Cuối cùng thƣ viện này đã trở thành Selenium – Core nền tảng của các chức năng Selenium Remote Control (RC) và Selenium IDE. Selenium RC là sự đột phá vì không có sản phẩm nào cho phép bạn kiểm soát một trình duyệt từ một ngôn ngữ lập trình.
Năm 2006, Stimon Stewart là một kỹ sƣ tại Google bắt đầu làm việc với một dự án có tên là Webdriver. Ông ấy muốn có một công cụ kiểm tra trực tiếp với trình duyệt bằng cách sử dụng phương pháp tự nhiên cho trình duyệt và hệ điều hành do đó tránh đƣợc hạn chế của Javascript Sandbox.
Năm 2008 đánh dấu sự kết hợp của Selenium và Webdriver. Selenium có cộng đồng lớn và hỗ trợ thương mại nhưng Web Driver là một công cụ của tương lai. Việc kết hợp hai công cụ này cung cấp tập hợp các tính năng chung cho nhiều người sử dụng và lợi ích trong tự động hóa kiểm thử.
2.4.2. Selenium-RC (Remote Control)
Selenium-RC cho phép các nhà phát triển tự động hóa kiểm thử sử dụng một ngôn ngữ lập trình, nó cho tính linh hoạt tối đa và mở rộng trong việc phát triển lôgic thử nghiệm. Ví dụ, nếu trình ứng dụng trả về một tập kết quả của việc kiểm tra, và nếu chương trình thử nghiệm tự động cần chạy thử nghiệm trên mỗi phần tử trong tập hợp kết quả, hỗ trợ lặp đi lặp lại. Các ngôn ngữ lập trình có thể đƣợc sử dụng để chuyển đổi thông qua việc tập hợp kết quả, kêu gọi Selenium lệnh chạy thử nghiệm trên mỗi mục.
Selenium-RC cung cấp một API (Application Programming Interface) và thƣ viện cho mỗi ngôn ngữ đƣợc hỗ trợ: HTML, Java, C #, Perl, PHP, Python, và Ruby. Khả năng sử dụng Selenium-RC với một ngôn ngữ lập trình bậc cao để phát triển các trường hợp thử nghiệm cũng cho phép thử nghiệm tự động được tích hợp với một dự án xây dựng môi trường tự động.
2.4.3. Selenium 2 (Selenium – Webdriver)
Selenium 2 là hướng tương lai của dự án nó bổ sung mới nhất của công cụ Selenium. Công cụ này cung cấp những tính năng tuyệt vời, bao gồm API định hướng gắn kết hơn và giải quyết các vấn đề tồn tại của các phiên bản trước. Nó hỗ trợ các API Webdriver, cùng với công nghệ Selenium 1 API WebDriver cho sự linh hoạt tối đa trong việc kiểm thử. Ngoài ra, Selenium 2 vẫn chạy Selenium RC 1 của giao diện để tương thích ngược.
2.4.4. Một số Selenium-Webdriver API
2.4.4.1. Một thể hiện của browser driver
Một browser driver (ví dụ nhƣ FirefoxDriver) là một đối tƣợng, đối tƣợng này được coi như đại diện một trình duyệt trong chương trình.
WebDriver ffdriver = new FirefoxDriver();
Từ đây, đối tượng ffdriver sẽ có những phương thức từ đó điểu khiển trình duyệt ở đây là Firefox. Sau khi thực hiện lệnh này, trình duyệt sẽ đƣợc khởi động.
2.4.4.2. Truy cập một trang Web
Điều đầu tiên chúng ta muốn làm với một Webdriver đó là truy cập vào một trang Web, thông thường điều này sẽ được thực hiện qua phương thức:
driver.get("http://www.google.com");
Khi đó trình duyệt sẽ đƣợc tự động truy cập vào địa chỉ đã truyền vào.
2.4.4.3. Định vị các thành phần trên giao diện Web
Tất cả các thành phần trên giao diện Web đều có thể định vị bằng nhiều cách mà Selenium hỗ trợ. Mỗi một thành phần sẽ đƣợc ánh xạ qua một thể hiện của WebElement.
Webdriver sử dụng một phương thức findElement mà tham số của phương thức này là định nghĩa vị trí của element trên trang Web. Có rất nhiều cách để định nghĩa vị trí của một element trên Website trong đó có một số cách phổ biến sau:
Theo ID:
// <div id="coolestWidgetEvah">...</div>
WebElement element = driver.findElement(By.id("id_value"));
Theo Class Name:
// <div class="cheese"><span>Cheddar</span></div>
// <div class="cheese"><span>Gouda</span></div>
List<WebElement> cheeses =
driver.findElements(By.className("cheese"));
Theo Tag Name:
// <iframe src="..."></iframe>
WebElement frame = driver.findElement(By.tagName("iframe"));
Theo Name:
// <input name="cheese" type="text"/>
WebElement cheese = driver.findElement(By.name("cheese"));
Theo Link Text
// <a href="http://www.google.com/search?q=cheese">cheese</a>>
WebElement cheese = driver.findElement(By.linkText("cheese"));
2.4.4.4. Điền các giá trị vào trang Web qua Selenium-Webdriver
Sau khi định vị đƣợc các thành phần trên một Website và ánh xạ chúng với các WebElement, chúng ta có thể thay đổi giá trị hoặc thực hiện các thao tác chuột cũng như các thao tác gõ chữ lên WebElement đó thông qua các phương thức.
// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for element.sendKeys("Cheese!");
// Now submit the form.
element.submit();
2.4.4.5. Di chuyển giữa các cửa sổ và frame
Một số ứng dụng Web có thể chứa nhiều cửa sổ hoặc frame, Webdriver cung cấp phương thức giúp di chuyển giữa các cửa sổ thông qua tên:
driver.switchTo().window("windowName");
driver.switchTo().frame("frameName");
2.4.4.6. Điều hướng trình duyệt
Sau khi trình duyệt truy cập một trang Web và thực hiện một số sự kiện chuyển sang những trang mới, khi đó chúng ta có thể sử dụng phương thức
navigate() để quay lại một trang trước đó hoặc tới một trang theo tên trình duyệt đã truy cập trước đó.
driver.navigate().to("http://www.example.com");
driver.navigate().forward();
driver.navigate().back();
2.4.4.7. Cookies
Webdriver còn cho phép thay đổi cả cookie khi truy cập các trang Web // set the cookie. This one's valid for the entire domain
Cookie cookie = new Cookie("key", "value");
driver.manage().addCookie(cookie);
// You can delete cookies in 3 ways // By name
driver.manage().deleteCookieNamed("CookieName");
// By Cookie
driver.manage().deleteCookie(loadedCookie);
// Or all of them
driver.manage().deleteAllCookies();
Nhƣ vậy trên đây chúng ta đã tìm hiểu thƣ viện selenium cũng nhƣ một số Webdriver API thông dụng, chúng ta có thể sử dụng chúng để sinh ra các mã chạy tự động các ca kiểm thử đƣợc sinh ra từ quá trình sinh ca kiểm thử sẽ đƣợc trình bày ở các chương sau.