基于 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 脚本

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

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

    • 使用设备回放

      Copy code
      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

    Copy code
    AIUtil("combobox", "Cell Phone").Type "Pixel 2"
    wait 5    
    Device("Device").Enterkeys typeKey, "Enter"

    提示: 如果移动设备处理键盘输入的速度较慢,则在将键发送到应用程序之前添加一个等待步骤。

    有关详细信息,请参阅设备对象的 EnterKeys 方法

示例 2: 在桌面浏览器上写入之前清除文本框

使用设备回放

Copy code
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 之后没有在搜索框中键入文本

建议的解决方案

Copy code
AIUtil("search").Click
'Wait a while until the search box is displayed
wait 2
AIUtil("search").Search "telekom"

场景 2

单击搜索图标后,搜索框未处于焦点,显示两个搜索图标

建议的解决方案

Copy code
AIUtil("search").Click
'Wait a while until the search box is displayed
wait 2
AIUtil("search",micNoText,micFromBottom,1).Search "telekom"

场景 3

单击搜索图标后,搜索图标消失并且搜索框未处于焦点

建议的解决方案

Copy code
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 方法在应用程序的可滚动窗格中查找对象。

Copy code
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 执行水平滚动。

Copy code
' 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

返回页首

另请参见: