基于 AI 的测试的提示和技巧

移动、Web 和基于 Windows 的 SAP GUI 测试

本主题提供编写基于 AI 的测试的提示和技巧。

包含 SetContext 步骤

当您首次启动检查并选择一个应用程序 (例如网页) 时,建议使用 SetContext 步骤。在添加任何其他 AIUtil 步骤之前,确保单击“添加到测试”以将该步骤添加到您的操作中。SetContext 步骤告诉 AI 引擎要交互的对象。

当您切换到另一个选项卡或打开应用程序对话框时,上下文可能会发生变化。对于这些情况,使用检查来创建 SetContext 步骤以添加到测试中。

对象标识提示

此部分列出了一些常见的对象标识建议。有关其他详细信息,请参阅请参阅 "改进基于 AI 的测试对象标识"

已延迟重新检查

如果只有当您将鼠标悬停在项目上时才会出现弹出窗口或菜单,请使用已延迟重新检查选项。启动已延迟重新检查,然后将鼠标悬停在某个项目上以显示您想要捕获的对象。有关详细信息,请参阅请参阅 "检查下一个应用程序页面/屏幕"

RegisterCustomClass

如果您的应用程序包含 AI 对象标识不支持的对象类型,您可以注册一个自定义类来表示它。有关详细信息,请参阅请参阅 "使用图像描述对象"

使用 VRI

为了帮助唯一且一致地标识某个对象,请根据其附近的其他对象来描述该对象。有关详细信息,请参阅请参阅 "通过相对位置标识对象"

变化的文本字符串

要标识应用程序中随时间变化的文本 (例如价格、税额或总额),请考虑以下事项: 

  • 使用正则表达式并根据文本字符串的永久部分或格式进行标识。有关详细信息,请参阅请参阅 "使用正则表达式"

  • 对于对象的文本描述,使用 FindText 而不是 FindTextBlockFindText 搜索字符串或子字符串,而 FindTextBlock 查找与对象全文匹配的内容。有关详细信息,请参阅对象模型参考中的 FindTextFindTextBlock

基于 AI 的测试中的文本识别

使用文本标识 AI 对象时请记住以下几点。

  • 如果 AI OCR 无法准确识别应用程序中的文本,您可以切换到 UFT OCR,并为您的应用程序自定义该 OCR。这可以通过选项中的设置来完成,也可以在运行时使用脚本命令来完成。有关详细信息,请参阅请参阅 "配置文本识别选项"。如果 AI OCR 准确,则利用它来发挥其较快的性能。

  • 检查会标识应用程序中显示的所有对象,而测试运行则会搜索指定的对象。请记住,在每个场景中,文本的标识方式可能有所不同。

    例如:

    • 有时 OCR 在检查过程中会将某个数字识别为字母,但使用该数字描述对象的测试步骤仍可成功运行。这是因为基于 AI 的机制仍然可以标识文本,只是置信度略低。

    • 当您的录制中出现一些意外的文字 (例如 "PA SSWO rd") 时,可能是字体被轻度误解了。但是,您可以将该文本更改为更符合预期的文本,例如 "Password",这样该步骤就可以成功运行。

  • 防止对拼写错误的文本进行 OCR 失败。运行测试时,OCR 无法标识带有拼写错误指示的文本,例如文本下方的波浪线。

    使用以下解决方案之一:

    • 在您的浏览器或应用程序中停用拼写检查。

    • 将焦点从带有拼写错误文本的字段上移开。为此,请在您的测试中添加一个步骤,该步骤在检索文本的步骤之前单击文本字段之外的某处。

性能

以下情况会影响基于 AI 的测试的性能: 

通过最大限度地减少测试运行期间的重新检查来提高性能

每个 AIUtil 命令对应用程序上下文执行全面扫描。如果您知道应用程序预期不会在步骤之间发生变化,请使用 AIUtil.Context.FreezeUnFreeze 方法防止重新检查。

使用 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 脚本

      AIUtil("combobox", "Cell Phone").Type "Pixel 2" Dim mySendKeys Set mySendKeys = CreateObject("WScript.shell") 'Send Enter key mySendKeys.SendKeys("~")

      有关 Windows 脚本宿主中 SendKeys 方法的详细信息,请参阅 Microsoft VBScript 参考。

    • 使用设备回放

      AIUtil("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

    AIUtil("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.ScrollAIUtil.ScrollOnObject 在 SAP GUI 应用程序上不提供水平滚动,您可以使用 AIUtil.ClickAIUtil.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

另请参见: