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 (chromedriver, geckodriver…)
Nội dung bài viết
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. 😀
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.
Chào bạn, lỗi này là do không compile được code, do đoạn import kia đang không đúng. Mình nghĩ có 2 nguyên nhân:test ).
1. Bạn chưa điền đúng dependency name trong pom.xml. Bạn check lại xem có sai chính tả gì ko?
2. Bạn đang dùng lib này ngoài scope của folder test: ví dụ src > main > java chẳng hạn. Vì khi khai báo dependency, minh có để scope của lib là test (
–> Bạn có thể remove dòng này để lib có thể dùng được ở mọi nơi, hoặc chuyển đoạn code phía trên vào phần test: src > test > java.
3. Ngoài lề: bạn nên dùng Enum thay cho String để switch-case.
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 🙂
Cool ^^. Sắp tới mình sẽ còn viết thêm nhiều bài cho Selenium và các thứ liên quan nữa. Hi vọng bạn vẫn tiếp tục theo dõi. 😀
[…] 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ự […]
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 !!!
Đã trả lời bạn qua skype, mất nửa buổi sáng để tìm ra nguyên nhân.