AI Agent处理循环、条件等逻辑

99 阅读5分钟

当UI自动化测试从传统代码转向自然语言时,如何处理循环、条件等编程逻辑,是衡量一个AI Agent能力的关键。

简单的自然语言指令(如“点击登录按钮”)很容易实现,但循环操作(如“将购物车里的所有商品都删除”)则需要更高级的抽象能力。

以下是目前主流AI Agent实现“循环操作”的几种方式,从最简单直观到最强大灵活:


方式一:利用“复数”和“量词”的隐式循环 (Implicit Loops)

这是最符合自然语言习惯的方式。AI Agent足够智能,能够理解指令中的复数名词或量词(如“所有”、“每个”、“前3个”),并自动将其转换为循环操作。

自然语言指令示例:

  • Click all "Add to Cart" buttons on the page.
    (点击页面上所有的“添加到购物车”按钮。)
  • Verify that every product image is displayed.
    (验证每个产品图片都已显示。)
  • Delete the first 3 items from the wishlist.
    (从心愿单中删除前3个商品。)
  • For each search result, verify it contains the text "Laptop".
    (对于每一个搜索结果,验证其包含文本“Laptop”。)

实现原理:

  1. 识别意图:AI Agent首先识别出这是一个针对多个元素的操作。
  2. 元素定位:它会生成一个能匹配所有目标元素的定位器(如CSS Selector button.add-to-cart 或XPath)。
  3. 迭代执行:AI Agent在后台自动生成一个for循环,遍历所有找到的元素,并对每个元素执行指定的操作(点击、验证等)。

优缺点:

  • 优点:最直观、最“自然”的方式,几乎没有学习成本。
  • 缺点:对于复杂的循环逻辑(如嵌套循环、带条件的循环)可能表达不清,容易产生歧义。

方式二:数据驱动的循环 (Data-Driven Loops)

这是从传统测试中借鉴的经典模式,非常强大且结构清晰。你将需要迭代的数据(如用户名、商品名称)放在一个表格中,然后用一句自然语言指令来处理整个表格。

这种方式在 Gherkin 语言(用于Cucumber、Behave等BDD框架)中非常普遍,现代AI Agent也广泛支持。

自然语言指令示例:

场景1:使用不同的账户登录

Generated gherkin

Given I am on the login page
When I try to login with the following accounts:
  | username              | password        |
  | user_valid@test.com   | Password123!    |
  | user_invalid@test.com | wrongpassword   |
  |                       | somepassword    |
Then I should see the corresponding result for each.

content_copydownload

Use code with caution.Gherkin

场景2:搜索多个商品并验证

Generated gherkin

When I search for the following products:
  | product_name |
  | MacBook Pro  |
  | Dell XPS 15  |
  | Magic Mouse  |
Then each product should appear in the search results.

content_copydownload

Use code with caution.Gherkin

实现原理:

  1. 解析表格:AI测试框架会解析这个表格,将其视为一个数据列表。
  2. 绑定步骤:When I try to login with the following accounts: 这一步的背后实现是一个循环结构。
  3. 迭代执行:该循环会遍历表格的每一行,将行中的数据(如username和password)作为参数,重复执行登录操作。

优缺点:

  • 优点:结构极其清晰,将测试逻辑和测试数据完美分离。非技术人员可以只通过修改表格来增加测试用例。
  • 缺点:需要遵循特定的格式(如Gherkin表格语法),不如纯自然语言自由。

方式三:使用“显式循环”关键词 (Explicit Loop Keywords)

这种方式是在自然语言中引入了类似编程的、明确的循环关键词,如 For each, Repeat, While。这让自然语言的表达能力大大增强,可以处理更复杂的逻辑。

自然语言指令示例:

  • For-Each循环 (遍历元素集合)
    For each "product card" in the "product list":
    Click the "Add to Wishlist" icon
    Verify the text "Added to Wishlist" appears
  • Repeat循环 (固定次数)
    Repeat 5 times:
    Click the "Next Page" button
    Wait for the page to load
  • While循环 (条件循环)
    While the "Loading..." spinner is visible:
    Wait for 1 second
    Verify the "Order Summary" section is now visible

实现原理:

AI Agent的解析器被专门训练来识别这些关键词。当它看到 For each...in...: 时,它知道需要:

  1. 定位父容器元素(如 "product list")。
  2. 在父容器内定位所有子项元素(如 "product card")。
  3. 生成一个for...of循环来遍历子项,并执行缩进块内的指令。
    对于 While,它会生成一个while循环,其条件是检查某个元素是否可见。

优缺点:

  • 优点:非常强大和灵活,能够精确地表达复杂的循环和条件逻辑。
  • 缺点:这已经是一种“领域特定语言”(DSL),用户需要学习这些特定的关键词和语法结构,偏离了纯粹的自然语言。

总结与选择

方式核心思想最佳使用场景灵活度学习成本
隐式循环利用复数和量词简单的、针对同类元素的批量操作极低
数据驱动逻辑与数据分离需要用多组不同数据重复同一流程的场景
显式循环引入编程关键词复杂的、需要精确控制的循环逻辑(如分页、轮询)

如何选择?

  • 对于简单任务,直接使用隐式循环(方式一)是最快、最自然的选择。现代AI测试工具(如Reflect, Mabl)对此支持得很好。
  • 对于需要覆盖大量测试数据的回归测试数据驱动(方式二)是最佳实践,它能让你的测试用例集非常易于维护和扩展。
  • 对于需要处理动态加载、分页、轮询等复杂交互的场景显式循环(方式三)提供了必要的控制能力,尽管它需要你学习一些特定的语法。