2023 年 10 月 Selenium Manager 的状态

此博客文章总结了 Selenium Manager 最新两个版本(即 0.4.13 和 0.4.14)中引入的新特性。

Selenium Manager 继续其开发计划。与往常一样,在最新版本(即 0.4.13 和 0.4.14(分别随 Selenium 4.13 和 4.14 一起发布))中,我们修复了目前报告的问题。在这些版本中,问题与 Windows 中从自解压存档 (SFX) 中提取 Firefox 二进制文件以及通过配置文件 (se-config.toml) 和环境变量(例如,SE_BROWSER)进行高级配置有关。此外,这些最新版本还包括新功能,如下所述。

在缓存中搜索最佳驱动

默认情况下,Selenium Manager 需要请求在线端点(例如 Chrome for Testing JSON APIFirefox product-details JSON API)来发现、下载和维护 Selenium 所需的正确驱动程序和浏览器。下载的工件存储在缓存中(默认情况下为 ~/.cache/selenium),并从那里重复使用。

为了使驱动程序解析过程更加健壮,从 0.4.13 版本开始,Selenium Manager 包含一个新功能,用于在发生某些错误时定位缓存中的驱动程序。这样,当 Selenium Manager 中发生网络请求(或其他函数)失败时,它会尝试在缓存中定位驱动程序。此特性旨在为正确创建 Selenium 会话提供尽力而为的解决方案,这是 Selenium Manager 的最终目标。此外,此功能将有助于为 Selenium Grid 定位驱动程序提供更好的体验。

使用环境变量定位 Selenium Manager 二进制文件

与 Selenium Manager 0.4.13 相关的下一个功能已在 Selenium 绑定(即 Java、JavaScript、Python、.Net 和 Ruby)中实现。从 Selenium 4.13.0 开始,Selenium 绑定允许使用名为 SE_MANAGER_PATH 的环境变量来定位 Selenium Manager 二进制文件。这样,如果设置了此变量,则绑定将使用其值作为本地文件系统中 Selenium Manager 的路径。此功能将允许用户提供 Selenium Manager 的自定义编译版本,例如,如果默认二进制文件(针对 Windows、Linux 和 macOS 编译)与给定系统(例如,Linux 中的 ARM64)不兼容。

自动化 Edge 管理

Selenium Manager 0.4.14 包括自动化 Edge 管理。这是我们在 Chrome 和 Firefox 之后考虑的此功能的最后一个浏览器。

此功能已以与 macOS 和 Linux 上的 Chrome 和 Firefox 相同的方式实现。换句话说,Selenium Manager 允许自动管理(即发现、下载和缓存)最新的 Edge 版本(即稳定版、测试版、开发版、金丝雀版)和旧版本(例如,115、116 等)。下载的二进制文件照常存储在 Selenium 缓存中。以下输出命令展示了 macOS(第一段代码)和 Linux(第二段代码)中的此功能

./selenium-manager --browser edge --debug --force-browser-download

DEBUG	msedgedriver not found in PATH
DEBUG	Checking edge releases on https://edgeupdates.microsoft.com/api/products
DEBUG	Required browser: edge 117.0.2045.40
DEBUG	Downloading edge 117.0.2045.40 from https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/6e65d9ef-0bb9-4636-8d9e-2b1b9d16149d/MicrosoftEdge-117.0.2045.40.pkg
DEBUG	edge 117.0.2045.40 has been downloaded at /Users/boni/.cache/selenium/edge/mac64/117.0.2045.40/Microsoft Edge.app/Contents/MacOS/Microsoft Edge
DEBUG	Reading msedgedriver version from https://msedgedriver.azureedge.net/LATEST_RELEASE_117_MACOS
DEBUG	Required driver: msedgedriver 117.0.2045.40
DEBUG	Downloading msedgedriver 117.0.2045.40 from https://msedgedriver.azureedge.net/117.0.2045.40/edgedriver_mac64.zip
INFO	Driver path: /Users/boni/.cache/selenium/msedgedriver/mac64/117.0.2045.40/msedgedriver
INFO	Browser path: /Users/boni/.cache/selenium/edge/mac64/117.0.2045.40/Microsoft Edge.app/Contents/MacOS/Microsoft Edge
./selenium-manager --browser edge --debug --browser-version beta

DEBUG	msedgedriver not found in PATH
DEBUG	edge not found in PATH
DEBUG	edge beta not found in the system
DEBUG	Checking edge releases on https://edgeupdates.microsoft.com/api/products
DEBUG	Required browser: edge 118.0.2088.11
DEBUG	Downloading edge 118.0.2088.11 from https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-beta/microsoft-edge-beta_118.0.2088.11-1_amd64.deb
DEBUG	edge 118.0.2088.11 has been downloaded at /home/user/.cache/selenium/edge/linux64/118.0.2088.11/msedge
DEBUG	Reading msedgedriver version from https://msedgedriver.azureedge.net/LATEST_RELEASE_118_LINUX
DEBUG	Required driver: msedgedriver 118.0.2088.11
DEBUG	Downloading msedgedriver 118.0.2088.11 from https://msedgedriver.azureedge.net/118.0.2088.11/edgedriver_linux64.zip
INFO	Driver path: /home/user/.cache/selenium/msedgedriver/linux64/118.0.2088.11/msedgedriver
INFO	Browser path: /home/user/.cache/selenium/edge/linux64/118.0.2088.11/msedge

但是,此功能无法在 Windows 上以类似方式实现。原因是 Windows 的 Edge 安装程序以 Microsoft 安装程序 (MSI) 文件形式分发,旨在以管理员权限执行。我们尝试从该 MSI 文件中提取 Edge 二进制文件。但是,这似乎不可能(请参阅总结此问题的 Stack Overflow 帖子)。总而言之,我们找到的唯一解决方案是使用 MSI 安装程序在 Windows 中安装 Edge,因此需要管理员权限。

这样,当尝试在 Windows 中使用非管理员会话通过 Selenium Manager 安装 Edge 时,将显示如下警告消息

./selenium-manager --debug --browser edge --browser-version beta

DEBUG   msedgedriver not found in PATH
DEBUG   edge not found in PATH
DEBUG   edge beta not found in the system
WARN    There was an error managing edge (edge can only be installed in Windows with administrator permissions); using driver found in the cache
INFO    Driver path: C:\Users\boni\.cache\selenium\msedgedriver\win64\118.0.2088.17\msedgedriver.exe

但是,当在 Windows 中以管理员权限执行 Selenium Manager 时,它将能够自动发现、下载和安装 Edge 浏览器(稳定版、测试版、开发版、金丝雀版以及旧版本)。

./selenium-manager --debug --browser edge --browser-version beta

DEBUG   msedgedriver not found in PATH
DEBUG   edge not found in PATH
DEBUG   edge beta not found in the system
DEBUG   Checking edge releases on https://edgeupdates.microsoft.com/api/products
DEBUG   Required browser: edge 118.0.2088.17
DEBUG   Downloading edge 118.0.2088.17 from https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/7adec542-f34c-4dea-8e2a-f8c6fab4d2f3/MicrosoftEdgeBetaEnterpriseX64.msi
DEBUG   Installing MicrosoftEdgeBetaEnterpriseX64.msi
DEBUG   edge 118.0.2088.17 is available at C:\Program Files (x86)\Microsoft\Edge Beta\Application\msedge.exe
DEBUG   Required driver: msedgedriver 118.0.2088.17
DEBUG   msedgedriver 118.0.2088.17 already in the cache
INFO    Driver path: C:\Users\boni\.cache\selenium\msedgedriver\win64\118.0.2088.17\msedgedriver.exe
INFO    Browser path: C:\Program Files (x86)\Microsoft\Edge Beta\Application\msedge.exe

Chromium 支持

Chromium 以可移植二进制文件的形式发布,并作为 zip 文件分发,适用于 Windows、Linux 和 macOS(请参阅 Chromium 下载页面)。然而,在某些情况下,Chromium 实际上会安装在系统中。这种情况发生在 Linux 系统中,当通过包管理器(如 atpsnap)安装 Chromium 时,例如以下情况:

sudo snap install chromium

因此,从 0.4.14 版本开始,当未发现 Chrome 时,Selenium Manager 会在 PATH 中查找 Chromium 二进制文件。以下代码片段展示了此功能在 Linux 机器上的工作方式,其中 Chrome 不可用,但 Chromium 已通过 snap 安装。

./selenium-manager --browser chrome --debug
DEBUG   chromedriver not found in PATH
DEBUG   Found chromium in PATH: /snap/bin/chromium
DEBUG   Running command: /snap/bin/chromium --version
DEBUG   Output: "Chromium 117.0.5938.149 snap"
DEBUG   Detected browser: chrome 117.0.5938.149
DEBUG   Required driver: chromedriver 117.0.5938.149
DEBUG   chromedriver 117.0.5938.149 already in the cache
INFO   Driver path: /home/user/.cache/selenium/chromedriver/linux64/117.0.5938.149/chromedriver
INFO   Browser path: /snap/bin/chromium

下一步

我们即将实现 Selenium Manager 最初计划的所有功能。您可以在 Selenium Manager 项目仪表板中跟踪开发活动的进展状态。