基于 AI 的测试的提示和技巧
移动、Web 和基于 Windows 的 SAP GUI 测试
本主题提供编写基于 AI 的测试的提示和技巧。
包含 SetContext 步骤
当您首次启动检查并选择一个应用程序 (例如网页) 时,建议使用 SetContext 步骤。在添加任何其他 AIUtil 步骤之前,确保单击“添加到测试”以将该步骤添加到您的操作中。SetContext 步骤告诉 AI 引擎要交互的对象。
当您切换到另一个选项卡或打开应用程序对话框时,上下文可能会发生变化。对于这些情况,使用检查来创建 SetContext 步骤以添加到测试中。
对象标识提示
此部分列出了一些常见的对象标识建议。有关其他详细信息,请参阅改进基于 AI 的测试对象标识。
已延迟重新检查
如果只有当您将鼠标悬停在项目上时才会出现弹出窗口或菜单,请使用已延迟重新检查选项。启动已延迟重新检查,然后将鼠标悬停在某个项目上以显示您想要捕获的对象。有关详细信息,请参阅检查下一个应用程序页面/屏幕。
RegisterCustomClass
如果您的应用程序包含 AI 对象标识不支持的对象类型,您可以注册一个自定义类来表示它。有关详细信息,请参阅使用图像描述对象。
使用 VRI
为了帮助唯一且一致地标识某个对象,请根据其附近的其他对象来描述该对象。有关详细信息,请参阅通过相对位置标识对象。
变化的文本字符串
要标识应用程序中随时间变化的文本 (例如价格、税额或总额),请考虑以下事项:
-
使用正则表达式并根据文本字符串的永久部分或格式进行标识。有关详细信息,请参阅使用正则表达式。
-
对于对象的文本描述,使用 FindText 而不是 FindTextBlock。FindText 搜索字符串或子字符串,而 FindTextBlock 查找与对象全文匹配的内容。有关详细信息,请参阅对象模型参考中的 FindText 和 FindTextBlock。
基于 AI 的测试中的文本识别
使用文本标识 AI 对象时请记住以下几点。
-
如果 AI OCR 无法准确识别应用程序中的文本,您可以切换到 UFT OCR,并为您的应用程序自定义该 OCR。这可以通过选项中的设置来完成,也可以在运行时使用脚本命令来完成。有关详细信息,请参阅配置文本识别选项。如果 AI OCR 准确,则利用它来发挥其较快的性能。
-
检查会标识应用程序中显示的所有对象,而测试运行则会搜索指定的对象。请记住,在每个场景中,文本的标识方式可能有所不同。
例如:
-
有时 OCR 在检查过程中会将某个数字识别为字母,但使用该数字描述对象的测试步骤仍可成功运行。这是因为基于 AI 的机制仍然可以标识文本,只是置信度略低。
-
当您的录制中出现一些意外的文字 (例如 "PA SSWO rd") 时,可能是字体被轻度误解了。但是,您可以将该文本更改为更符合预期的文本,例如 "Password",这样该步骤就可以成功运行。
-
-
防止对拼写错误的文本进行 OCR 失败。运行测试时,OCR 无法标识带有拼写错误指示的文本,例如文本下方的波浪线。
使用以下解决方案之一:
-
在您的浏览器或应用程序中停用拼写检查。
-
将焦点从带有拼写错误文本的字段上移开。为此,请在您的测试中添加一个步骤,该步骤在检索文本的步骤之前单击文本字段之外的某处。
-
性能
以下情况会影响基于 AI 的测试的性能:
通过最大限度地减少测试运行期间的重新检查来提高性能
每个 AIUtil 命令对应用程序上下文执行全面扫描。如果您知道应用程序预期不会在步骤之间发生变化,请使用 AIUtil.Context.Freeze 和 UnFreeze 方法防止重新检查。
使用 GPU
AI 对象检测需要大量计算。使用 GPU 计算机运行 AI 对象检测服务将有助于它运行得更快。但是,根据您的需求,不使用 GPU 实现的性能可能已经足够了。
谨慎使用验证对象标识选项
在运行步骤之前验证对象标识会减慢测试运行速度。您可以关闭验证,但必须确保应用程序已完成更改,然后才能继续下一步。例如,验证有助于确定飞入应用程序的对象的位置,因为它可以确定对象的最终位置。如果您的应用程序的某些部分是动态的,而其他部分是静态的,则您可能需要动态地关闭和打开验证。有关详细信息,请参阅验证对象标识。
了解如何将基于属性的测试步骤转换为基于 AI 的测试步骤
在启用了 AI 转换助手的情况下运行测试,以接收有关将基于技术的测试步骤转换为基于 AI 的测试步骤的建议。将现有步骤替换为建议的 AI 对象步骤,以创建更具弹性且与平台无关的测试。
要在“工具”>“选项”>“GUI 测试”>“AI”中启用此助手,请选择“将运行结果替换为 AI 对象建议”。
选择此选项时,您的测试运行结果不会反映测试结果。相反,该报告为可将基于属性的测试对象替换为 AI 对象的任何步骤提供 AI 对象和操作建议。
备注: AI 转换助手不提供 AITable 或 AICalendar 对象建议。
将键盘命令发送给 AI 对象
在某些应用程序中,对 AI 对象执行的 Type 操作需要使用其他键盘命令,例如按 Enter。您可以使用适用于桌面浏览器的“Windows 脚本”或“设备回放”以及适用于移动应用程序的 Device.EnterKeys 来模拟此命令。
示例 1: 在“手机”组合框中输入型号名称并发送 Enter 键以触发选择
-
对于桌面浏览器
-
使用 Windows 脚本
Copy codeAIUtil("combobox", "Cell Phone").Type "Pixel 2"
Dim mySendKeys
Set mySendKeys = CreateObject("WScript.shell")
'Send Enter key
mySendKeys.SendKeys("~")有关 Windows 脚本宿主中 SendKeys 方法的详细信息,请参阅 Microsoft VBScript 参考。
-
使用设备回放
Copy codeAIUtil("combobox", "Cell Phone").Type "Pixel 2"
wait 5
Dim myDeviceReplay
Set myDeviceReplay = CreateObject("Mercury.DeviceReplay")
myDeviceReplay.PressKey 28 'Send Enter key
' Other example keys:
' myDeviceReplay.PressKey 14 'Send Backspace
' myDeviceReplay.PressKey 211 'Send Delete
' myDeviceReplay.PressKey 15 'Send Tab
' myDeviceReplay.PressKey 199 'Send Home有关详细信息,请参阅 对象模型参考中的 DeviceReplay 对象。
-
-
对于移动应用程序
使用 Device.EnterKeys
Copy codeAIUtil("combobox", "Cell Phone").Type "Pixel 2"
wait 5
Device("Device").Enterkeys typeKey, "Enter"提示: 如果移动设备处理键盘输入的速度较慢,则在将键发送到应用程序之前添加一个等待步骤。
有关详细信息,请参阅设备对象的 EnterKeys 方法。
示例 2: 在桌面浏览器上写入之前清除文本框
使用设备回放
Sub CleanInputField(Label)
AIUtil(input,Label).Click
Dim myDeviceReplay
Set myDeviceReplay = CreateObject("Mercury.DeviceReplay")
for i = 1 to 25
myDeviceReplay.PressKey 14
next
end sub
上下文冻结期间的运行结果屏幕捕获
经过 AIUtil.Context.Freeze 步骤后,基于 AI 的步骤的运行结果屏幕捕获反映了已冻结上下文。应用程序中发生的更改不会被捕获。
要捕获应用程序中发生的更改,请执行以下操作之一:
-
解除上下文冻结。
-
在顶层对象上添加 CaptureBitmap 步骤,例如“浏览器”或者“设备”。然后使用 Reporter.ReportHtmlEvent 将位图添加到结果中。
-
如果您为每个步骤配置了将屏幕捕获保存到结果中,请在顶层对象上添加“等待”或者“同步”步骤,例如“浏览器”或者“设备”。
-
配置运行结果以包含视频。
处理 AIUtil("search").Search 不执行搜索的情况
在某些应用程序中,单击搜索图标后会显示搜索框。在这些情况下,AIUtil("search").Search 可能无法在应用程序中执行搜索操作。
您可以使用多个步骤执行搜索,如以下示例所示:
场景 1
AIUtil("search").Search 之后没有在搜索框中键入文本
建议的解决方案
AIUtil("search").Click
'Wait a while until the search box is displayed
wait 2
AIUtil("search").Search "telekom"
场景 2
单击搜索图标后,搜索框未处于焦点,显示两个搜索图标
建议的解决方案
AIUtil("search").Click
'Wait a while until the search box is displayed
wait 2
AIUtil("search",micNoText,micFromBottom,1).Search "telekom"
场景 3
单击搜索图标后,搜索图标消失并且搜索框未处于焦点
建议的解决方案
AIUtil("search").Click
'Wait a while until the search box is displayed
wait 2
AIUtil("input","search").Type "telekom"
'Press Enter key
Dim myDeviceReplay
Set myDeviceReplay = CreateObject("Mercury.DeviceReplay")
myDeviceReplay.PressKey 28
在可滚动窗格中查找对象
此示例演示如何使用 AIUtil.Scroll 方法在应用程序的可滚动窗格中查找对象。
Set ObjBrowser= Browser("creationtime:=1")
ObjBrowser.Maximize
AIUtil.SetContext ObjBrowser
'---------------------------------------------------------------------------------------
ObjBrowser.Navigate https://www.youtube.com/
ObjBrowser.Sync
'wait(2)
'---------------------------------------------------------------------------------------
print ClickAndScrollTo ( AIUtil("home"), AIUtil.FindTextBlock("Report history"))
'---------------------------------------------------------------------------------------
ObjBrowser.Navigate https://usa.banggood.com
ObjBrowser.Sync
'wait(2)
-----------------------------------------------------------------------------------------
print ClickAndScrollTo (AIUtil("down_triangle", micAnyText, micFromTop, 5), AIUtil.FindTextBlock("Home Appliances", micFromBottom, 1))
'--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Function ClickAndScrollTo (ObjStart, ObjTarget)
ClickAndScrollTo=false
AIUtil.RunSettings.AutoScroll.Disable
ObjStart.Highlight
ObjStart.Click
For i = 1 To 4
if ObjTarget.Exist(0) then
ObjTarget.Highlight
ObjTarget.hover
ClickAndScrollTo=true
exit function
end if
'ScrollUsingPointerPosition([in] micAIScrollDirection direction, [in] double numberOfWheelTicks);
'Move the mouse over the scroll object using AIUtil.Hover or another method, for example device replay
AIUtil.Scroll "down", 1
Next
End Function
SAP GUI 应用程序上的水平滚动
如果 AIUtil.Scroll 和 AIUtil.ScrollOnObject 在 SAP GUI 应用程序上不提供水平滚动,您可以使用 AIUtil.Click 和 AIUtil.MultiClick 执行水平滚动。
' Click the right triangle to perform right scrolling
' If there are more than one right_triangles, you can identify the control by relative location.
Set ObjRightTriangle = AIUtil("right_triangle")
'Click the right triangle four times
ObjRightTriangle.MultiClick 4
' Click the left triangle to perform left scrolling
Set ObjLeftTriangle = AIUtil("left_triangle")
'Click the left triangle
ObjLeftTriangle.Click
另请参见: