Bài 2: Login automation using Selenium Webdriver

QA/QC Jul 05, 2021

Bước 1: Tạo project

Mở eclipse chọn File => New => Project => Gradle project => Next => Next => Nhập tên project => Finish. Kết quả hiển thị như sau:

Bước 2: Thêm các thư viện cần thiết

  1. Mở file build.gradle thêm đoạn code sau:(Lưu ý xóa dòng code đang có trước khi thêm đoạn dưới đây để tránh duplicate)

plugins {

// Apply the java-library plugin to add support for Java Library

id 'java-library'

}

repositories {

// Use jcenter for resolving dependencies.

// You can declare any Maven/Ivy/file repository here.

jcenter()

}

dependencies {

// This dependency is exported to consumers, that is to say found on their compile classpath.

api 'org.apache.commons:commons-math3:3.6.1'

// This dependency is used internally, and not exposed to consumers on their own compile classpath.

implementation 'com.google.guava:guava:28.2-jre'

// https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java

implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.13.0'

// https://mvnrepository.com/artifact/org.testng/testng

implementation group: 'org.testng', name: 'testng', version: '6.13'

}

test{

useTestNG(){

}

}

  1. Nhấn save file Build.gradle
  2. Chuột phải vào build.gradle => Gradle => Refresh Gradle Project. Thư viện được import sẽ hiển thị như hình

Bước 3: Tạo class utilities

*Mục đích: Tạo ra một class Links chứa tất cả URL ở các trang sẽ thực hiện test

* Các bước thực hiện:

1. Tạo Package utilities: Chuột phải vào folder src/main/java => New => Package => Nhập tên Package là utilities => Finish

2. Tạo class Links: Chuột phải vào Package utilities => New => Class => Nhập tên class là Links => Finish

3. Nhập đoạn code sau:

package utilities;

public class Links {

public static final String Url_login = "https://github.com/login";

}

Bước 4: Tạo class Based Test

* Mục đích: Tạo class Based Test để xử lý duplicate code ở các class khác nhau

*Các bước thực hiện:

1. Tạo Package base: Chuột phải vào folder src/main/java => New => Package => Nhập tên Package là base => Finish

2. Tạo class BaseTest: Chuột phải vào Package base => New => Class => Nhập tên class là BaseTest => Finish

3. Nhập đoạn code sau:

package base;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import org.testng.annotations.AfterMethod;

import org.testng.annotations.BeforeMethod;

import utilities.Links;

public class BaseTest {

protected WebDriver driver;

@BeforeMethod

public void setUp() {

//Chrome

System.setProperty("webdriver.chrome.driver", "C://servers/chromedriver.exe");/* Thay đổi địa chỉ đúng với thư mục chứa file chromedriver.exe trong máy của bạn và lưu.Ý tải file chromedriver.exe phải nhỏ hơn hoặc bằng với verison Chrome hiện tại trong máy của bạn*/

driver = new ChromeDriver();

driver.manage().window().maximize();

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

driver.get(Links.Url_login);

}

@AfterMethod

public void tearDown() {

//Wait cho page được render thành công sau 1s, Nếu sau 1s vẫn chưa xong thì sẽ throw ra exception

driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);

driver.quit();

}

}

Giải thích:

1. Import thư viện cần thiết

2. protected WebDriver driver: khai báo biến driver (protected dùng trong mối quan hệ kế thừa, class nào mà kế thừa từ BaseTest sẽ sử dụng được  biến driver)

3.@BeforeMethod và @AfterMethod: đây là các annotation trong TestNG

4. System.setProperty("webdriver.chrome.driver","C://servers/chromedriver.exe"): thư mục chứa file chromedriver.exe

5. driver = new ChromeDriver(); khởi tạo WebDriver (ở đây mình test với trình   duyệt Chrome .‘Nếu test với trình duyệt Firefox thì new FirefoxDriver()’ )

6. driver.manage().window().maximize(); Phóng to cửa sổ trình duyệt

7. driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); Câu lệnh này có nghĩa là nó sẽ đợi trong một khoảng thời gian nhất định (30s) trước khi quăng ra lỗi “NoSuchElementExceptions” rằng không thể tìm thấy phần tử trên page

8. driver.get(Links.Url_login); Mở URL của trang Login(Url_login là biến được tạo trong class Links của Package utilities)

9. driver.quit(); tắt toàn bộ Webdriver hiện thời có nghĩa là toàn bộ trình duyệt sẽ được đóng (khác với driver. close() là nó sẽ chỉ đóng trình duyệt bạn đang sử dụng)

Bước 5: Tạo Package của dự án

*Mục đích:

* Các bước thực hiện:

  1. Tạo Package photoruction: Chuột phải vào folder src/main/java => New => Package => Nhập tên Package là photoruction=> Finish
  2. Tạo class Login: Chuột phải vào Package photoruction=> New => Class => Nhập tên class là Login=> Finish
  3. Nhập đoạn code như sau:

package photoruction;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.support.FindBy;

import org.openqa.selenium.support.PageFactory;

public class Login {

@FindBy(xpath = "//input[@id='login_field']")

WebElement eleEmail;

@FindBy(xpath = "//input[@id='password']")

WebElement elePass;

@FindBy(xpath = "//input[@type='submit']")

WebElement eleLoginbtn;

WebDriver driver;

public Login(WebDriver driver) {

this.driver = driver;

PageFactory.initElements(driver, this);

}

public void login(String userName, String password) {

eleEmail.sendKeys(userName);

elePass.sendKeys(password);

eleLoginbtn.click();

}

}

Giải thích:

  1. Thêm các thư viện cần thiết

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.support.FindBy;

import org.openqa.selenium.support.PageFactory;

  1. @FindBy: có thể tìm hiểu với từ khóa Page Factory trong POM

@FindBy(xpath = "//input[@id='user_email']"): Nếu Element đó được xác định bằng name, css, xpath… thì chỉ cần thay tương ứng vào chỗ “xpath” là được

WebElement eleEmail; WebElement + tên do bạn tự đặt (nên đặt tên có nghĩa và theo xpath)

  1. WebDriver driver;
  2. Hàm khởi tạo (constructor) truyền vào biến driver

public Login(WebDriver driver) {

this.driver = driver;

PageFactory.initElements(driver, this);

}

  1. Mình tạo 1 function login có 2 tham số đầu vào là userName, password

public void login(String userName, String password) {

eleEmail.sendKeys(userName);

elePass.sendKeys(password);

eleLoginbtn.click();

}

Đối với WebElement type là input thì thực hiện sendKey (tương ứng như là gửi    dữ liệu)

Đối với WebElement type là button thì click() (sự kiện click)

Bước 6: Tạo một Package chứa script

*Mục đích:

* Các bước thực hiện:

  1. Tạo Package photoruction: Chuột phải vào folder src/test/java => New => Package => Nhập tên Package là photoruction=> Finish
  2. Tạo class LoginTest: Chuột phải vào Package photoruction=> New => Class => Nhập tên class là LoginTest=> Finish
  3. Nhập đoạn code sau:

package photoruction;

import org.testng.annotations.Test;

import base.BaseTest;

public class LoginTest extends BaseTest {

Login lg;

@Test

public void loginFail(){

/* Khởi tạo object */

lg = new Login(driver);

// Nhập giá trị

String userName = "";

String password = "";

lg.login(userName, password);

}

}

Giải thích:

  1. Thêm các thư viện cần thiết

import org.testng.annotations.Test;

import base.BaseTest;

**Mẹo: Nhấn tổ hợp phím Ctrl + Shift + O để thêm các thư viện còn thiếu

  1. public class LoginTest extends BaseTest : Class LoginTest sẽ kế thừa class BaseTest bằng keyword là extends
  2. Login lg; Đặt tên biến
  3. @Test: đây là một annotation của TestNG nếu không có annotation này thì sẽ không thực hiện run test được
  4. Cả đoạn này là thực hiện cho case test Login với trường hợp không nhập userName và password

public void loginFail(){

/* Khởi tạo object */

lg = new Login(driver);

// Nhập giá trị

String userName = "";

String password = "";

lg.login(userName, password);

}

Giải thích:

  • public void loginFail: function LoginFail()
  • lg = new Login(driver); khởi tạo đối tượng Login (truyền vào driver, ‘driver ở đây đã được khởi tạo bên class BaseTest’)
  • String userName = ""; Set giá trị cho trường userName ở đây test trường hợp không nhập
  • String password = "";Set giá trị cho trường password ở đây test trường hợp không nhập
  • lg.login(userName, password); Thực hiện gọi function login(mình đã viết sẵn trong class Login bên trên)

Bước 7: Thực hiện run Test

  1. Chuột phải vào build.gradle
  2. Chọn Run As => Run Configurations
  3. Chuột phải vào  Gradle Test => New Configuration
  4. Nhấn Add để thêm file cần test, bạn nhập như sau: photoruction1.LoginTest
  5. Trong working Directory: Chọn đến tên của Gradle Project đã tạo ở bước 1
  6. Chọn Apply  => Run

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.