什么是Selenium?WebDriver、Grid、IDE和用例
无抓取抓取浏览器提供对需要超出本地浏览器主机的云执行的网络自动化和数据工作流的管理浏览器基础设施。
TL;DR
- Selenium是一个浏览器自动化项目的总称。 其主要组件为用于基于代码的控制的WebDriver,用于分布式执行的Grid,以及用于录制和回放创作的IDE。
- WebDriver是核心编程接口。 Selenium语言绑定通过与浏览器供应商协作维护的特定于浏览器的实现发送标准化命令。
- Selenium强调广泛的兼容性。 其生态系统涵盖主要浏览器、几种编程语言、远程执行服务、测试框架和长期企业套件。
- Grid解决分配问题,而不是测试设计。 在机器之间分配会话增加了覆盖率和能力,但等待、定位、隔离和断言仍然决定测试质量。
- Selenium不局限于传统应用程序。 当跨浏览器标准、语言选择、现有基础设施或远程浏览器互操作性引导决策时,它仍然是有用的。
Selenium是一个项目家族,而不是一个可执行文件
Selenium将工具和库结合在一起,以自动化web浏览器。WebDriver是大多数开发人员使用的面向代码的API。Selenium Grid将会话路由到不同机器或平台上的浏览器节点。Selenium IDE通过扩展录制和播放浏览器操作,并可以帮助学习或轻量级工作流。语言绑定将测试代码连接到WebDriver模型,而外部测试运行器提供套件结构、断言、报告和特定于应用程序的固定工具。
官方Selenium项目概述 将Selenium描述为一个伞形项目,并解释WebDriver、IDE和Grid的作用。这种分离在评估Selenium时很重要。团队可以在没有Grid的情况下本地使用WebDriver,将WebDriver会话发送到云提供商,或者与多个测试框架一起使用Grid。因此,“使用Selenium”在命名语言绑定、浏览器驱动程序、运行器、会话主机和报告路径之前,对完整架构的说法不多。
WebDriver将测试代码连接到浏览器实现
Selenium测试调用语言绑定,例如Java、Python、JavaScript、Ruby或C#。绑定使用请求的能力创建WebDriver会话,然后发送导航、元素查找、输入、脚本执行、窗口、Cookie、屏幕截图和其他浏览器操作的命令。驱动程序实现将这些协议操作翻译成浏览器行为。本地执行在测试过程附近启动,而远程执行将相同的会话模型发送到Grid或其他WebDriver端点。
W3C WebDriver规范 将WebDriver定义为用于远程浏览器控制的平台和语言中立的传输协议。基于标准的命令使浏览器实现和客户端相互操作,而扩展能力则满足特定供应商的需求。该协议不规定其周围的测试框架。断言、依赖注入、页面对象、数据设置和结果报告来自周围的语言生态系统或项目架构。
- 绑定。 特定语言的API将项目代码转化为WebDriver会话和命令消息。
- 驱动程序。 特定浏览器的实现接收命令并控制相应的浏览器。
- 会话。 能力协商浏览器、平台、提示、代理和扩展设置,以进行一个自动化生命周期。
- 元素和操作。 命令定位DOM元素并调度键盘、指针、滚轮、导航、窗口或脚本操作。
- 远程端点。 Grid或托管服务将请求的会话分配给可用的浏览器环境。
Grid在环境之间分发浏览器会话
Selenium Grid接受远程WebDriver请求,并将它们与满足请求能力的节点匹配。这允许一个套件覆盖未安装在测试运行器上的浏览器和操作系统组合。它还允许并行会话,受限于节点容量和应用程序处理并发测试的能力。Grid有助于集中浏览器分配,但测试数据、环境稳定性、机密、工件和目标系统负载仍然是团队的责任。
官方Selenium Grid文档 解释Grid在不同机器和平台上运行测试,而触发器保持在本地端。一个实用的Grid设计将每个会话视为一次性的和可观察的。节点应具有受控的浏览器版本,日志应识别分配的环境,测试应避免依赖于先前会话留下的文件或状态。远程执行放大了隐藏的耦合,因为顺序和机器分配的可预测性较差。
Selenium组件解决不同阶段
当每个组件有一个任务并且周围的测试堆栈被明确命名时,Selenium架构更清晰。
| 组件 | 主要责任 |
|---|---|
| Selenium WebDriver | 提供语言绑定和基于标准的接口以控制浏览器会话。 |
| 浏览器驱动程序 | 为特定浏览器实现WebDriver操作并将其委托给该浏览器。 |
| Selenium Grid | 将远程会话请求路由到满足请求能力的可用浏览器节点。 |
| Selenium IDE | 通过扩展录制和播放浏览器操作,用于学习、原型制作和选定的工作流。 |
| 测试运行器 | 发现测试,提供断言和辅助功能,报告结果,通常由语言生态系统提供。 |
| 页面或域层 | 封装特定于应用程序的定位器和操作,使测试表达业务行为而不是原始命令。 |
Selenium 仍然是实用选择的地方
当兼容性、语言集成或现有的 WebDriver 生态系统比全功能测试运行器更重要时,Selenium 最强大。
广泛的企业套件
长期存在的 Java、Python、C#、Ruby 或 JavaScript 测试系统可以与已建立的运行器、报告、依赖注入和内部库集成 WebDriver。
跨浏览器验证
基于标准的会话模型支持主要浏览器实现和跨浏览器及操作系统组合的远程环境。
分布式执行
网格或托管的 WebDriver 服务可以分配多个独立会话,而无需迫使测试过程在本地托管每个浏览器。
面向标准的工具
自动化产品可以围绕 WebDriver 协议构建,而不是将每个工作流直接与一个浏览器供应商的调试接口耦合。
Selenium 需要明确选择等待和工具
Selenium 提供浏览器控制,而不是规定的测试架构。团队选择运行器、断言库、辅助功能、报告、依赖管理和设计约定。这种灵活性支持许多生态系统,但增加了决策的数量。同步也需要纪律:元素的存在并不保证可见性或可交互性,页面加载事件可能并不意味着单页应用已达到测试所需的状态。
官方 Selenium WebDriver 入门指南 解释参与 Selenium 设置的浏览器特定驱动程序和语言中立接口。当前的 Selenium 工具可以管理大部分驱动程序设置,但远程端点、浏览器策略、容器映像和企业网络仍然可以改变环境。记录会话返回的实际能力,并断言应用程序结果,而不是假设请求的浏览器标签证明完全的环境。
一个 Selenium 架构评审
将 Selenium 视为一组可互操作的部分。在扩大浏览器覆盖范围或添加远程能力之前,审查每个边界。
- 命名完整的栈。 记录语言绑定、测试运行器、断言库、驱动程序管理、浏览器版本、网格或远程端点和工件系统。这将模糊框架选择转变为可操作的设计。
- 定义能力所有权。 在版本化配置中保留浏览器、平台、代理、下载、证书和供应商扩展能力。在诊断环境漂移时比较请求的和返回的能力。
- 使用基于条件的等待。 等待下一步所需的特定可见、启用、URL、框架或应用程序状态。不要使固定的时钟延迟成为主要的同步方法。
- 封装页面行为。 页面对象或领域服务应曝光有意义的操作和结果,同时保持原始定位器和 WebDriver 命令靠近它们描述的页面。
- 隔离测试数据和会话。 并行测试不应共享帐户、可变记录、下载或浏览器配置文件,除非协调是测试的明确主题。
- 观察远程分配。 捕获会话标识符、节点环境、浏览器版本、日志、屏幕截图和其他相关工件,以便可以重现远程故障。
- 根据测量的需求扩展。 在测量浏览器启动、测试持续时间、目标容量和共享服务限制后添加节点和并行工作者。更多会话可能会使被测试的应用程序超负荷。
- 计划协议演变。 跟踪您的套件使用的浏览器和绑定中的 WebDriver 经典和 WebDriver BiDi 支持。采用新事件驱动特性,当所需的模块从头到尾实现时。
Scrapeless 与 Selenium 工作流的适配
Scrapeless Scraping Browser 是用于自动化和动态 Web 数据任务的托管浏览器基础设施。在以 Selenium 为中心的组织中,将其作为浏览器托管和网络层的一部分进行评估,并验证当前支持的连接表面与项目所需的确切客户端和操作的一致性。
不要假设对一个浏览器协议的支持意味着对每个 Selenium 命令、能力或工件的全面支持。首先运行有限的兼容性检查。审查当前 Scrapeless Scraping Browser 产品概述, Scrapeless Scraping Browser 入门文档, 和 Scrapeless 定价 在选择操作模型之前。
结论:Selenium 是一个可互操作的自动化生态系统
Selenium结合了WebDriver、Grid、IDE、语言绑定和一个庞大的周边生态系统。WebDriver提供了核心的浏览器控制合同,Grid分配会话,而项目的语言栈提供了测试架构的其余部分。这种模块化是Selenium适应如此多环境的主要原因。
当基于标准的跨浏览器控制、语言选择、现有专业知识或远程WebDriver基础设施是主要要求时,选择Selenium。保持等待与应用状态相关联,隔离会话和测试数据,使整个环境可观察。
准备好审核您的浏览器基础设施了吗?
创建一个Scrapeless账户,比较托管浏览器执行与您当前自动化工作流程使用的本地或Grid托管环境。
开始免费试用 →常见问题
Selenium和WebDriver是同一个吗?
不是。Selenium是一个伞项目,而WebDriver是其主要基于代码的浏览器控制组件和相关的W3C协议系列。Selenium还包括用于分布式执行的Grid和用于录制和回放工作流程的IDE,以及语言绑定和项目基础设施。
Selenium包含测试运行器吗?
Selenium提供浏览器自动化API,但通常依赖于所选语言生态系统中的运行器,例如Java、Python、JavaScript或C#测试框架。运行器提供WebDriver会话周围的发现、断言、夹具、报告和套件生命周期。
Selenium Grid用于什么?
Selenium Grid将远程WebDriver会话请求路由到与请求的功能匹配的浏览器节点。它帮助团队在不同的机器、浏览器和平台上运行,并可以增加并行容量。它不解决共享测试数据、不稳定的等待、弱定位器或缺失的断言。
Selenium支持主要浏览器吗?
是的。Selenium WebDriver旨在通过特定于浏览器的驱动程序和基于标准的协议支持主要浏览器实现。验证项目所需的确切浏览器版本、操作系统、驱动程序或内置管理器行为和远程服务能力。
Selenium仅用于自动化测试吗?
测试是主要用途,但WebDriver也可以支持监控、浏览器工具和允许的自动化任务。对于公共数据收集,仅在需要呈现或交互时选择浏览器,并保持访问范围、流量、凭证和数据保留在明确控制之下。