Cập nhật Driver tự động trong Selenium với WebdriverManager

Bài này Anh Tester sẽ chỉ bạn cách dùng thư viện WebdriverManager. Nó giúp mình download và quản lý binary drivers (chromedrivergeckodriver…) một cách tự động.

Giới thiệu cài đặt Browser Driver truyền thống

Trước đây khi mới học Selenium Webdriver chắc hẳn các bạn mắc 1 vấn đề mà cảm thấy khá khó chịu, đó là quản lý version của Driver đúng không.

  • Browser update liên tục nên driver cho từng browser cũng phải được update liên tục. Nếu không update cùng version là thể nào cũng lỗi ahahaha


Cách truyền thống để khởi tạo trình duyệt trong Selenium

System.setProperty("webdriver.chrome.driver", "resources\\drivers\\chromedriver.exe");

Nếu chúng ta không xác định được đường dẫn này hoặc nếu chúng ta cung cấp đường dẫn sai, thì tập lệnh sẽ tạo ra lỗi, như được hiển thị bên dưới.

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

Cái bất lợi nữa là cái file nó tải về mắc công thấy bà ahahaha. Thôi giờ làm như này...


Cài đặt WebdriverManager trong Selenium Java

WebDriverManager trong Selenium, như đã đề cập ở trên, là một lớp cho phép chúng ta tải xuống và cài đặt các tệp nhị phân trình điều khiển (banary drivers) của trình duyệt.

  • Tự động hóa việc quản lý các tệp nhị phân WebDriver.
  • Tải tệp nhị phân trình điều khiển thích hợp, nếu chưa có, nó tự down và lưu vào bộ nhớ cache cục bộ.
  • Tải xuống phiên bản mới nhất của trình duyệt nhị phân, trừ khi được chỉ định khác.
  • Loại bỏ nhu cầu lưu trữ mã nhị phân trình điều khiển cục bộ. Cũng không cần duy trì các phiên bản khác nhau của tệp trình điều khiển nhị phân cho các trình duyệt khác nhau.


Làm thế nào để khởi tạo một trình duyệt bằng cách sử dụng WebDriverManager trong Selenium?

Thay cái câu setup cũ System.setProperty() với câu mới như này

WebDriverManager.chromedriver().setup();

(Nó sẽ đặt trình duyệt Chrome để khởi tạo)

Ngoài ra thì thay chromedriver bằng các Browser khác: Firefox, Microsoft Edge, Internet Explorer, Opera, or PhantomJS.

Rồi tiếp theo xuống dòng lệnh dưới đó chỉ cần khởi tạo browser cho biến driver:

driver = new ChromeDriver();

Vậy tính ra nó chỉ cần 2 dòng duy nhất là chơi thả ga =))

WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();


Làm thế nào để thêm WebDriverManager vào một dự án Selenium?

Nếu bạn cài từ Maven thì:

<!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.5.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>2.0.9</version>
    <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.9</version>
</dependency>


Nếu bạn cài từ file Jar thì:

1. Tải xuống phiên bản mới nhất của WebDriverManager, như được đánh dấu bên dưới (hoặc bất kỳ phiên bản nào theo yêu cầu của dự án) từ đây ==> WebDriverManager


Lưu ý: cứ bản mới nhất mà chơi nhé (đừng theo version trong bài post này, kẻo bị cũ)


Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

2. Nó sẽ tải xuống một tệp zip. Bây giờ giải nén tệp jar / zip. Nó sẽ hiển thị nhiều file jar khác nhau trong thư mục, như hình dưới đây:

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

Nếu mà cái file "slf4j-api-2.0.7" bị thiếu (hoặc version chưa đúng) thì vào đây tải lại version mới nhất ==> SLF4J API

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester


Lưu ý: chọn phiên bản SLF4J mới nhất cho ngon lành nhé


Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

Và các bạn có thể thêm thằng SLF4J Simple Provider luôn đề phòng thiếu sót hoặc warning gây ngứa mắt 😄

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

Cứ bản mới nhất mà chơi nhé !!


3. Chèn tất cả các file Jar trong folder trên vào Project của mình: Click phải vào tên Project -> Build Path -> Configure Build Path in Eclipse

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

4. Triển khai code thôi chứ còn gì đâu nữa =))

Ví dụ khởi tạo Chrome như này:

import org.openqa.selenium.WebDriver;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.chrome.ChromeDriver;

import io.github.bonigarcia.wdm.WebDriverManager;

public class UseWebdriverManager {

	static WebDriver driver;

	public static void main(String[] args) throws Exception {

		WebDriverManager.chromedriver().setup();
		driver = new ChromeDriver();
		
		driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
		driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
		driver.manage().window().maximize();

		driver.navigate().to("https://anhtester.com/");

		Thread.sleep(2000);
		driver.quit();
	}
}


Mấy thằng Browser khác thì đổi tên như bên trên đã nói thôi.

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

Ừ mà nhớ đổi cái dòng khởi tạo bên dưới nhe chời: ChromeDriver(), FirefoxDriver(), EdgeDriver(),...

Rồi thôi vậy là xong.

Chạy thử thì nếu mà nó chưa có version phù hợp với Browser hiện tại thì nó sẽ download về rồi lưu vào local máy:

[main] INFO io.github.bonigarcia.wdm.WebDriverManager - Using chromedriver 92.0.4515.43 (resolved driver for Chrome 92)
[main] INFO io.github.bonigarcia.wdm.WebDriverManager - Exporting webdriver.chrome.driver as C:\Users\votha\.cache\selenium\chromedriver\win32\92.0.4515.43\chromedriver.exe
Starting ChromeDriver 92.0.4515.43 (8c61b7e2989f2990d42f859cac71319137787cce-refs/branch-heads/4515@{#306}) on port 4653
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
thg 7 28, 2021 12:49:09 SA org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C

 

Cài đặt WebdriverManager trong Selenium C#

Có thể tải xuống WebDriverManager.Net từ NuGet. Sử dụng GUI hoặc lệnh sau trong Bảng điều khiển Trình quản lý Gói:

PM> Install-Package WebDriverManager


Cách nữa là cài trực tiếp từ Nuget trong IDE. Các bước để định cấu hình WebDriverManager:

1) Khởi chạy Visual Studio, mở Project

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

2) Select "Tools" => "NuGet Package Manager"  => "Manage NuGet Packages for Solution" như bên dưới:

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

3) Nhập 'WebDriverManager' vào trường hộp Tìm kiếm của tab Trình duyệt, Nhấn phím 'Enter' trên bàn phím của bạn để tìm kiếm, nhấp vào tùy chọn 'WebDriverManager' được hiển thị trong kết quả tìm kiếm, chọn hộp kiểm Project và nhấp vào 'Install' như hình dưới:

Lưu ý: cứ bản mới nhất mà chơi nhé 

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

4) Nhấp vào nút ‘OK’ trên hộp thoại ‘Preview Changes’ được hiển thị như hình dưới:

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

5) Quan sát rằng WebDriverManager sẽ được cài đặt và sau đó chuyển sang tệp program.cs hay tệp code auto nào đó bất kỳ khi Setup môi trường như hình dưới đây:

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

6) Sau khi cài đặt xong để sử dụng WebdriverManager thì dùng lệnh sau:

new WebDrivereManager.DriverManager().SetUpDriver(new ChromeConfig());

Nó sẽ khởi tạo Chrome driver thay cho chromedriver.exe và nó tự động cập nhật version phù hợp với Google Chrome hiện tại của bạn đang dùng.


7) Di chuột trên ChromeConfig và chọn tùy chọn để nhập "using WebDriverManager.DriverConfigs.Impl;" như hình dưới:

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester8) Bây giờ, hãy tạo một đối tượng cho lớp ChromeDriver, nhập ChromeDriver như đã giải thích trong các bài viết trước rồi Lưu & nhấp vào nút "Start" để thực thi như được hiển thị bên dưới:

Cập nhật Driver tự động trong Selenium với WebdriverManager | Anh Tester

Firefox Browser code:

new WebDriverManager.DriverManager().SetUpDriver(new FirefoxConfig());

FirefoxDriver driver = new FirefoxDriver();

IE Browser Code:

 
new WebDriverManager.DriverManager().SetUpDriver(new InternetExplorerConfig());

InternetExplorerDriver driver = new InternetExplorerDriver();


Rồi. Vậy là xong.

  • Anh Tester

    Đường dẫu khó chân vẫn cần bước đi
    Đời dẫu khổ tâm vẫn cần nghĩ thấu