Selenium 核心扩展 (User-Extensions.js)
⚡ 智能摘要
Selenium 核心扩展(也称为用户扩展)会向应用程序添加自定义操作、访问器和定位器策略。 Selenium 通过附加到 IDE Java脚本函数 Selenium 以及 IDE 启动时 PageBot 原型对象。
Selenium 核心扩展
为了理解扩展,我们首先来了解它的三个支柱: Selenium IDE您在 IDE 中录制或输入的每个命令都属于以下三个类别之一,每个屏幕截图都显示了该类别在 IDE 命令列表中的显示方式。
Selenium IDE 附带一个成熟的库,其中已经包含大量的操作、访问器、断言和定位器策略。
然而,有时项目需要的功能并不包含在该库中。在这种情况下,您可以通过添加自定义扩展来扩展该库。这些自定义扩展被称为…… 用户扩展.
例如,假设您需要一个操作,将文本转换为大写后再填充到网页元素中。默认库中没有这样的操作,因此您需要创建自己的用户扩展。在本教程中,您将学习如何构建一个将文本转换为大写的用户扩展。
⚠️ 开始之前: 这里描述的工作流程属于 Selenium 核心和原始 Firefox-插入 Selenium IDE. Selenium Core 已停止维护,并且已停止对用户扩展的支持。 Selenium 罐子 Selenium 3. 以下步骤和代码得以保留,是因为大量遗留的 Selenese 套件仍然依赖于它们;本文稍后将介绍现代的替代方案。
创建需求 Selenium 用户扩展
创建用户扩展 Selenium IDE,你需要掌握一些基本概念 JavaScript 尤其是 Java脚本原型对象。下图展示了用户扩展程序所附加的两个原型对象。
要创建您的用户扩展,您需要编写以下代码: Java编写脚本方法并将其添加到 Selenium 对象原型和 PageBot 对象原型。
创新中心 Selenium IDE 识别用户扩展
在向用户扩展程序添加之后 Selenium IDE已启动,所有函数都已注册到这些函数中。 Java脚本原型已加载,并且 Selenium IDE 会根据命令名称识别每个命令。因此,下一节中的命名前缀并非风格选择,而是 IDE 对命令进行分类的方式。
如何创建用户扩展
步骤1)行动 所有行动都以……开始 do如果操作将文本转换为大写,则其名称为 执行文本大写当你将此操作方法添加到 Selenium IDE本身会创建一个匹配的等待方法,因此 执行文本大写 还会生成等待函数 textUpperCaseAndWait该方法可以接受两个参数。
示例:大写文本操作
Selenium.prototype.doTextUpperCase = function(locator, text) { // Here findElement is itself capable to handle all type of locator(xpath,css,name,id,className), We just need to pass the locator text var element = this.page().findElement(locator); // Create the text to type text = text.toUpperCase(); // Replace the element text with the new text this.page().replaceText(element, text); };
步骤 2)访问器/断言 所有在以下平台上注册的访问者 Selenium 对象原型以……为前缀 得到 or is例如,`getValueFromCompoundTable` 或 `isValueFromCompoundTable`。访问器可以接受两个参数,一个用于测试用例中的目标字段,另一个用于测试用例中的值字段。下面的屏幕截图显示了扩展加载后这些前缀的显示方式。
对于每个访问器, Selenium IDE 生成以 为前缀的相应验证函数。 确认 和 断言加上一个以……为前缀的等待函数 等待.
例如:大写文本访问器
Selenium.prototype.assertTextUpperCase = function(locator, text) { // All locator-strategies are automatically handled by "findElement" var element = this.page().findElement(locator); // Create the text to verify text = text.toUpperCase(); // Get the actual element value var actualValue = element.value; // Make sure the actual value matches the expected Assert.matches(expectedValue, actualValue); }; Selenium.prototype.isTextEqual = function(locator, text) { return this.getText(locator).value===text; }; Selenium.prototype.getTextValue = function(locator, text) { return this.getText(locator).value; };
步骤 3)定位器策略 – 如果您想创建自己的函数来定位元素,请使用以 `<function_name>` 为前缀的函数扩展 PageBot 原型。 定位元素它接受两个参数:定位器字符串和要搜索元素的文档。
例如:大写文本定位器
// The "inDocument" is a document you are searching. PageBot.prototype.locateElementByUpperCase = function(text, inDocument) { // Create the text to search for var expectedValue = text.toUpperCase(); // Loop through all elements, looking for ones that have // a value === our expected value var allElements = inDocument.getElementsByTagName("*"); // This star '*' is a kind of regular expression it will go through every element (in HTML DOM every element surely have a tag name like<body>,<a>,<h1>,<table>,<tr>,<td> etc. ). Here our motive is to find an element which matched with the Upper Case text we have passed so we will search it with all elements and when we get match we will have the correct web element. for (var i = 0; i < allElements.length; i++) { var testElement = allElements[i]; if (testElement.innerHTML && testElement.innerHTML === expectedValue) { return testElement; } } return null; };
将所有三个函数保存在一个名为“Saveall three functions”的单个文件中 用户扩展.js文件是纯文本的。 Java脚本,因此任何文本编辑器都足够用。
如何使用新创建的核心扩展
在原始文件中,加载文件是一个四步任务。 Firefox-插件IDE。下面的每个屏幕截图都对应于旁边标有编号的步骤。
- 在MyCAD中点击 软件更新 Selenium IDE 和点击 选项 -> 选项…
- 在 General (将军) 在“部分”中,选择新建位置 Selenium 核心扩展。
- 点击 OK 然后重启 Selenium IDE。
- 您可以在命令列表中找到该扩展程序。
Selenium 核心扩展与 Selenium IDE扩展
这两个术语在较早的资料中可以互换使用,但它们描述的是不同的层,在决定将自定义逻辑放在哪里时,这种区别很重要。
| 方面 | Selenium 核心扩展 | Selenium IDE扩展 |
|---|---|---|
| 它延伸的内容 | 播放期间使用的 Selenese 命令库 | IDE应用程序本身 |
| 文件已加载 | 用户扩展.js | 旧版 IDE 中的 user-extensions-ide.js,以及当前 IDE 中的插件清单文件 |
| 典型用途 | 新的操作、访问器和定位器策略 | 新增菜单项、面板、格式和录制器行为 |
| 触摸过的物体 | Selenium.prototype 和 PageBot.prototype | IDE编辑器和录制器API |
| 跑步期间 | 测试执行 | 创作和录制 |
简而言之,核心扩展改变了测试可以执行的操作,而 IDE 扩展改变了工具可以执行的操作。
现代 Selenium IDE 替换了 user-extensions.js
此 Firefox-插入 Selenium IDE停止工作时 Firefox 迁移到 WebExtensions 架构,IDE 也重写为 Chrome 版本。 Firefox 以及 Edge 浏览器扩展。该重写移除了上面显示的“选项”字段,因此无法指向 user-extensions.js 文件。目前有两种受支持的替代方案可以实现相同的功能。
- 执行脚本命令。 一次性 Java脚本,添加一个 执行脚本 or 执行异步脚本 直接执行测试并将结果存储在变量中。这相当于一个小型自定义操作。
- 一个插件。 对于可重用的命令,可以构建一个浏览器扩展程序,该扩展程序会向 IDE 注册一个清单文件。清单文件会为每个新命令声明一个 ID、一个名称、一个可选的类型和文档,它还可以声明新的定位器。
清单是通过向 IDE 扩展发送消息来注册的,如官方文档所示。 Selenium IDE插件文档.
browser.runtime.sendMessage(SIDE_ID, {
uri: "/register",
verb: "post",
payload: {
name: "Selenium IDE plugin",
version: "1.0.0",
commands: [
{ id: "textUpperCase", name: "text upper case" }
]
}
}).catch(console.error);
命名规则在迁移后得以保留:插件命令仍然声明一次,然后在每个测试中重复使用,就像核心扩展一样。
常用的扩展程序和插件 Selenium IDE
以下列出的插件是旧版 IDE 中最常用的。其中一些插件,例如流程控制和故障截图功能,现在已内置到当前 IDE 中,或作为维护良好的插件提供。
| 姓名 | 目的 |
|---|---|
| 收藏 | 将测试套件标记为收藏并一键执行 |
| Flex Pilot X | 对于基于 Flex 的自动化 |
| FlexMonkium | 用于基于 Adobe Flex 的录制和播放 测试 in Selenium IDE |
| 文件记录 | 用于将日志保存在文件中 |
| 流量控制 | 控制测试执行流程 |
| 突出显示元素 | 突出显示 Web 控件 |
| 隐式等待 | 等待某个元素达到一定的时间限制 |
| 截图失败 | 失败时截屏 |
| 测试结果 | 拯救 测试用例 一次点击即可查看测试套件的结果 |
老 Selenium托管这些文件的HQ下载页面已不存在。当前的插件和IDE本身均通过以下方式分发: Selenium IDE 项目网站 以及来自 Chrome 浏览器的 Firefox 以及 Edge 插件商店。









