#web-driver #server #xenon #hub #session #selenium #proxy

app xenon-webdriver

Xenon是一个与Selenium Server类似的WebDriver代理

3个版本

0.4.2 2022年6月30日
0.4.1 2020年11月9日
0.4.0 2020年11月9日

#1617 in Web编程

每月下载 43次

MIT 许可证

70KB
1.5K SLoC

Crates.io Build Status

Xenon WebDriver

Xenon是一个WebDriver代理,用于通过单个代理运行多个WebDriver会话。

这使得它实际上是Selenium Server(包括独立或网格)的替代品。

目的

构建一个更精简、更高效的工具,用于管理多个浏览器、WebDriver实例和WebDriver会话,该工具使用最少的系统资源(CPU和内存),且不干扰测试。您的测试应该像直接指向运行在特定端口的单个webdriver实例一样运行,无需管理Selenium服务器或多个WebDriver实例。

为什么不直接使用Selenium Server呢?

Selenium服务器是一个非常出色的工具,并且执行得非常好,但是它是用Java编写的,并且消耗了大量的系统资源。

相比之下,Xenon是用Rust编写的,并且非常快速和轻量。它是基于async-await、tokio和hyper构建的。

状态

Xenon目前可以作为Selenium Standalone 3.x的大多数情况下的直接替换,尽管Xenon的目标不是与Selenium完全兼容。

它可能支持Selenium 4.x,但尚未经过测试。

也支持类似网格的功能(见下文“运行多个节点”)。

Xenon可以使用10个Chrome实例并发运行thirtyfour(Rust WebDriver客户端)的完整测试套件,无需修改测试代码。

入门

在xenon.yml中设置配置

首先,设置YAML配置文件(xenon.yml)的示例,如下所示

---
browsers:
  - name: chrome
    driver_path: /usr/local/bin/chromedriver
    sessions_per_driver: 1
    max_sessions: 10
ports:
  - "40001-41000"

这告诉它为任何新的会话启动/chromedriver,其中browserName是chrome。我们将为每个会话启动一个新的chromedriver实例。任何时刻最多只能有10个会话处于活动状态。端口号定义了可以用于chromedriver的端口。

您可以添加额外的浏览器,每个浏览器都有自己的会话限制。您甚至可以添加多个chromedriver配置,只要每个配置都有一个不同的name(这将与您的WebDriver客户端中所需的capabilities参数中的browserName设置匹配)。

下载并安装Xenon

您可以直接从crates.io安装二进制文件,如下所示

cargo install xenon-webdriver

这将仅对当前用户安装。

或者,您可以通过克隆此仓库并运行来从源代码构建

cargo build --release

如果从源代码构建,二进制文件将在 ./target/release/xenon-webdriver

运行 Xenon

现在您可以不带参数直接启动 Xenon。这假设您已经在与 xenon-webdriver 二进制文件相同的目录中放置了 xenon.yml

./xenon-webdriver

您应该会看到如下内容

[2020-05-23T13:55:34Z DEBUG xenon::server] Config loaded:
    XenonConfig {
        browsers: [
            BrowserConfig {
                name: "chrome",
                version: None,
                os: None,
                driver_path: "/usr/local/bin/chromedriver",
                sessions_per_driver: 1,
                max_sessions: 10,
            },
        ],
        ports: [
            "40001-41000",
        ],
    }
[2020-05-23T13:55:34Z INFO  xenon::server] Server running at 127.0.0.1:4444

现在您可以像平常一样运行您的 selenium/WebDriver 测试,并将它们指向 127.0.0.1:4444。Xenon 还可选地支持在 127.0.0.1:4444/wd/hub 上运行,以兼容设置为使用 selenium hub 的测试。

运行多个节点(即 Grid 功能)

每个 Xenon 服务器都可以作为中心节点、节点或独立服务器(或同时具备所有这些功能)。另一种说法是,每个 Xenon 服务器都可以支持本地浏览器,同时将请求委托给其他可以提供额外浏览器的远程节点(其他 Xenon 服务器)。要使用 Xenon 服务器作为节点,我们只需在作为中心节点的服务器配置文件中的 nodes 部分添加该服务器的 URL,如下所示

"中心节点" 服务器配置

---
nodes:
  - name: node1
    url: localhost:8888

注意:中心节点也可以指定 browsers:ports:,如果您还想在同一个中心节点上运行本地浏览器。

"节点" 服务器配置与独立配置相同(见上文)。

但是,此中心节点配置假设节点将在端口 8888 上运行,因此您将节点启动如下

./xenon-webdriver --port 8888

节点实际上并不知道它正在为另一个 Xenon 服务器提供服务请求。由于 Xenon 以 WebDriver 代理的形式运行,我们可以将请求转发到任何其他 Xenon 服务器,它“直接”工作。我们需要从“节点”获取的信息之一是它在其配置中提供的浏览器列表。中心节点在第一次启动时会自动请求此信息。中心节点将每隔 60 秒轮询每个节点的 /node/config 端点,直到收到成功的响应。这允许服务器以任何顺序启动。

总之,每个 Xenon 服务器可以提供本地或远程浏览器,或两者兼而有之。"本地" 浏览器是指该服务器负责启动每个 WebDriver 实例(chromedriver、geckodriver 等)并与它直接通信。"远程" 浏览器只是在另一个 Xenon 服务器上运行的 "本地" 浏览器。

在 Xvfb 下运行以实现 "无头" 操作(仅限 Linux)

您可以在 Xvfb 下运行 Xenon,它创建一个新的 X 服务器并在其中运行浏览器会话,这样就不会有您的鼠标和键盘输入干扰测试。

要这样做,只需使用您的发行版的软件包管理器安装 Xvfb,然后运行

xvfb-run --server-args="-screen 0 1024x768x24" ./xenon

VNC 输出

如果您像上面那样运行 Xvfb,您还可以通过在 Xvfb 显示上运行 VNC 服务器来获得实时视图。

https://stackoverflow.com/questions/12050021/how-to-make-xvfb-display-visible

计划中的功能

  • 支持从 Xenon 服务器转发请求,包括跨网络转发。
  • Docker 和 Docker Compose

许可证

本作品根据 MIT 许可。

SPDX-许可证-标识符: MIT

依赖关系

~14–24MB
~324K SLoC