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(); } }
Nội dung bài viết
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() và 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ĩ.
- 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.
- 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?
- 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. - 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. 😀
[…] ← Previous Next → […]
[…] ← Previous […]
[…] 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. […]
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 ạ :'(
Em đã add thư viện vào trong project chưa? Chắc là em chưa add nên eclipse mới không gợi ý được.
Em đọc mục 5 ở bài này: https://giangtester.com/bai-2-cai-dat-moi-truong-can-thiet-cho-selenium-webdriver/
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 ạ ?
Mình có vài gợi ý sau:
– Mình ko biết bạn cài đặt kiểu gì, mình hi vọng bạn tạo project bằng maven hoặc gradle. Nếu dùng maven hoặc gradle thì bạn chỉ cần bỏ phần dependency Junit ra là được.
– Còn nếu bạn cài đặt kiểu cài từ eclipse thì bạn vào phần setting builpath của Eclipse, remove phần junit và add lại Testng.
Right click vào tên project >> Build Path >> Configure Build Path >> Add Library
– Với lại phải dùng đúng annotation của TestNG
– Ko dùng Ctrl + Shift + O nữa, chuyển qua fix import từ vị trí báo error.
em sửa được rồi anh, thank anh suppor 🙂
e bị thiếu cái set property thành ra bị lỗi.
Great! keep going.
anh ơi em viết testscript bằng visual studio thì nên dùng project nào ạ
Đừng làm mọi thứ trở nên phức tạp như vậy. Không ai cấm bạn switch qua IDE chuyên support cho Java đâu. Intellij IDEA là 1 sự lựa chọn tốt. Dùng nó quen bạn sẽ thấy nó tốt hơn cái editor VS.
Nếu bạn vẫn muốn sử dụng VS thì nên chuyển qua học JS framework, sẽ hiệu quả hơn.
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 ạ
Nó show lỗi gì em?
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
Em có thể trình bày rõ ràng vấn đề vào skype cho anh ko? Em nói ngắn gọn trên comment anh cũng không hiểu rõ vấn đề nữa.
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.
Thank you! ^^