培训内容大纲:
(一) 开场:我们为何需要改变? (约 5-10 分钟)
- 痛点回顾 (引发共鸣):
- “大家有没有遇到过,辛辛苦苦开发的流程,目标系统界面稍微一变,比如按钮换个位置、文字改动一下,流程就跑失败了?”
- “或者,好几个项目都要操作同一个内部系统,每次都要重复去抓那些登录框、按钮,是不是很繁琐?维护起来是不是更头疼?”
- “调试时,是不是经常在
Attach Browser
/Attach Window
这些活动上花费很多时间,处理窗口找不到的问题?”
- 引出主题: UiPath 也在不断进化,为了解决这些痛点,推出了“现代设计体验 (Modern Design Experience)”和“对象存储库 (Object Repository)”。今天我们就来一起探索,这对“黄金搭档”如何让我们的自动化开发工作更轻松、更可靠!
- 今日议程简介: 我们会了解概念 -> 对比新旧 -> 看优势 -> 实战演练 -> 总结技巧。
(二) 核心概念解析 (约 15-20 分钟)
什么是“现代设计体验” (Modern Design Experience)?
- 不是简单的换皮肤: 它是一套全新的设计理念和底层技术 (基于最新的 UI Automation 活动包),目标是让自动化开发更简单、更智能、更稳定。
- 核心亮点 (通俗讲解):
- “万能钥匙” -
Use Application/Browser
活动: 想象一下,以前开门需要找对钥匙(Open Browser
,Attach Window
等),现在有了一把“万能钥匙”,它能自动识别是网页还是桌面应用,并且智能地决定是打开还是附加,还能更好地管理这个应用“领域”内的所有操作。代码更整洁,管理更省心! - “火眼金睛” - 增强的目标识别:
- 传统方式: 主要靠精确的“地址”(选取器 Selector)找元素,地址稍有变化就找不到。
- 现代方式:
- 模糊查找 (Fuzzy Selector): 就像我们找人,即使对方换了件衣服(属性微变),也能大致认出来。
- 图像识别 (Image): 作为备选,实在找不到“地址”,就按“长相”找。
- 计算机视觉 (CV): 更高级的“视觉”,能像人一样“看”屏幕,特别适合 Citrix 或一些特殊界面。
- 锚点 (Anchors): 给目标元素找个“参照物”(比如旁边的标签),即使目标自己有点“飘”,只要参照物和相对位置不变,就能准确定位。相当于导航时说“在那个红色邮筒旁边”。
- 更聪明的录制器 (App/Web Recorder): 录制过程更流畅,生成的活动和选取器更可靠,还能直接把抓到的元素存到“宝库”里。
- 更简洁的界面: 活动面板更清爽,常用设置(如超时)更易配置。
- “万能钥匙” -
什么是“对象存储库” (Object Repository)?
- UI 元素的“中央档案馆”: 想象一下,我们把项目中所有用到的按钮、输入框、标签等界面元素,连同它们的“身份证信息”(选取器、屏幕截图、锚点设置等),都集中存放在一个结构清晰的地方。
- 核心价值 (类比说明):
- 告别重复劳动 (Reusability): 同一个登录按钮,定义一次,到处拖拽使用。就像共享文档,不需要每个人都复制一份。
- 维护的“福音” (Maintainability): 如果那个登录按钮的样式变了导致找不到,我们不再需要去每个用到它的地方修改,只需到“档案馆”里更新这个按钮的“身份证信息”,所有地方自动生效!省时省力,还不容易出错。
- 团队协作的利器 (Collaboration): 可以把常用系统的元素打包成“UI 库”,分享给团队其他成员或其他项目使用,确保大家用的是同一套标准,代码更规范。
- 结构化管理 (Structure): 按 应用程序 -> 屏幕/窗口 -> 元素 的层级存放,一目了然,找东西更方便。
(三) 新旧对比:现代设计带来了哪些改变? (约 10 分钟)
- 展示关键对比表格 (参考之前的回答): 重点突出以下几点:
Use Application/Browser
vs.Attach/Open
系列:强调统一、智能、稳定。- 目标识别技术:强调现代方式的鲁棒性(模糊、图像、锚点集成)。
- 对象存储库集成度:强调现代设计的原生集成和强制使用选项。
- 活动和录制器:强调简洁、高效。
- 互动提问: “大家根据自己的经验,觉得哪个改变对解决我们之前的痛点最有帮助?”
(四) 强强联合:现代设计 + 对象存储库的威力 (约 10 分钟)
- 强调 1+1 > 2: 它们不是孤立的,而是设计来协同工作的。
- 如何协同?
- 现代设计活动 (如
Type Into
,Click
) 可以直接从对象存储库拖拽元素来创建和配置。 - 现代设计强大的目标识别能力 (锚点、模糊选取器等) 被保存在对象存储库的元素描述符中,使得这些可重用的元素本身就非常稳定。
- App/Web Recorder 在录制时就能直接将识别到的元素及其高级定位信息存入对象存储库。
- 现代设计活动 (如
- 总结核心优势 (再次强调):
- 极致的稳定性: 最大程度减少因 UI 变动导致的流程失败。
- 飞跃的开发效率: 元素重用、快速生成活动,开发速度更快。
- 前所未有的可维护性: 更新维护工作量指数级下降。
- 标准化的团队协作: 代码更规范,知识易传承。
(五) 实战演练:动态 Web 数据处理场景 (约 20-25 分钟)
- 场景设定 (重述并简化): “假设我们要从一个产品经常更新的网站 (模拟
dynamic-product-catalog.com
) 查最新的价格,然后填到我们的桌面库存管理软件 (InternalStockManager.exe
) 里。这个网站有时会调整按钮文字或布局。” - 现场演示 (结合 Studio):
- 创建 OR 结构:
- 展示如何启动“捕获元素”或 App/Web Recorder。
- 捕获 Web 应用 (
DynamicCatalogWebApp
) 和屏幕 (ProductSearchPage
)。 - 重点演示: 捕获“搜索”按钮 (
SearchButton
) 时,刻意展示如何添加旁边的输入框作为 锚点,并勾选或查看 模糊选取器 设置。将其存入 OR。[动作: 指向 Studio 界面] - 简单捕获桌面应用 (
StockManagerApp
) 的几个输入框和保存按钮,存入 OR。展示 OR 的层级结构。[动作: 展示 OR 面板]
- 构建工作流片段:
- 拖拽
DynamicCatalogWebApp
到画布,生成Use Application/Browser
。配置 URL。 - 重点演示: 从 OR 拖拽
SearchButton
到Use Application/Browser
内部,自动创建Click
活动。“看,就这么简单,不用再去屏幕上点选了!” - 同样方式创建
Type Into
活动,关联SearchInput
。 - 拖拽
StockManagerApp
,生成第二个Use Application/Browser
(用于桌面应用)。 - 从 OR 拖拽桌面应用的元素,创建相应的
Type Into
和Click
。
- 拖拽
- 模拟 UI 变化与维护:
- 讲解 (或模拟): “假设网站更新,‘Search’ 按钮的内部 ID 变了,或者文字改成了 ‘Find Products’。”
- 重点演示:
- “如果我们用的是传统方式,现在流程就挂了,得去找那个 Click 活动重新选元素。”
- “但用了 OR,我们只需要... [动作: 右键点击 OR 中的
SearchButton
-> 编辑描述符 (Edit Descriptor)] ...在这里更新它的识别信息,比如重新指示一下元素,或者调整选取器/锚点设置。” - “点击保存... 好了!所有用到这个按钮的地方,现在都自动指向了更新后的元素,我们甚至都不用打开那个工作流文件!” 强调这个维护的便捷性。
- (可选,如果时间允许) 提及现代表格提取: 简单展示下现代的表格提取向导,说明它对动态加载等场景的支持更好。
- 创建 OR 结构:
- 演示过程中的互动: “大家看明白这个操作了吗?对比以前的方式,感觉怎么样?”
(六) 总结与最佳实践 (约 5-10 分钟)
- 给同事的建议 (Best Practices):
- 大胆拥抱: 新项目优先/强制使用现代设计。
- OR 优先: 尽可能先规划和构建对象存储库,再开始写逻辑。把它当作项目资产来管理。
- 命名规范: 在 OR 中给应用程序、屏幕、元素起清晰、有意义的名字。
- 善用“火眼金睛”: 捕获元素时,多检查和利用锚点、模糊选取器等选项,验证目标确保准确性。
- 考虑共享: 如果某个系统(如 ERP、CRM)被多个项目使用,强烈建议创建 UI 库来共享 OR 元素。
- 逐步迁移: 老项目不一定马上重构,但新功能或维护时可以考虑引入现代活动和 OR。
- 鼓励的话: “刚开始可能会有点不习惯,但相信我,一旦熟练掌握,你会爱上这种开发方式的!”
(七) Q&A 环节 (按需)
- 预留时间解答同事们可能有的疑问,例如:
- “老项目迁移到现代设计麻烦吗?” (可以混合使用,逐步迁移)
- “性能会不会有影响?” (通常不会,甚至可能更好)
- “某个传统活动在现代设计里找不到对应的怎么办?” (检查活动筛选器,或寻找新的组合方式)
首先,我们来搜集和梳理一下核心概念:
好的,我们来详细梳理一下这些概念:
1. UiPath 现代设计体验 (Modern Design Experience)
- 定义: 现代设计体验是 UiPath Studio 中更新、更直观的自动化流程设计方式。它的目标是简化开发、提高用户友好度,并利用最新的 UI 自动化技术(如 UI Automation Next 活动包)来增强流程的稳定性和可靠性。[4, 7]
- 核心特点:
- 简化的活动: 提供了更精简、功能更强大的活动集,例如用
Use Application/Browser
统一处理应用程序和浏览器的打开与附加。[5, 6, 8] - 增强的目标识别技术: 引入了更可靠的 UI 元素识别方法,包括模糊选取器 (Fuzzy Selectors)、图像识别和原生文本识别,以及对计算机视觉 (Computer Vision) 的更好支持,这有助于应对目标应用程序 UI 的微小变化,提升稳定性。[17, 18, 32]
- 集成对象存储库: 与对象存储库原生集成,鼓励并简化 UI 元素的重用和管理。[9, 10, 14]
- 改进的用户界面和向导: 提供更直观的设计界面和更强大的向导(如表格数据提取)。[1, 2, 4]
- 默认启用: 从较新的 UiPath Studio 版本(如 2021.10 及之后)开始,新建项目默认启用现代设计体验。[14, 20] (请注意:根据最新文档,从 Studio 2024.10 开始,现代设计是唯一可用的体验。[21])
- 简化的活动: 提供了更精简、功能更强大的活动集,例如用
2. 对象存储库 (Object Repository)
- 定义: 对象存储库是一个集中管理 UI 元素(及其选取器、屏幕截图等描述信息)的地方。它将 UI 元素视为“对象”,并以结构化的方式(通常按 应用程序 -> 版本 -> 屏幕 -> 元素)组织起来。[9, 10, 14]
- 核心特点:
- 集中管理: 所有 UI 元素都存储在一个地方,方便查找、更新和维护。[9, 20]
- 可重用性: 定义好的 UI 元素可以在同一个项目中的不同地方使用,甚至可以打包成 UI 库 (UI Library),在多个项目之间共享。[9, 10, 11, 20, 25]
- 提升可靠性: 结合现代设计器的目标识别技术(如锚点),存储在对象存储库中的元素通常更稳定,不易因界面微小变动而失效。[9, 17]
- 协作: 团队成员可以共享和使用相同的 UI 库,确保元素使用的一致性,提高协作效率。[9, 12, 15]
- 快速开发: 通过拖拽对象存储库中的元素到设计画布上,可以快速生成对应的 UI 操作活动。[9, 24]
3. 如何提升设计器在流程中的稳定性 (主要通过现代设计器特性)
- 使用更强大的选取器: 现代设计器利用 UI Automation Next 技术,提供更鲁棒的选取器选项:[18]
- 模糊选取器: 允许容忍目标元素属性的微小变化。
- 图像选取器: 作为备选方案,在选取器失效时使用图像识别。
- 计算机视觉 (CV): 适用于难以使用传统选取器的场景(如 Citrix、VDI 或某些自定义 UI),它像人一样“看”屏幕来识别元素。[17, 32]
- 利用锚点 (Anchors): 在定义 UI 元素时,可以为其指定一个或多个稳定的“锚点”元素。即使目标元素的部分属性发生变化,只要锚点及其相对位置保持不变,UiPath 也能更准确地定位目标。[9]
- 统一的应用程序/浏览器作用域 (
Use Application/Browser
): 这个活动能更好地管理应用程序或浏览器的生命周期,并自动处理附加逻辑,减少了因窗口切换或焦点问题导致的错误。[5, 6, 8, 13, 18] 它还能设置超时时间,等待应用程序响应。[5] - 对象存储库的统一管理: 当应用程序界面更新时,只需在对象存储库中更新受影响的元素描述符,所有使用该元素的地方都会自动应用更新,大大减少了维护工作量和出错的风险。[9, 11]
- 目标验证和高亮: 在设计时可以方便地验证选取器是否有效,并在屏幕上高亮显示目标元素,确保定位准确。[6, 10]
现代设计器与对象存储库配合开发的优势
相比传统设计器,使用现代设计器结合对象存储库进行自动化流程开发具有显著优势,这正是你的同事想了解的关键点:
大幅提升流程稳定性与可靠性 (Enhanced Stability & Reliability):
- 现代设计器的先进目标识别技术(模糊匹配、图像、CV、锚点)本身就比传统选取器更强大。[18, 32]
- 对象存储库确保了元素描述符(包含这些先进选取器配置)的一致性。当应用程序 UI 发生细微变化时,现代选取器有更高的几率继续正常工作。即使需要更新,也只需在 OR 中修改一次。[9]
- 统一的
Use Application/Browser
作用域减少了窗口找不到或附加错误的风险。[5]
显著提高开发效率 (Increased Development Speed):
- 元素重用: 无需在流程的每个步骤中重复捕获相同的按钮、输入框等。只需从 OR 拖拽即可。[9, 11, 24]
- 快速生成活动: 将 OR 中的元素拖拽到画布上时,Studio 会智能推荐并创建合适的活动(如将输入框元素拖入会推荐
Type Into
)。[9, 25] - 简化的活动和界面: 更少的活动种类和更直观的配置项意味着更快的学习曲线和开发速度。[1, 4, 13]
- 高效的录制器: App/Web Recorder 能快速捕获多个步骤和元素,并直接存入 OR。[10]
极大改善可维护性 (Improved Maintainability):
- 集中管理: 当应用程序界面更新导致元素定位失败时,开发者不再需要在整个项目的各个角落去修改选取器。只需找到 OR 中对应的元素,更新其描述符(例如,重新捕获或调整选取器/锚点),所有引用该元素的地方都会自动生效。[9, 11]
- 清晰的结构: OR 提供了按 应用程序 -> 版本 -> 屏幕 组织的清晰结构,更容易理解和管理 UI 元素。[9, 10]
- 版本控制: 可以为应用程序的不同版本创建不同的描述符集,便于管理和适应应用程序的迭代。
促进团队协作与标准化 (Better Collaboration & Standardization):
- 共享 UI 库: 可以将项目中的 OR 导出为 UI 库 (NuGet 包),供其他团队成员或项目导入使用。[9, 10, 11, 22]
- 统一规范: 确保团队内部对同一应用程序的 UI 元素使用统一的定义和命名,减少不一致性带来的问题。
- 代码审查: OR 中的元素定义清晰,便于进行代码审查。
降低长期拥有成本 (Lower Total Cost of Ownership):
- 虽然初始学习和建立 OR 可能需要一些投入,但长远来看,由于维护成本的降低、开发速度的提升以及稳定性的增强,总体拥有成本会更低。
场景:处理动态加载的Web数据并更新桌面应用程序
想象一个场景,我们需要从一个在线产品目录网站(比如 http://localhost:5173/
)上查找特定型号的最新价格和库存信息,然后将这些信息更新到公司的内部库存管理桌面应用程序(InternalStockManager.exe
)中。这个网站的产品列表是动态加载的,并且界面元素偶尔会有微小的调整。
什么是版本控制应用程序?
在 UIPath Studio 中,版本控制应用程序指的是在对象存储库中管理被自动化应用程序的不同版本。对象存储库的结构是:应用程序 > 版本 > 屏幕 > UI 元素。这意味着您可以为同一个应用程序创建多个版本,例如 Chrome v100 和 Chrome v101,每个版本可以有自己的屏幕和 UI 元素。这样,如果应用程序更新并更改了 UI,您可以为新版本定义新的或更新的 UI 元素。
什么是屏幕概念?
屏幕概念涉及将 UI 元素组织成逻辑组,代表应用程序中的不同页面或视图。例如,在网页浏览器应用程序中,登录页面、首页和设置页面可以是不同的屏幕。每个屏幕包含特定于该视图的 UI 元素,如按钮和文本字段。这种模块化方法便于管理和维护自动化脚本。
版本控制集成
对象存储库是项目的一部分,并与项目文件一起通过版本控制系统进行管理,例如 Git、TFS 等。这意味着对对象存储库的任何更改,如添加新应用程序版本或更新 UI 元素,都会被跟踪。此外,UI 库(包含对象存储库的包)可以单独版本化并发布,不同项目可以使用这些库的不同版本,从而提高可重用性和可维护性。
此场景的关键挑战 (传统方式痛点):
- 动态内容: 产品列表可能分页,或者使用无限滚动加载,传统的数据抓取可能不稳定。
- UI 易变性: 网站按钮的文本、样式或某些属性可能轻微改变,导致传统选取器失效。
- 跨应用操作: 需要在 Web 浏览器和桌面应用之间切换,管理各自的窗口和元素。
- 元素重复: 多个流程可能都需要与这个网站或库存管理应用交互,重复捕获元素效率低下且难以维护。
使用现代设计器 + 对象存储库的解决方案及优势体现:
1. 准备阶段:构建对象存储库
- 操作: 打开对象存储库面板。使用 捕获元素 (Capture Elements) 或 应用程序/网页录制器 (App/Web Recorder)。
- 捕获 Web 应用元素:
- 创建应用程序描述符
DynamicCatalogWebApp
(URL:https://dynamic-product-catalog.com
)。 - 创建屏幕
ProductSearchPage
:- 捕获
SearchInput
(输入框)。优势体现: 在捕获时,利用现代设计器的目标选择器助手,为其添加一个稳定的标签作为 锚点 (Anchor),并检查 模糊选取器 (Fuzzy Selector) 是否适用,以应对未来可能的文本或属性微调。[9, 18] - 捕获
SearchButton
(按钮)。同样应用锚点和检查模糊选取器。
- 捕获
- 创建屏幕
ProductResultsPage
:- 捕获
ResultsTable
(整个产品列表区域/表格)。 - 捕获
ProductNameHeader
(产品名称列标题,用于验证页面)。 - (可选) 捕获
NextPageButton
(如果需要处理分页)。
- 捕获
- 创建应用程序描述符
- 捕获桌面应用元素:
- 创建应用程序描述符
StockManagerApp
(Path:C:\Apps\InternalStockManager.exe
)。 - 创建屏幕
MainWindow
:- 捕获
ProductCodeInput
(用于输入产品型号)。 - 捕获
UpdatePriceInput
。 - 捕获
UpdateStockInput
。 - 捕获
SaveButton
。优势体现: 桌面应用的元素也统一纳入 OR 管理,同样可以利用锚点(如果适用)增强稳定性。[9]
- 捕获
- 创建应用程序描述符
- 优势总结: 所有 UI 元素集中管理,无论 Web 还是桌面。捕获时利用了现代设计更鲁棒的目标识别技术(锚点、模糊选取器),为后续的稳定性打下基础。[9, 18]
2. 设计自动化工作流 (Workflow)
步骤 1: 打开浏览器并搜索产品
- 拖拽
DynamicCatalogWebApp
从 OR 到画布,自动创建Use Application/Browser
活动。[9, 25] - 在其内部,拖拽
SearchInput
创建Type Into
(输入产品型号),拖拽SearchButton
创建Click
。 - 优势体现: 使用统一的
Use Application/Browser
管理浏览器实例,代码简洁。元素直接从 OR 拖拽,开发效率高。[6, 9]
- 拖拽
步骤 2: 验证结果并提取数据
- 添加
Check App State
活动,目标设为 OR 中的ProductNameHeader
。[18] 优势体现: 这是现代设计活动,用于可靠地检查应用程序是否处于预期状态(即搜索结果已加载),替代了传统的Element Exists
+Delay
组合,更稳定高效。 - 如果结果存在 (活动返回 True):
- 使用现代设计的 表格提取 (Table Extraction) 功能。[10] 点击活动面板上的 "Table Extraction" 或在
Use Application/Browser
范围内添加该活动。 - 启动向导,选择需要提取的数据列(如产品名称、价格、库存),UiPath 会自动识别表格结构并生成提取逻辑。优势体现: 现代表格提取向导功能强大,对动态加载的数据(如滚动加载)和变化的表格结构有更好的支持,比传统的数据抓取更智能、更可靠。提取配置也更直观。提取结果直接存入
DataTable
变量。
- 使用现代设计的 表格提取 (Table Extraction) 功能。[10] 点击活动面板上的 "Table Extraction" 或在
- 添加
步骤 3: 处理提取的数据
- 使用
For Each Row in Data Table
遍历提取结果。 - 在循环内,找到与目标型号匹配的行,获取价格 (
CurrentRow("Price").ToString
) 和库存 (CurrentRow("Stock").ToString
)。
- 使用
步骤 4: 打开桌面应用并更新信息
- 在主流程中(可以在 Web 浏览器操作之后,或者根据逻辑需要嵌套或分开),拖拽
StockManagerApp
从 OR 到画布,创建另一个Use Application/Browser
活动,这次它会自动配置为打开桌面应用程序。[9, 25] - 在其内部:
- 拖拽
ProductCodeInput
创建Type Into
(输入产品型号)。 - 拖拽
UpdatePriceInput
创建Type Into
(输入获取到的价格)。 - 拖拽
UpdateStockInput
创建Type Into
(输入获取到的库存)。 - 拖拽
SaveButton
创建Click
。
- 拖拽
- 优势体现:
Use Application/Browser
无缝切换 Web 和桌面应用的管理。[5]- 所有桌面元素同样来自 OR,保持一致性,提高开发速度。[9]
- 在主流程中(可以在 Web 浏览器操作之后,或者根据逻辑需要嵌套或分开),拖拽
3. 维护与扩展
- 场景:网站
SearchButton
的文本从 "Search" 改为 "Find"- 传统方式: 流程运行失败。开发者需要找到所有使用该按钮的
Click
活动,重新指示元素,更新选取器。如果多个流程用到,工作量巨大且容易遗漏。 - 现代+OR方式: 流程运行可能因为模糊选取器或锚点仍然成功。如果确实失败,只需打开对象存储库,找到
DynamicCatalogWebApp
->ProductSearchPage
->SearchButton
元素,点击编辑 (Edit) 或重新指示 (Indicate Element),更新其描述符(选取器、模糊选取器设置等)。保存后,所有使用此 OR 元素的地方自动更新,无需修改任何工作流文件![9, 11] 优势体现: 维护性极大提升,响应变化速度快,成本低。
- 传统方式: 流程运行失败。开发者需要找到所有使用该按钮的
- 场景:需要添加一个新流程,用于检查特定产品的库存并发送邮件
- 现代+OR方式: 可以直接复用 OR 中
DynamicCatalogWebApp
和StockManagerApp
的大部分元素(如登录、搜索、读取库存字段等),甚至可以将常用的操作(如登录Web、搜索产品)封装成单独的工作流或库,并在 OR 中共享相关元素,极大加速新流程的开发。[9, 10, 11, 22] 优势体现: 高度可重用性,加速开发,确保跨流程的一致性。
- 现代+OR方式: 可以直接复用 OR 中
总结这个场景体现的优势:
- 鲁棒性: 通过现代选取器技术(锚点、模糊匹配)和
Check App State
,更好地应对动态内容和 UI 微小变化。[18] - 维护性: OR 集中管理元素,一次更新,处处生效,极大降低维护成本和风险。[9, 11]
- 效率: OR 拖拽式开发、App/Web Recorder、现代表格提取向导显著提升开发速度。[9, 10, 25]
- 统一性与简洁性:
Use Application/Browser
统一管理 Web 和桌面应用,现代活动设计更简洁。[5, 8] - 可重用性与协作: OR 元素和描述符可以在项目内甚至跨项目(通过 UI 库)共享,促进标准化和团队协作。[9, 11, 15, 22]