[Bài 8] Hoàn chỉnh test script login

Theo như bài trước mình mới có 1 testcase login thành công và bây giờ mình phải implement thêm 1 testcase login không thành công nữa. Cách dễ dàng nhất là copy method login thành công rồi sửa thông tin truyền vào. OK Lets do it.

Ta có code mới như sau:

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();
	}
	
	@Test
	public void loginWithBlankField() {
		WebDriver driver = new FirefoxDriver();
		driver.get("http://localhost/wp/wp-login.php");
		driver.findElement(By.id("user_login")).sendKeys("");
		driver.findElement(By.id("user_pass")).sendKeys("");
		driver.findElement(By.id("wp-submit")).click();
	}
}

Như bài trước đã nói, viết thế này có 1 số chỗ có vấn đề cần phải xử lý:

  • Mỗi lần run sẽ tạo ra một cái firefox, nó không chịu đóng lại khi kết thúc script.
  • Không có phần kiểm tra tự động
  • Hard code
  • Duplicate code

1. Đóng browser đơn giản bằng dòng code vào chỗ cuối cùng của 1 method.

driver.quit();

Ok cool. Problem 1 –> fixed

2. Để kiểm tra tự động, ta sẽ sử dụng những method Assert do TestNG cung cấp (mình sẽ viết 1 bài về cách sử dụng Assert sau). Và chính chúng ta phải suy nghĩ là lấy cái gì làm căn cứ để xác minh và kiểm tra xem test case này pass hay fail.

Ví dụ: sau login thành công, trang dashboard sẽ mở ra và URL không còn là /wp-login.php nữa mà là /wp-admin/. Ta có thể lấy cái này để làm điều kiện kiểm tra. Ta sẽ thêm 1 dòng code kiểm tra vào.

Code test case 1 như sau:

@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();
	Assert.assertEquals(driver.getCurrentUrl(), "http://localhost/wp/wp-admin/");
	driver.quit();
}

Tương tự, nếu login không thành công thì URL sẽ vẫn là /wp-login.php

Code test case 2 như sau:

@Test
public void loginWithBlankField() {
	WebDriver driver = new FirefoxDriver();
	driver.get("http://localhost/wp/wp-login.php");
	driver.findElement(By.id("user_login")).sendKeys("");
	driver.findElement(By.id("user_pass")).sendKeys("");
	driver.findElement(By.id("wp-submit")).click();
	Assert.assertEquals(driver.getCurrentUrl(), "http://localhost/wp/wp-login.php");
	driver.quit();
}

Problem 2 –> fixed

3. Ta thấy có khá nhiều chỗ ta hard code như URL login, URL dashboard, Id của Element. Cách xử lý hard code là cho nó thành Variable –> sử dụng chung.

Ví dụ:

String URL_login = "http://localhost/wp/wp-login.php";
String URL_dashBoard = "http://localhost/wp/wp-admin/";
String user_login = "user_login";
String user_pass = "user_pass";
String submitBtn = "wp-submit";

Problem 3 –> fixed

Code hoàn chỉnh sẽ là:

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

public class LoginTest {
	
	String URL_login = "http://localhost/wp/wp-login.php";
	String URL_dashBoard = "http://localhost/wp/wp-admin/";
	String user_login = "user_login";
	String user_pass = "user_pass";
	String submitBtn = "wp-submit";
	
	@Test
	public void loginByAdmin() {
		WebDriver driver = new FirefoxDriver();
		driver.get(URL_login);
		driver.findElement(By.id(user_login)).sendKeys("giang");
		driver.findElement(By.id(user_pass)).sendKeys("123456789");
		driver.findElement(By.id(submitBtn)).click();
		Assert.assertEquals(driver.getCurrentUrl(), URL_dashBoard);
		driver.quit();
	}
	
	@Test
	public void loginWithBlankField() {
		WebDriver driver = new FirefoxDriver();
		driver.get(URL_login);
		driver.findElement(By.id(user_login)).sendKeys("");
		driver.findElement(By.id(user_pass)).sendKeys("");
		driver.findElement(By.id(submitBtn)).click();
		Assert.assertEquals(driver.getCurrentUrl(), URL_login);
		driver.quit();
	}
}

Có vẻ như vẫn dễ dàng nhỉ, không khó lắm. Ơ mà khoan đã còn 1 Problem nữa mà, đấy mới là phần khoai nhất, duplicate code. @@ Cách xử lý thế nào nhỉ?

Đúng rồi đấy, ta phải gộp những cái gì chung nhau vào 1 chỗ, sau đó lúc nào cần thì ta chỉ cần gọi nó là được. 😀 Nhưng bài này dài rồi, đợi bài sau nhé. ^^

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

[…] ← Previous Next → […]

Huế Tô
Huế Tô
6 years ago

Em chào anh ạ!
Các bài viết của anh thật sự rất hay và hữu ích, em hy vọng anh sẽ ra bài mới thường xuyên để bọn em học hỏi ạ.
Anh ơi, anh cho em hỏi, em đã install TestNG vào Eclipse -> Restart như các bước anh đã chỉ rồi nhưng em check Window -> Preferences nhưng nó vẫn k có TestNG là tại làm sao hả anh?
Em cảm ơn anh nhìu nhìu ạ! 😀