WebDriverManager自动管理浏览器Driver包
创始人
2024-01-31 10:02:52
0
WebDriverManager是什么?

WebDriverManager是一个开源 Java 库,它以全自动方式管理(即下载、设置和维护) Selenium WebDriver所需的驱动程序(例如,chromedriver、geckodriver、msededriver 等)。此外,WebDriverManager 还提供了其他相关功能,例如发现本地系统中安装的浏览器、构建 WebDriver 对象(如ChromeDriver、FirefoxDriver、EdgeDriver等)以及在 Docker 容器中无缝运行浏览器的能力。
正如上面所说的WebDriverManager有很多功能,今天主要分享自动管理Selenium WebDriver所需的驱动程序的功能。由于我们公司会强制浏览器升级,所以不得不重新下载对应版本的 WebDriver。使用WebDriverManager后只要浏览器升级了,也会自动下载对应版本的Web Driver版本。

WebDriverManager源码地址:GitHub地址
如何使用WebDriverManager

如果你的项目是使用maven创建的,只需要在pom文件中加上下面的依赖包

        io.github.bonigarciawebdrivermanager5.3.1compile

添加好依赖以后就可以在项目中使用了,以后就可以告别手动更新webDriver了。

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;import io.github.bonigarcia.wdm.WebDriverManager;class ChromeCreateTest {WebDriver driver;@BeforeEachvoid setup() {driver = WebDriverManager.chromedriver().create();driver.get("https://www.baidu.com/");driver.findElement(By.id("su")).click();}@AfterEachvoid teardown() {driver.quit();}@Testvoid test() {// Your test logic here}}

获取下载的webDriver路径和版本

WebDriverManager webDriverManager = WebDriverManager.chromedriver().setup();
webDriverManager.getDownloadedDriverPath();
webDriverManager.getDownloadedDriverVersion()

截取部分方法名称和描述,更多说明可以移步官方文档
在这里插入图片描述
最后分享一个web自动化屏幕录制功能。

//tag::snippet-in-doc[]
import static java.lang.invoke.MethodHandles.lookup;
import static org.slf4j.LoggerFactory.getLogger;
import static org.testng.Assert.fail;import java.io.File;
import java.time.Duration;
import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.slf4j.Logger;import io.github.bonigarcia.wdm.WebDriverManager;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;public class RecordChromeTest {static final Logger log = getLogger(lookup().lookupClass());static final int REC_TIMEOUT_SEC = 10;static final int POLL_TIME_MSEC = 100;static final String REC_FILENAME = "myRecordingChrome";static final String REC_EXT = ".webm";WebDriver driver;File targetFolder;WebDriverManager wdm = WebDriverManager.chromedriver().watch();@BeforeClassvoid setup() {driver = wdm.create();targetFolder = new File(System.getProperty("user.home"), "Downloads");}@AfterClassvoid teardown() {driver.quit();}@Testpublic void test() throws InterruptedException {driver.get("https://bonigarcia.dev/selenium-webdriver-java/slow-calculator.html");wdm.startRecording(REC_FILENAME);// 1 + 3driver.findElement(By.xpath("//span[text()='1']")).click();driver.findElement(By.xpath("//span[text()='+']")).click();driver.findElement(By.xpath("//span[text()='3']")).click();driver.findElement(By.xpath("//span[text()='=']")).click();// ... should be 4, wait for itWebDriverWait wait = new WebDriverWait(driver,  Duration.ofSeconds(10));wait.until(ExpectedConditions.textToBe(By.className("screen"), "4"));wdm.stopRecording();long timeoutMs = System.currentTimeMillis()+ TimeUnit.SECONDS.toMillis(REC_TIMEOUT_SEC);File recFile;do {recFile = new File(targetFolder, REC_FILENAME + REC_EXT);if (System.currentTimeMillis() > timeoutMs) {fail("Timeout of " + REC_TIMEOUT_SEC+ " seconds waiting for recording " + recFile);break;}Thread.sleep(POLL_TIME_MSEC);} while (!recFile.exists());log.debug("Recording available at {}", recFile);}}
//tag::snippet-in-doc[]

底层代码实现,不依赖WebDriverManager使用selenium也可以实现

((JavascriptExecutor)this.driver).executeScript("window.postMessage({ type: \"startRecording\", name: \"" + recordingName + "\" });", new Object[0]);

WebDriverManager还有很多好玩的功能没有去研究,看了一下有个和docker有关的功能似乎还不错。可以在docker上面跑自动化用例,似乎还能显示docker中的画面。有时间再去研究一下怎么玩的。

相关内容

热门资讯

海外吸引力与好感度持续攀升 “...   “中国变酷了!”2025年,谈及中国的海外吸引力与好感度,“酷炫中国”成为外媒高频评价词。这一年...
“沉浸式体验+多元场景”释放假...   从2025年12月31日晚到2026年1月1日,各地举行了精彩纷呈的活动,共同迎接新年的到来。 ...
横琴口岸元旦通关创历史新高   2026年元旦假期首日,横琴口岸迎来跨境“开门红”。据珠海边检总站横琴边检站统计,1月1日当天,...
中国助力非洲数字化转型   数字化转型是非盟《2063年议程》的重要目标之一。近年来,在高质量共建“一带一路”、中非合作论坛...
访华前,李在明就台湾问题表态!   近日,韩国总统李在明接受总台《高端访谈》栏目专访。这是韩国总统府搬回青瓦台后,李在明首次接受媒体...
长江十年禁渔取得阶段性明显成效   记者从农业农村部了解到,长江十年禁渔自2021年1月1日全面启动实施以来,已取得了阶段性明显成效...
免税店更快上新、游艇更受欢迎 ...   据海关统计,海南自贸港封关运作以来,截至2025年12月31日进口“零关税”货物达4.2亿元;加...
美国佐治亚州发生一起枪击事件 ...   当地时间1月2日,美国佐治亚州东梅肯舒林大道于当日15时40分左右发生一起枪击事件,执法人员发现...
“送到家门、直发个人” 各地打...   “3600元到账!小小年纪就领上‘年薪’啦。”2025年末,北京市石景山区的宋女士,惊喜地发现育...
多地新年迎降雪 各部门协同除冰...   央视网消息:1月1日早晨,江苏宿迁、淮安等地迎来了2026年的第一场雪。皑皑白雪为城市披上银装,...