3个版本
0.4.2 | 2022年6月30日 |
---|---|
0.4.1 | 2020年11月9日 |
0.4.0 | 2020年11月9日 |
#1617 in Web编程
每月下载 43次
70KB
1.5K SLoC
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