常见问题解答
如何记录悬停操作?
鼠标悬停(又称悬停)操作很难在记录周期中自动捕获。
要在测试中添加悬停操作,需要进行少量的手动干预。有两种不同的方法可以做到这一点。
选项 1:在录制时添加
- 录制时,右键单击要悬停的元素
- 从出现的菜单中,单击
Selenium IDE
,然后单击鼠标悬停
- 确认
鼠标悬停
测试步骤在测试中的位置正确(如果需要,可以将其拖放到其他位置)
选项 2:在测试编辑器中手动添加
- 右键单击 IDE 中的测试步骤
- 选择
插入新命令
- 在
命令
输入字段中键入鼠标悬停
- 在
目标
输入字段中键入要悬停的定位符(或单击选择页面中的目标
并选择要悬停的元素)
为什么键入日期输入字段的数字不会正确显示?
当通过 Selenium IDE 的命令行运行程序时,会出现此问题。
要解决此问题,您需要启用 w3c 模式,可以通过在启动运行程序时传递 -c "chromeOptions.w3c=true"
来启用。
值得注意的是,启用 w3c 模式可能会影响 Selenium Actions 的性能(如果您的测试最终使用它们),因此只有在日期输入字段出现问题时才使用此模式。
如何让 IDE 在继续执行之前等待某个条件为真?
在某些情况下,IDE 中内置的等待策略是不够的。发生这种情况时,您可以使用可用的显式等待命令之一。
等待元素可编辑
等待元素出现
等待元素可见
等待元素不可编辑
等待元素不存在
等待元素不可见
如何在文本验证中使用正则表达式?
这是我们最终会添加的功能(有关详细信息,请参阅 问题 141)。作为一种解决方法,您可以使用带有 starts-with
和 contains
关键字的 XPath 定位器。
命令 | 目标 | 值 |
---|---|---|
assertElementPresent | //a@[starts-with(.,'you are the') and contains(.,'User to log in today')] |
如何滚动?
Selenium IDE 中没有用于滚动的特定命令,因为 Selenium 中没有实现此命令。相反,你可以使用 JavaScript 中的 scrollTo
命令通过指定要滚动到的 x
和 y
坐标来实现此目的。
命令 | 目标 | 值 |
---|---|---|
executeScript | window.scrollTo(0,1000) |
保存文件
为什么我保存 SIDE 项目的位置没有被记住?
为什么每次我想保存我的项目时都需要经历一个“另存为”流程?
为什么我需要覆盖以前保存的文件?
所有这些问题都是同一个问题的一部分——作为浏览器扩展,Selenium IDE 无法访问文件系统。提供“保存”功能的唯一方法是下载文件。当 IDE 转移到本机应用程序时,此问题将得到解决。这将为 IDE 提供高级文件系统访问权限,从而使其能够提供完善的“保存”体验。
如果您想保持更新,可以关注 问题 363。
如何在严格的代理/防火墙后面安装 IDE?
在某些情况下,您可能无法完全访问公共互联网(例如在“公司代理或防火墙”后面)。在这些环境中,您需要获取构建的 Selenium IDE ZIP 文件副本,以便记录自动测试脚本。这可在 GitHub 的“版本”部分中获得,网址为
https://github.com/SeleniumHQ/selenium-ide/releases
并非所有版本都包含“selenium-ide.zip”,因为有些只是“源代码”版本。寻找包含此 zip 文件的最新版本。这意味着它是提交给 Chrome 和 Firefox 商店的最新版本。
官方签名版本
从项目发布页面下载 zip 文件会提供一个未签名的 ZIP 文件。或者,你可以从以下位置获取官方签名的安装程序,它们与“安全环境”配合得更好
注意:如果你已经安装了插件(例如,在你要尝试获取安装程序副本的笔记本电脑上),则在尝试访问它们时只会看到移除按钮。因此,请先将其移除,获取安装程序以移动到另一台未连接的计算机,然后根据需要重新安装在你的主设备的浏览器中。
注意:你无法直接从 Chrome 商店获取“.crx”文件。相反,你需要在本地安装一次,然后转到计算机上的安装目录以检索它。
附加插件后为何不显示保存对话框?
由于当前的 Chrome bug,如果你不回复 Selenium IDE 发出的消息,则不会进行进一步的处理。为了解决此问题,请确保使用实体 project
侦听操作 emit
,并回复 undefined
chrome.runtime.onMessageExternal.addListener((message, sender, sendResponse) => {
if (message.action === "emit" && message.entity === "project") {
sendResponse(undefined);
}
});