存储变量、Echo、Alert、PopUp 处理 Selenium IDE

⚡ 智能摘要

将命令存储到 Selenium IDE 将运行时值保存到命名变量中,echo 将它们打印到日志中,并且专用的命令系列处理警报、确认对话框和在多个浏览器窗口之间切换。

  • 🔘 创建一个变量: 存储命令接受以下值 Target 以及 Value 中的变量名。
  • ☑️ 复述一遍: 凡是命令接受目标或值的地方,都要将名称用 ${ } 包裹起来。
  • ✅ 用于调试的打印输出: echo 命令会将字符串字面值或变量直接写入 IDE 日志。
  • 🧪 提醒会自动接受: IDE 会自动点击“确定”,因此请使用 storeAlert 来捕获消息文本。
  • 🛠️ 确认需要做出决定: 将 chooseOkOnNextConfirmation 放在打开对话框的命令之前。
  • 📊 窗口切换: selectWindow 指定窗口标题,如果目标为空,则返回父窗口。

存储变量、回显、警告和弹出窗口处理 Selenium IDE

在本教程中,您将学习商店命令、echo 命令以及 alert 和 popup 的处理。 Selenium IDE这些命令共同将固定的录制脚本转换为能够对应用程序在运行时返回的任何内容做出反应的脚本。

⚠️ 关于版本的说明: 以下截图均来自原版 Firefox-插入 Selenium IDE,并且命令使用其驼峰式 Selenese 名称。当前 Chrome, Firefox Edge 扩展程序保持相同的行为,但大多数命令名称都包含空格。地图ping 表格出现在本文末尾附近,所有原始命令和屏幕截图均按发布时的状态保留。

Selenium IDE 变量

商店

将变量存储在 Selenium 我们使用 IDE 商店 命令。下图将值“tutorial”存储到名为“myVariable”的变量中。

Selenium IDE 将命令及其值教程保存到 myVariable 中

要访问变量,只需将其用 ${ … } 符号括起来即可。例如,要将“myVariable”的值输入到“userName”文本框中, Mercury 旅游,在值字段中输入 ${myVariable}。

Selenium 在 IDE 中,使用 ${myVariable} 作为用户名文本框的值字段中的命令

回显命令 Selenium IDE

存储的变量在被打印之前是不可见的,这就是…… 回音 该命令确实会执行此操作。它会在回放期间将消息写入 IDE 日志窗格,因此这是在构建断言之前确认存储命令是否捕获到预期内容的最快方法。

该命令接受以下两种形式之一:

  • 一个字符串字面值。 将文本放入 Target 例如,字段 登录步骤已完成,用于在长脚本中标记检查点。
  • 一个变量。 将 ${myVariable} 放入 Target 字段中存储的值会被打印出来,而不是字段名称。

两个习惯使得 echo 命令比乍看之下更有用。在创建变量的 store 命令之后立即打印该变量,这样即使失败也能立即显示出来。 trac将消息添加到捕获操作,而不是二十步之后的断言操作。并在每条消息前加上它所属的步骤,因为日志窗格会将所有命令显示在一个扁平列表中。请注意,echo 命令只会写入日志——它不会更改页面,也不会导致测试失败,因此可以安全地将其永久保留在脚本中。

存储元素呈现

此命令根据指定元素是否存在存储“true”或“false”。以下脚本将布尔值“true”存储到“var1”,将“false”存储到“var2”。为了验证,我们将使用 echo 命令显示 var1 和 var2 的值。 URL 下图所示设置为 Mercury 旅游主页。

Selenium IDE storeElementPresent 将 true 保存到 var1,将 false 保存到 var2,并在日志中回显。

商店文本

此命令用于将元素的内部文本存储到变量中。下图将 Facebook 注册页面上 h1 标签的内部文本存储到名为“textVar”的变量中。

Selenium IDE 的 storeText 命令将 css=h1 读取到 textVar 变量中

由于它是页面上唯一此类元素,因此可以安全地使用“css=h1”作为目标。下图显示了这一点。 Selenium IDE 能够将字符串“Sign Up”保存到“textVar”变量中,因为 echo 正确地打印了它的值。

Selenium IDE 日志窗格打印“注册”作为存储在 textVar 中的值

警报、弹出窗口和多重 Windows

提示框可能是最简单的弹出窗口形式。最常见的 Selenium 处理警报使用的 IDE 命令如下:

通知 使用

断言警报

断言不警报

检索警报消息并将其与您指定的字符串值进行比对。

断言警报呈现

断言警报不存在

判断是否存在警报
商店警报 检索警报消息并将其存储在您指定的变量中。
商店警报呈现 如果存在警报,则返回 TRUE,否则返回 FALSE。

验证警报

验证未警报

检索警报消息并验证它是否等于您指定的字符串值。

验证警报存在

验证警报不存在

验证是否存在警报

使用警报时请记住以下两点:

  • Selenium IDE 会自动点击警告窗口的“确定”按钮,因此您将无法看到实际的警告信息。
  • Selenium IDE 无法处理在页面 onload() 函数内部触发的警告框。它只能处理页面完全加载后生成的警告框。

在这个例子中,我们使用 storeAlert 命令来展示,即使 Selenium IDE虽然没有显示实际的警报,但仍然能够检索到该消息。

步骤1) In Selenium IDE,设置基本 URL 访问 http://jsbin.com。完整版 URL 网址是 http://jsbin.com/usidix。这些 jsbin 代码片段的年代可以追溯到…… Firefox-插件时代,可能不再有效;任何带有弹出警报按钮的页面都会出现相同的结果。

步骤2) 按照如下所示创建脚本。click 命令指向“Go!”按钮,storeAlert 将消息捕获到 alertMessage 中,echo 将其打印出来。

Selenium 使用 click、storeAlert 和 echo 命令对 jsbin 警告演示页面执行 IDE 脚本

步骤3) 执行脚本后,不要期望看到实际的警报。下面的日志窗格显示了捕获的消息,即使对话框从未显示。

Selenium IDE 日志显示了回放后 storeAlert 获取的警报文本。

确认

确认信息是弹出窗口,会提供“确定”和“取消”按钮,而警告信息只提供“确定”按钮。处理确认信息时可使用的命令与警告信息中的命令相同。

  • 断言确认 / 断言非确认
  • assertConfirmationPresent / assertConfirmationNotPresent
  • 商店确认
  • 商店确认信息
  • 验证确认 / 验证非确认
  • verifyConfirmationPresent / verifyConfirmationNotPresent

此外,这些命令还告诉 Selenium 选择哪个按钮,确定还是取消?

  • 选择“下一步确认”/ 选择“下一步确认”并等待
  • 选择下次确认时取消

请放置这些命令 before 触发确认框的命令,以便 Selenium IDE 会预先知道选择哪个选项。同样,在脚本执行过程中,您不会看到实际的确认框。

让我们测试一个网页,该网页上有一个按钮,其代码用于报告用户是按下了“确定”还是“取消”。

步骤1) In Selenium IDE,设置基本 URL 访问 http://jsbin.com。完整版 URL 是 http://jsbin.com/enifaf。

步骤2) 按照下方所示创建脚本。这次我们先按下“确定”按钮。

Selenium IDE脚本在点击打开对话框之前放置了 chooseOkOnNextConfirmation 事件。

步骤3) 执行脚本后,你会发现并没有看到实际的确认信息,但网页仍然会显示是哪个按钮。 Selenium IDE已按下。

测试页面报告确认对话框中的“确定”按钮已被按下

步骤4) 将 chooseOkOnNextConfirmation 命令替换为 chooseCancelOnNextConfirmation,然后再次执行脚本。页面现在会显示相反的选项。

Selenium IDE脚本已修改,使用chooseCancelOnNextConfirmation代替chooseOkOnNextConfirmation。

多 Windows

如果您点击的链接会打开一个单独的窗口,您必须先发出指令。 Selenium 在旧版 IDE 中,您需要先选中该窗口才能访问其中的元素。在旧版 IDE 中,您使用窗口标题作为定位符。

我们使用 selectWindow 命令在窗口之间切换。

我们将使用链接 http://jsbin.com/ocinaj/1,其标题为“First Window”。该页面上的“here”超链接会在新窗口中打开 Facebook,之后我们进行指示 Selenium IDE 执行以下操作:

  • 使用 selectWindow 命令,以窗口标题为定位符,将控制权从父窗口转移到新启动的 Facebook 窗口。
  • 请核对新窗口的标题。
  • 使用 selectWindow 命令,并将目标设置为“null”,再次选择原始窗口。
  • 确认当前选中窗口的标题。

上述计划可转化为此处所示的四步流程。

从父窗口切换到新窗口,然后再切换回来的示意图

步骤1) 设置基础 URL 访问 http://jsbin.com。

步骤2) 创建脚本,如下所示。

Selenium 使用 selectWindow、pause 和 verifyTitle 的 IDE 脚本可以在两个窗口之间切换

我们需要暂停命令来等待新启动的窗口加载完毕,然后才能读取其标题。

步骤3) 执行脚本。请注意 测试用例 通过了,这意味着我们能够在窗口之间切换并成功验证它们的标题。

绿灯通行结果 Selenium 在验证两个窗口标题后,IDE 的显示情况

请记住,将 selectWindow 目标设置为“null”会自动选择父窗口——在本例中,即元素“link=here”所在的窗口。

注意: 自本教程创建以来,Facebook 已更改其页面标题。请相应地修改脚本中的预期标题。

现代 Selenium 这些命令的 IDE 等效项

此 Firefox-plugin IDE 已停用 Firefox 已迁移到 WebExtensions 架构,以及当前的 Chrome 浏览器。 Firefox Edge 扩展程序将大多数 Selenese 命令重命名为带空格的形式。其行为未发生改变,因此您只需参考下表即可将上述脚本与当前安装进行比对。

本教程中的旧版命令 电流 Selenium IDE命令
商店 商店
回音 回音
存储文本 商店文本
storeElementPresent 存储元素存在(或断言元素存在)
assertAlert / verifyAlert 断言警报/验证警报
选择确定在下一步确认 下次确认时选择确定
选择下次确认时取消 下次确认时选择取消
选择窗口(标题作为目标) 选择句柄为 ${handle} 的窗口

有两点不同之处值得一提。旧文章中未涵盖的提示符现在有了自己的命令: 请回答下一个提示 在对话框出现之前就计划好回复,并且 webdriver 在可见提示符上作出响应 在已打开的提示符中输入内容。窗口切换不再依赖于页面标题。运行 商店橱窗把手 先获取句柄,然后传递 句柄=${yourHandle} 选择窗口。此更改消除了上述注释中描述的故障模式,即网站只需重命名其页面,脚本就无法找到窗口。官方 Selenium IDE 项目网站 列出所有当前命令。

常见问题

是的。`${myVariable}` 和 `${myvariable}` 指的是两个不同的变量,引用一个从未存储过的变量会返回空字符串,而不是抛出错误。为了避免出现静默的空白,请在整个测试套件中保持统一的命名规则。

是的。${ } 语法在任何情况下都会展开。 Target 或者使用值字段,这样它就可以在打开的命令、XPath 或 CSS 选择器中使用。这就是如何将录制的脚本转换为由运行早期捕获的数据驱动的脚本的方法。

Selenese 没有数学运算符。请使用带有小参数的 execute script 命令。 Java脚本表达式读取变量并返回结果,然后存储该返回值。请记住,所有存储的值都是以字符串形式传入的,因此需要先进行转换。

将它们视为单个测试的局部变量。依赖先前测试设置的值会使测试套件依赖于测试顺序,并且难以调试,因此请将测试所需的变量存储在该测试内部,或者在测试开始时从数据文件中读取。

提示信息需要文本,而不仅仅是一个按钮选项。可以在打开提示信息的命令之前,将回复内容放在“值”字段中,然后在下一个提示信息中运行答案;或者,当对话框已显示在屏幕上时,可以使用 WebDriver 在可见提示信息中执行答案操作。

机器学习工具可以根据场景的简单语言描述提出命令序列,并生成比记录器更可靠的定位器。人工智能辅助的定位器修复也很有帮助,因为元素重命名是导致存储值返回为空的常见原因。

是的。将测试导出到 Java or Python然后让 Copilot 将扁平化的命令列表重构为页面对象和可重用的等待操作。手动检查警告处理,因为生成的代码通常假定对话框可见,而 IDE 可能已经将其关闭。

基于标题的选择方式容易产生歧义,可能会选错窗口。这正是当前 IDE 更倾向于使用句柄的原因:在窗口打开后立即捕获一个句柄并存储,然后使用 handle=${yourHandle} 进行切换。

总结一下这篇文章: