Setup

Duy Văn | 26/03/2025


Trong loạt bài viết về Selenium, mình sẽ sử dụng ngôn ngữ là Java cùng với Maven để quản lý dependencies, đồng thời sử dụng VSCode làm code editor

Java

Để cài đặt Java, thì chúng ta sẽ quan tâm đến 2 thứ chính:

  • JDK (Java Development Kit): Đây là bộ công cụ để phát triển ứng dụng Java, bao gồm JRE (Java Runtime Environment) và một số công cụ khác như là javac, java, javadoc, jdb, …
  • JRE (Java Runtime Environment): Đây là môi trường chạy ứng dụng Java, nó bao gồm JVM (Java Virtual Machine) và các thư viện cần thiết để chạy ứng dụng Java

Khi chúng ta tải JDK từ trang chủ của Oracle tại đây, thì JDK sẽ bao gồm JRE, sau khi cài đặt xong, chúng ta cần thiết lập biến môi trường cho JDK, để kiểm tra quá trình cài đặt đã xong hay chưa thì mở cmd và gõ java --version

C:\Users\Duy Van>java --version
java 22 2024-03-19
Java(TM) SE Runtime Environment (build 22+36-2370)
Java HotSpot(TM) 64-Bit Server VM (build 22+36-2370, mixed mode, sharing)

Maven

Maven - hay Apache Maven là một công cụ quản lý dependencies của project Java, để cài đặt Maven, chúng ta cần tải Maven từ trang chủ của Apache Maven tại đây, sau đó giải nén và thêm biến môi trường cho Maven, để kiểm tra quá trình cài đặt đã xong hay chưa thì mở cmd và gõ mvn --version

C:\Users\Duy Van>mvn --version
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: C:\Program Files\apache-maven-3.9.9
Java version: 22, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-22
Default locale: en_US, platform encoding: UTF-8
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

VSCode

Tại VSCode (mặc định là bạn đã cài đặt VSCode), chúng ta cần cài đặt các extension sau:

  • Language Support for Java(TM) by Red Hat v1.40.0 hoặc cao hơn
  • Maven for Java, Debugger for Java,… thường sẽ được cài từ đầu dưới tên chung Java Extension Pack
  • Test Runner for Java sẽ cover được cả JUnit và TestNG

Chúng ta sẽ khởi tạo một project Maven mới, sử dụng tổ hợp phím Ctrl + Shift + P và gõ Java: Create Java Project, sau đó chọn Maven, rồi No Archetype, nhập tên project và chọn thư mục lưu project

pom.xml

Đầu tiên trên pom.xml chúng ta cần define

<properties>
        <maven.compiler.source>22</maven.compiler.source>
        <maven.compiler.target>22</maven.compiler.target>
</properties>

Bước tiếp theo để cài đặt, chúng ta cần thêm dependencies vào file pom.xml, dưới đây là một số dependencies cần thiết cho Selenium:

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>7.4.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Trên là TestNG, hoặc nếu dùng JUnit thì

<dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.28.1</version> 
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-devtools-v130</artifactId>
            <version>4.28.1</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

File pom.xml sẽ là cơ sở để Maven kéo Selenium Java về cùng vớ JUnit, ngay khi chúng ta lưu file pom.xml, Maven sẽ tự động kéo dependencies về vào thư mục Maven của project

Maven tải các dependencies về

Sau đó chúng ta có thể viết thử 1 test case đơn giản

Test Case đơn giản

Chúng ta sẽ tạo một file Java, trong file Java đó là class main thực hiện test case

  • Class cần có cùng tên với file java
  • Cần đầy đủ dependencies

Vậy nên với 1 test case kiểm tra title của trang Google

  • File có tên GoogleTitleTest.java, Class tên GoogleTitleTest
  • Bên trong sẽ có method testGoogleTitle, nó sẽ đánh dấu bằng annotation @Test của JUnit hoặc TestNG
  • Cơ chế tự động hoá được thực hiện bởi Selenium
  • Assert được thực hiện bởi JUnit hoặc TestNG
 
public class GoogleTitleTest {

    @Test
    public void testGoogleHomePageTitle() {
        WebDriver driver = new ChromeDriver();      
        driver.get("https://www.google.com");      

        String expectedTitle = "Google";
        String actualTitle = driver.getTitle();
        assertEquals("Title should be Google", expectedTitle, actualTitle);

        driver.quit();  
    }
}

Đồng thời chúng ta sẽ đưa đủ dependencies trên đầu


import org.junit.Test;
import static org.junit.Assert.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

Sau đó để chạy test, chúng ta có thể chạy từ terminal bằng cách gõ mvn test hoặc sử dụng GUI của VSCode

PS C:\Users\Duy Van\Downloads\Test\demo> mvn test   
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------< com.test:demo >----------------------------
[INFO] Building demo 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- resources:3.3.1:resources (default-resources) @ demo ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource from src\main\resources to target\classes
[INFO]
[INFO] --- compiler:3.13.0:compile (default-compile) @ demo ---
[INFO] Nothing to compile - all classes are up to date.
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ demo ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\Users\Duy Van\Downloads\Test\demo\src\test\resources
[INFO]
[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ demo ---
[INFO] Recompiling the module because of changed source code.
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file with javac [debug target 22] to target\test-classes
[INFO] 
[INFO] --- surefire:3.2.5:test (default-test) @ demo ---
[INFO] Using auto detected provider org.apache.maven.surefire.junit4.JUnit4Provider
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running GoogleTitleTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 12.37 s -- in GoogleTitleTest
[INFO] 
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  19.497 s
[INFO] Finished at: 2025-03-26T10:20:15+07:00
[INFO] ------------------------------------------------------------------------