[Bài 7] Webdriver script đơn giản đầu tiên

Các bạn học Selenium Webdriver chẳng mấy xa lạ với các kiểu viết test này, có đầy trên mạng. Mình cũng bắt đầu series hướng dẫn với script đơn giản nhưng mà thay vì hướng dẫn các bạn đi vào xử lý từng cái Element trên trang web như Alert, selectbox, iframe… thì mình sẽ hướng dẫn trực tiếp vào các testcase vào giải thích từng phần của code.

NOTE: mình sử dụng trang WordPress demo mình đã hướng dẫn build ở bài trước.

Đây là code mà các bạn tiếp cận:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;

public class LoginTest {

	@Test
	public void loginByAdmin() {
		WebDriver driver = new FirefoxDriver();
		driver.get("http://localhost/wp/wp-login.php");
		driver.findElement(By.id("user_login")).sendKeys("giang");
		driver.findElement(By.id("user_pass")).sendKeys("123456789");
		driver.findElement(By.id("wp-submit")).click();
	}
}

I. Thư viện cần thiết

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;

Khi viết code nếu IDE báo lỗi code thì có thể là do bạn add thiếu thư viện. Bạn có bấm Ctrl + Shift + O để eclipse tự động add thêm thư viện còn thiếu. Hoặc trỏ chuột vào chỗ báo lỗi ấn nút F2 để hiện thị lên các suggest fix lỗi đó, nếu thiếu thư viện thì nó sẽ gợi ý add thêm thư viện thiếu.

II. Annotation của TestNG

@Test

Nếu không có cái annotation này thì TestNG sẽ không run test (Đây là 1 lỗi thường gặp của các bạn mới học)

III. Khởi tạo driver object

WebDriver driver = new FirefoxDriver();

Do WebDriver là 1 interface nên khi khởi tạo ta phải new 1 Object của 1 class đã implement cái Interface WebDriver, trong trường hợp này là FirefoxDriver. (Nếu bạn chưa học các khái niệm về class và interface thì nên học lại)

Cái driver ở trên chỉ là đặt tên, bạn có thể đặt tên khác cũng được. ví dụ:

WebDriver instance = new FirefoxDriver();

IV. Mở URL của trang login.

driver.get("http://localhost/wp/wp-login.php");

Cái Object driver trên sử dụng được rất nhiều các method khác nhau để điều khiển cái browser. Các bạn có thể đọc lại bài này để hiểu thêm về các method của interface WebDriver.

V. Điền thông tin và click vào button submit

driver.findElement(By.id("user_login")).sendKeys("giang");
driver.findElement(By.id("user_pass")).sendKeys("123456789");
driver.findElement(By.id("wp-submit")).click();

Trong đó, sendKeys()click() là method của interface WebElement.

Okey, Run thử thôi, sau khi run bạn sẽ được nhận kết quả xanh lè từ result của TestNG.

Bạn chợt nghĩ là Test Automation có gì ghê gớm, cũng dễ ấy mà, nhưng thật sự thì có rất nhiều các vấn đề mà bạn cần phải suy nghĩ.

  1. Sau khi run cái Browser của bạn nó vẫn đang đứng im ở đó, nó không đóng lại sau khi thực hiện xong script.
  2. Trong testcase có phần expected result, và hình như trong script chưa có chỗ nào để verify lại các giá trị. Hiện tại, bạn đang ngắm nhìn script và verify bằng mắt, liệu bạn có thể verify được tiếp nếu có 10, 20, 100, 1000 test cases khác nhau?
  3. Có quá nhiều tham số đang bị fix cứng theo từng test case. ví dụ:
    URL, username, password và id của các element.
  4. Giả sử bạn có test case thứ 2: login với username sai và password sai. Bạn có copy code từ thằng method đầu tiên xuống làm 1 method mới không. Mình cá là có, vì mình đã từng như thế =)))))
    Thế nếu cái login này có 10 test cases thì sẽ có bao nhiêu dòng code bị lặp đi lặp lại, duplicate code sẽ tràn lan khắp project mất.

Sẽ còn có nhiều vấn đề nảy sinh khi bạn tiếp tục học và làm về Selenium Webdiver, hãy cứ tiếp tục nghĩ về những điều đó và đọc blog của mình, để xem mình xử lý những vấn đề đó bằng cách nào. 😀

0 0 votes
Article Rating
Subscribe
Notify of
guest
18 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback

[…] ← Previous Next → […]

trackback

[…] ← Previous […]

trackback

[…] luồng test, ta đã đi qua Login –> AddNewPost. Bây giờ, ta sẽ thêm 1 hành động mới nữa, đó là DeletePost. […]

Hương
Hương
5 years ago

hi anh,
Cảm ơn những bài viết rất hữu ích của anh ạ!
Anh có thể cho em xin toàn bộ thư viện dùng cho việc viết test script này không ạ, e có làm theo anh bảo nhưng mà eclipse không gợi ý thư viện ạ :'(

Le Van Thanh
Le Van Thanh
4 years ago

Cho mình hỏi, mình cài đặt thư viện testNG rồi, cơ mà khi nhập vô nó vẫn bị error. Thử ấn ctrl + shift + O thì nó nhảy qua cái junit. bạn biết cách sửa không ạ ?

Le Van Thanh
Le Van Thanh
4 years ago
Reply to  Giang Nguyen

em sửa được rồi anh, thank anh suppor 🙂

Le Van Thanh
Le Van Thanh
4 years ago
Reply to  Le Van Thanh

e bị thiếu cái set property thành ra bị lỗi.

Nguyễn Hữu Phú
Nguyễn Hữu Phú
4 years ago

anh ơi em viết testscript bằng visual studio thì nên dùng project nào ạ

htttthuy
htttthuy
3 years ago

Hi anh, em chạy theo đoạn code chỉ mở được link đường dẫn còn pass và user ko login theo được ạ

Cấy
Cấy
3 years ago

Anh ơi để báo failures khi thông báo ra không đúng thì viết như nào ạ?
WebElement IbNotify = driver.findElement(By.className(“swal-title));
Assert.assertEquals(IbNotify.getText(), “thông báo thất bại”);
Nó k báo failures ạ.
Mong anh giúp đỡi

Lam Thu
Lam Thu
7 months ago

Cảm ơn anh rất nhiều ạ. Nhờ có series blog của anh mà em lấp lại nhiều lỗ hổng kiến thức. Đúng là lúc trước chỉ làm theo chứ không hiểu.