Browser
Duy Văn | 26/03/2025
Như ở bài viết trước, chúng ta đã viết thử một test case sử dụng Selenium để tự động hoá, sau đó assert với JUnit. Nhưng khả năng là bạn sẽ không chạy được gì mà luôn gặp lỗi, là do bạn chưa hề cài driver cho trình duyệt, ở bài viết này mình sẽ viết về cách cài WebDriver cho từng dòng trình duyệt
Chrome
Đầu tiên, chúng ta cần lưu ý:
- Chrome sẽ có các phiên bản trình duyệt cùng executable tương ứng
- ChromeDriver sẽ không tự update, ngược lại thì trình duyệt mà bạn đang sử dụng có thể sẽ tự update
- Để máy tính nhận ra ChromeDriver thì phải đưa vào biến môi trường
Với vấn đề đầu tiên, kinh nghiệm của mình đấy là chúng ta nên đóng gói toàn bộ các tài nguyên trình duyệt trong project luôn, vì thực tế là đang có 2 chiều hướng:
- Chiều hướng thứ nhất: Team QA phát triển bộ scripts Selenium, từng cá nhân khi pull về tự cài đặt driver, tự cài đặt trình duyệt rồi chạy
- Chiều hướng thứ hai: Team QA phát triển bộ scripts Selenium và cũng đóng gói luôn driver và bộ cài trình duyệt (hoặc đã giải nén sẵn)
Mình gợi ý nên đi theo hướng thứ hai, tuy nhiên một cái là nó sẽ làm repo nặng lên rất nhiều, nhưng cũng có vẫn có cách tối ưu, đó là chúng ta sẽ để driver và file zip trình duyệt vào proj, sau đó khi pull về và sử dụng, giải nén trình duyệt ra là được. Sau đó chúng ta triển khai .gitignore và thêm thư mục trình duyệt giải nén vào đấy. Và cái này có thể áp dụng cho tất cả các trình duyệt (trên Windows)
Đầu tiên, chúng ta sẽ lên đây để tải cả ChromeDriver và Chrome Browser,

Tải 2 mục trên này, tuỳ theo phiên bản chrome mới nhất
Sau khi đã giải nén, chúng ta sẽ thêm cả 2 vào path, hình dưới mình ví dụ với bộ chrome và chromedriver mình đã cài ở ngoài dùng trên máy cá nhân

Environment Variable
Và thế là xong,check nhẹ nhàng với chromedriver --version
C:\Users\Duy Van>chromedriver --version
ChromeDriver 130.0.6723.93 (dbcf0550c05ee0bd99b0349268818840f4b48136-refs/branch-heads/6723@{#1519})
Với chrome thì nhập chrome vào commandline, nếu ổn thì một cửa sổ chrome sẽ mở ra
Firefox
Với firefox, chúng ta làm tương tự như chrome, tuy nhiên với firefox thì chúng ta cần là geckodriver và một bản cài của firefox
Phiên bản mới nhất của firefox đang là 0.36.0, tải xuống tại đây. Còn trình duyệt Firefox, chúng ta sẽ dùng Firefox Nightly tại đây. Sau khi cài đặt xong thì đẩy về một chỗ, có thể là ngay trong projecg hoặc đâu đấy dễ theo dõi, ví dụ ở dưới mình để ngoài project vì dùng luôn cho máy của mình

Environment Variable
Sau đó để kiểm tra thì có thể gõ cmd geckodriver --version
C:\Users\Duy Van>geckodriver --version
geckodriver 0.36.0 (a3d508507022 2025-02-24 15:57 +0000)
The source code of this program is available from
testing/geckodriver in https://hg.mozilla.org/mozilla-central.
This program is subject to the terms of the Mozilla Public License 2.0.
You can obtain a copy of the license at https://mozilla.org/MPL/2.0/.
Với firefox thì khi gõ firefox vào commandline, nếu ổn thì một cửa sổ firefox sẽ mở ra
Edge
Với Edge thì bản chất nó là chromium, nên chúng ta sẽ cài msedgedriver và Edge Browser tương tự như cách cài chrome
Safari
Safari thì là trình duyệt trên máy Mac, chúng ta chạy test sẽ là trên máy Mac nên một số thứ sẽ khác so với windows
Đầu tiên, chúng ta cần cài Safari Technology Preview tại đây. Sau khi cài xong, chúng ta sẽ cài SafariDriver tại đây. Trên trang web cũng có ví dụ luôn, mình sẽ không nói quá nhiều do mình tập trung làm việc ở phía Windows
Practice
Như đã nói ở trước, khi chúng ta ship chrome và chromedriver cùng với dự án vào trong repo, thì khi pull về, để tránh việc phải add vào path thì chúng ta có thể để luôn trong bộ test script
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver.exe");
Cho trình duyệt chrome thì
System.setProperty("chrome", "path/to/chrome.exe");
Tương tự với các trình duyệt khác