# Selenium Manager使用指南


Selenium 社区最近发布了 Selenium Manager 工具，主要是解决每隔一段时间就要重新去下载 driver 的痛点。当然了，这也是我痛点。因为 chrome 浏览器会自动更新的关系，之前我都是关掉自动更新从而回避去下载新 driver 的问题，不过因为用户的版本大多都是较新的，所以测试浏览器每隔一段时间还是要更新一下才比较好。我自己试用了一下，感觉还是很不错的，非常有意思的一个点是 sm 竟然是 rust 开发的，在我的印象里这种对性能和稳定性要求不是特别高的命令行用 go 开发和维护的话效率可能会更高一点。下面是官方 blog 的翻译以及我自己的一点点体验。

大多数人使用 Selenium 的第一次经验都会出现这样的错误消息：

```
java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://chromedriver.chromium.org/. The latest version can be downloaded from https://chromedriver.chromium.org/downloads
```

然后他们不得不在网上搜索有关如何处理他们下载的驱动程序的说明。

### Selenium：现在已经内置了驱动程序！

Selenium 项目希望改善用户体验，其中一项首要任务是帮助所有用户简化他们设置环境的方式。多年来，配置浏览器驱动程序一直是用户需要执行的任务，以便运行 Selenium。

设置一次浏览器驱动程序并不那么复杂，但随着浏览器发布周期缩短，现在每 4-6 周就有一个新的 Chrome/Firefox/Edge 版本，使得保持浏览器驱动程序与浏览器版本同步的任务变得不那么容易了。

Selenium Manager 是一个新的工具，可帮助轻松获得运行 Selenium 所需的工作环境。如果 Chrome、Firefox 或 Edge 不在 PATH 中，Selenium Manager Beta 1 将配置它们的浏览器驱动程序。

要使用 Selenium 4.6 进行 Selenium 测试，只需安装 Chrome、Firefox 或 Edge 即可。如果您已经安装了浏览器驱动程序，则会忽略此功能。如果您想帮助我们测试它，请删除您的驱动程序或删除第三方驱动程序管理器，然后事情应该仍然“正常工作”。如果不行，请提交错误报告。

Selenium Manager 的未来版本甚至会下载浏览器（如果有必要）。

### 受开源和 Selenium 社区启发

Selenium Manager 不是完全新的解决方案。多年来， Selenium 生态系统中出现了几个第三方项目，例如：Java 的 WebDriverManager、Python 的 webdriver-manager、Ruby 的 webdrivers 和 C# 的 WebDriverManager.Net。

所有这些项目都作为灵感，并清楚地表明社区需要在 Selenium 中内置此功能。此外，2021 年 1 月进行的一项调查显示，大多数 Selenium 用户希望摆脱驱动程序管理问题。此外，驱动程序安装页面是 Selenium 文档中访问最多的页面。

### 详细介绍 Selenium Manager

Selenium Manager 是一个命令行工具，用 Rust 语言开发，可在多个平台上运行。在其 beta 1 版本中，如果未检测到浏览器驱动程序或未使用第三方驱动程序管理器，则 Selenium Manager 将被 Selenium 绑定透明地调用。你也可以不使用 Selenium 绑定使用 Selenium Manager。目前，二进制文件可以直接在 Selenium 的代码库中找到。运行以下命令以检查不同的参数和选项：

```
$ ./selenium-manager --help
```

下面是一个快速的示例，演示如何配置 ChromeDriver：

```
$ ./selenium-manager --browser chrome
INFO /home/boni/.cache/selenium/chromedriver/linux64/106.0.5249.61/chromedriver
```

如果你维护一个基于 WebDriver 的项目，并希望同时使用 Selenium Manager，请加入我们的社区频道，我们将乐意提供帮助。如果你有兴趣进行贡献，请查看项目的 README 以获取详细的说明和信息。

### 未来计划

未来将继续开发 Selenium Manager，每个版本将添加新功能并修复错误。然而，你作为 Selenium 社区的一员，是这个新工具未来成功的关键部分。请通过我们的问题跟踪器报告想法或错误，并通过我们的社区频道加入讨论。期待你的反馈！

Happy testing!

### 简单体验

下载地址: https://github.com/SeleniumHQ/selenium/tree/trunk/common/manager

selenium manager 是命令行工具，所以必须在命令行中使用，下面是帮助选项。

```
selenium-manager -h
selenium-manager 1.0.0-M3
Selenium Manager is a CLI tool that automatically manages the browser/driver infrastructure required by Selenium.


Usage: selenium-manager [OPTIONS]
Options:
  -b, --browser <BROWSER>
          Browser name (chrome, firefox, edge, iexplorer, safari, or safaritp)
  -d, --driver <DRIVER>
          Driver name (chromedriver, geckodriver, msedgedriver, IEDriverServer, or safaridriver)
  -v, --driver-version <DRIVER_VERSION>
          Driver version (e.g., 106.0.5249.61, 0.31.0, etc.)
  -B, --browser-version <BROWSER_VERSION>
          Major browser version (e.g., 105, 106, etc. Also: beta, dev, canary -or nightly- is accepted)
  -P, --browser-path <BROWSER_PATH>
          Browser path (absolute) for browser version detection (e.g., /usr/bin/google-chrome, "/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome", "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe")
  -O, --output <OUTPUT>
          Output type: LOGGER (using INFO, WARN, etc.), JSON (custom JSON notation), or SHELL (Unix-like) [default: LOGGER]
  -p, --proxy <PROXY>
          HTTP proxy for network connection (e.g., https://myproxy.net:8080)
  -t, --timeout <TIMEOUT>
          Timeout for network requests (in seconds) [default: 120]
  -D, --debug
          Display DEBUG messages
  -T, --trace
          Display TRACE messages
  -c, --clear-cache
          Clear driver cache
      --driver-ttl <DRIVER_TTL>
          Set default driver ttl [default: 86400]
      --browser-ttl <BROWSER_TTL>
          Set default browser ttl [default: 0]
      --clear-metadata
          Clear metadata file
  -h, --help
          Print help
  -V, --version
          Print version

```

一般用法，指定浏览器路径以及 driver 类型，自动下载并配置 driver。我也试过用浏览器的版本号来制定，不过似乎运行不起来。

另外这个工具跟 ruby 的 webdrivers 扩展有冲突，大家可以二选一就好了。

```
# windows可以用这个路径: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
./selenium-manager -d chromedriver -P /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
```

