Quản lý Webdriver version bằng WebdriverManager

Khi làm việc với selenium webdriver, mình luôn mắc 1 vấn đề mà mình cảm thấy khá khó chịu, đó là quản lý version của Driver:

  • 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 ko update cùng version là thể nào cũng lỗi. haizzz

Vấn đề này được giải quyết bằng WebdriverManager, 1 thư viện giúp mình download và quản lý binary drivers (chromedrivergeckodriver…)

I. Cách install WebdriverManager

Sử dụng Maven hoặc Gradle:

Maven:

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>4.4.0</version>
</dependency>

Gradle:

dependencies {
    testCompile("io.github.bonigarcia:webdrivermanager:3.8.1")
}

II. Cách sử dụng

@BeforeAll
public static void setupClass() {
    WebDriverManager.chromedriver().setup();
}

@BeforeEach
public void setupTest() {
    driver = new ChromeDriver();
}

@AfterEach
public void teardown() {
    if (driver != null) {
        driver.quit();
    }
}

Đoạn code này sẽ làm 1 số việc

  • Check browser version hiện có của máy
  • Check version của driver, nếu không biết thì nó sẽ dùng version mới nhất
  • Download binary driver nếu không tìm thấy trong folder ( ~/.m2/repository/webdriver)
  • Tạo ra biến môi trường cho Webdriver, phục vụ cho selenium.

Và sau khi sử dụng thư viện này, bạn sẽ không phải download driver mỗi khi browser tăng version mới và dòng lệnh gây nhiều nhầm lẫn cho các bạn mới học.

System.setProperty("webdriver.chrome.driver", "/path/to/binary/chromedriver");

Bạn hoàn toàn có thể sử dụng các trình duyệt khác nếu muốn:

WebDriverManager.chromedriver().setup();
WebDriverManager.firefoxdriver().setup();
WebDriverManager.operadriver().setup();
WebDriverManager.phantomjs().setup();
WebDriverManager.edgedriver().setup();
WebDriverManager.iedriver().setup();
WebDriverManager.chromiumdriver().setup();

Tuy nhiên, mình chưa test hết tất cả nên không sure những cái khác có work hay không. 😀

III. Tổng kết

Cái WebdriverManager này chủ yếu phục vụ cho việc download driver binary nên nếu bạn nào cần parameterize browsers (ví dụ: chọn browser từ dòng lệnh command line hoặc điền browser muốn run ở config file) thì sẽ viết thêm 1 chút nữa. Dù gì thì làm việc với selenium cũng đã nhẹ nhàng hơn rất nhiều. 😀

0 0 votes
Article Rating
Subscribe
Notify of
guest
7 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
nhung
nhung
2 years ago

Mình dùng Maven và bị báo lỗi “The import io cannot be resolved”. Code của mình như sau

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import io.github.bonigarcia.wdm.WebDriverManager;

public class Browser {
public WebDriver init (String browserName) {
WebDriver driver = null;
String browser = browserName.toLowerCase();

switch (browser) {
case “chrome”:
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
break;
case “firefox”:
WebDriverManager.firefoxdriver().setup();
driver = new FirefoxDriver();
break;
}
return driver;
}
}
Vậy mình nên fix lỗi cannot be resolved này như thế nào? Mình cảm ơn.

nhung
nhung
2 years ago
Reply to  Giang Nguyen

Nó là nguyên nhân thứ 2.

Mình cảm ơn suggestion dùng Enum, để mình google thêm cách sử dụng. Mình mới học automation (Java + Selenium Web Driver) khoảng 1 tháng gần đây thôi nên còn nhiều lơ ngơ. Bài viết của bạn dễ hiểu, mình theo từ bài đầu tiên ở phần Fundamental tới nay. Cảm ơn bạn đã dành thời gian, công sức viết bài, giúp đỡ những người như tụi mình 🙂

trackback

[…] ra phần này là không cần thiết, mình đã viết 1 bài mới, hướng dẫn cách down driver tự […]

Bắc Nguyễn
Bắc Nguyễn
2 months ago

Hi ad,

Mình đang sử dụng webdrivermanager để khởi tạo browser nhưng khi run bằng cmd thì không excute được, cụ thể là không khởi tạo được browser, cũng không có báo lỗi gì cả. Dựa trên log thì mình thấy cmd không excute được dòng lệnh này WebDriverManager.chromedriver().setup().

Mình không biết đối với cmd thì cần thêm gì để thực hiện không, mong ad giúp mình giải quyết case này với ạ.

Thanks ad nhiều !!!

Last edited 2 months ago by Bắc Nguyễn