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é. ^^
[…] ← Previous Next → […]
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 ạ! 😀
Hi em,
Cái này anh cũng ko biết, em thử add lại thêm 1 lần nữa rồi restart Eclipse xem. Nếu muốn biết có lỗi gì thì chắc anh phải xem tận mắt mới biết được.