- 发行说明
- 入门指南
- 设置和配置
- 自动化项目
- 依赖项
- 工作流类型
- 控制流程
- 文件比较
- 自动化最佳实践
- 源代码控件集成
- 调试
- 日志记录
- 诊断工具
- 工作流分析器
- 变量
- 参数
- 导入的命名空间
- 编码自动化
- 基于触发器的 Attended 自动化
- 录制
- 用户界面元素
- 选取器
- 对象存储库
- 关于对象存储库
- 创建对象存储库
- 重用对象和用户界面库
- 同步对象存储库工具
- 数据抓取
- 图像与文本自动化
- Citrix 技术自动化
- RDP 自动化
- VMware Horizon 自动化
- Salesforce 自动化
- SAP 自动化
- macOS 用户界面自动化
- ScreenScrapeJavaSupport 工具
- Webdriver 协议
- 扩展程序
- 测试套件 - Studio
- 故障排除
创建对象存储库
对象存储库是按应用程序、版本和屏幕分组的元素的集合,这些元素可以来自:
- 本地项目,即本地资源库。
- 库,即当前项目的用户界面库依赖项。
可以通过以下方式创建本地存储库:
- 使用“捕获元素”记录器捕获用户界面描述符;
- 手动创建,即直接在“对象存储库”面板中创建应用程序、屏幕和元素。
用户界面库可以通过以下方式创建:
- 将本地存储库从任何项目中提取到库项目中,并将其作为 NuGet 包发布。
-
从新建库开始,在那里建立存储库,然后将其作为 NuGet 包发布。
然后,您可以使用用户界面库 NuGet 包并将它们作为依赖项添加到您的流程中。
重要事项“捕获元素”记录器仅记录对象以供在项目中重用,该记录器不会在“设计器”面板中生成工作流。
在库或进程中,单击“对象存储库”中的“捕获元素”按钮 ,以打开“捕获元素”录制器。
点击“开始录制”,开始捕获元素。捕获元素录制器使用 UIAutomation.Activities 软件包(20.10 及更高版本)中可用的统一目标技术来为每个选取器、图像或锚点捕获目标和锚点,同时保留一定的准确度。
捕获的用户界面元素带有“选取器”、“模糊选取器”和“图像”属性,同时可确保一定的准确度。您可以选择只保留一个或保留所有目标元素。同样的方法也适用于与应用程序中的每个用户界面元素相关联的锚点元素。
在记录器中,您可以:
- 单击“添加应用程序”或“添加屏幕”,以添加新应用程序或屏幕。
- 通过单击暂停 可随时暂停录制。要恢复录制,请再次单击录制。
-
管理记录的元素:
- 通过在左侧面板中选择屏幕或元素并在右侧的“属性”面板中进行编辑,更新屏幕或元素的属性。
- 通过将元素拖放到左侧面板中来重新排列和分组元素。
- 高亮显示您已捕获的元素,即可在“捕获元素”窗口中将鼠标悬停在元素名称上方时,使用 按钮轻松将其识别出来。
-
暂停录制时:
- 通过右键单击元素并选择“删除”,以删除元素。
- 右键单击现有元素,然后选择“创建元素”,以创建新元素作为屏幕或元素的子元素。
- (可选)单击“设置”,然后选择是要配置每个元素还是要自动应用更改(默认情况下,两个设置都启用)。
- 单击“将对象保存到库” 以保存更改,关闭记录器并返回到您的项目。
您可以使用“计算机视觉”技术,通过“捕获所有元素”功能来捕获应用程序的所有可用元素,并将这些元素添加到“对象存储库”中。此方法适用于自动化高度依赖“对象存储库”使用的场景,因为您不再需要手动添加所有用户界面元素,从而节省创建流程的时间。
- 单击“捕获元素”向导中的“捕获所有元素”按钮。系统将提示您指定包含要添加到“对象存储库”的元素的窗口。您还可以通过单击并拖动要从中捕获元素的区域的矩形来仅选择目标应用程序的区域。
-
指示应用程序检测所有元素,并将元素高亮显示为绿色。您也可以手动取消选择不想添加到“对象存储库”的元素。在“扫描向导”窗口中,您可以使用相应的按钮选择“全选”或“取消全选”元素。如果选中“捕获文本”复选框,则系统也会捕获文本元素。完成选择后,单击“捕获”将关闭“扫描向导”,并使您返回到“捕获元素”窗口。
如果存在未识别的元素,您可以将图像发送到 UiPath 进行分析,以帮助我们改进检测。单击“报告问题”,选择包含未识别元素的区域,然后选择“发送”。
备注:此功能要求您已配置计算机视觉服务器才能使用。有多种方法可以实现此目的,如下所示:
选择首选服务器类型后,您必须通过编辑“服务器”和“Apikey”项目设置来选择该服务器类型,以便用于当前项目。
应用程序中的选取器可以表示按钮、复选框、文本字段、切换选项、列表框,以及可与机器人交互的任何类型的元素。可以从“捕获元素”记录器中定义捕获的元素。
从“类型”下拉列表中搜索并选取适合每个元素的类型。在“对象存储库”中,该元素会收到特定于其类型的图标,从而使对象更加容易区分。
捕获元素后,单击“将对象保存到库”按钮,将对象添加到“对象存储库”中。 若要添加其他元素,请右键单击存储库中的屏幕或元素,然后选择“创建元素”。要添加其他屏幕,只需右键单击应用程序,选择“创建屏幕”即可。
如果您在捕获所有所需元素之前退出录制器,或者您希望使用“捕获元素”为已添加到对象存储库的应用程序或屏幕添加或修改元素,则可以在该应用程序或屏幕上下文中随时启动录制器:
-
右键单击“项目 UI 描述符”下的任何应用程序或屏幕,然后选择“捕获元素”。这将在该应用程序或屏幕的上下文中打开“捕获元素”窗口:
- 如果您选择了应用程序,该应用程序下的所有屏幕和元素都会预填充在捕获元素中。
- 如果选择了屏幕,则屏幕下的所有元素都会预填充在捕获元素中。
- 根据需要更新屏幕和元素。您可以添加新屏幕,开始录制以添加新元素,编辑或删除现有屏幕或元素。如果对现有屏幕和元素进行更改,则保存时所做的更改将应用于对象存储库中的描述符。
- 单击“将对象保存到库” 以保存更改,关闭记录器并返回到您的项目。
您可以通过手动定义应用程序、每个屏幕和元素,在“对象存储库”面板中创建自己的存储库。
在“对象存储库”面板中,单击“描述符”选项卡中的加号,或右键单击同一选项卡中的“项目描述符”,然后选择“创建应用程序”。“创建应用程序”窗口随即打开:
添加唯一的应用程序名称、版本和说明。单击“创建应用程序”。您的应用程序在“项目用户界面描述符”下的“描述符”选项卡中可见。
在“描述符”选项卡中,选择您的应用程序,单击加号或右键单击您的应用程序,然后选择“创建屏幕”。“添加屏幕”窗口随即打开:
为屏幕添加唯一名称和说明。指示要自动化的屏幕,并使用“统一目标”编辑捕获的元素:
- 如果需要,请更改应用程序路径。
-
添加应用程序参数。
完成后,单击“创建屏幕”。
如果在您的 Studio 实例中强制执行对象存储库(按照关于对象存储库页面中的说明),则在使用应用程序/网页录制器时,生成的活动不会自动引用存储库中的描述符。
在活动级别,内容丰富的工具提示会通知您将描述符添加到对象存储库或使用现有的描述符。
为此,请单击活动内的图标,然后按照添加或重用描述符的步骤进行操作,或选择“选项” >“添加到对象存储库”,将元素添加到对象存储库中。
创建对象存储库后,可以直接从“设计器”面板添加更多用户界面元素。
在“设计器”面板中添加支持选取器的活动,如“单击”或“输入信息”。确保添加的活动位于“使用应用程序/浏览器”活动中。
在活动主体中,单击“对象存储库”图标以打开“选取选项”窗口。捕获元素,选择“确认”,“将元素添加到对象存储库”窗口随即会打开。向元素添加名称,然后单击“保存”。请注意,该元素将添加到“对象存储库”面板中。
从“对象存储库”中,将屏幕或元素拖放到工作流中的活动之上。对象的图像、参数和其他详细信息将自动添加到活动中。当活动使用对象存储库中的屏幕或元素时,单击活动中的“对象存储库”图标将高亮显示其在“对象存储库”树中使用的描述符。
MyAppScreen
对象拖动到“使用应用程序/浏览器”活动之上。应用程序路径将自动添加到活动中。
或者,将一个对象拖放到工作流内加号的顶部。如果拖放屏幕,则会自动添加“使用应用程序/浏览器”活动。如果拖放元素,则会显示兼容活动的列表。选择所需的活动,对象将自动添加。在流程内部,活动获得以下标签:活动名称+对象名称。添加对象后,活动从对象存储库接收描述符属性,相关属性在活动的“属性”面板中可见。
- 要指示或编辑活动中的描述符,请选择“选项”,然后在屏幕上选择“指示目标”或“编辑目标”。系统将显示一个对话框,通知您已对对象存储库中的描述符执行了操作。通过分别选择“指示描述符”和“编辑描述符”来确认您的选择。
-
要仅指示或编辑当前活动的描述符,必须首先通过选择“选项”来删除活动和“对象存储库”之间的链接,然后选择“从对象存储库取消链接”。请注意,强制执行对象存储库后,取消链接操作将会从活动中删除目标。
将对象添加到工作流后,“对象存储库”面板中的“用户界面活动”选项卡将按层级顺序显示活动及其包含的对象。如果它们不可见,请保存项目并再次查看。
标记工作流:
- 如果工作流文件中至少有一个活动从“对象”面板中引用了用户界面描述符,则使用灰色圆点进行标记。
- 如果工作流中的所有活动都引用了“对象”面板中的用户界面描述符,则使用蓝色圆点进行标记;
标记用户界面活动:
- 如果活动未从“对象”面板中引用用户界面描述符,则使用空心圆点进行标记。
- 如果活动从“对象”面板中引用了用户界面描述符,则使用蓝色圆点进行标记。
- 以字符串形式调用用户界面元素。
- 使用“对象存储库”中的
IElementDescriptors
。
1. 以字符串形式调用用户界面元素
- 在项目的对象存储库中创建一个名为
MyApplication
的应用程序。- 为名为
MainScreen
的应用程序创建一个屏幕。 - 创建名为
HomePageIcon
的元素。
- 为名为
- 为屏幕创建一个变量。
- 使用 Open API 通过以下代码打开屏幕:
var screen = uiAutomation.Open("MainScreen");
var screen = uiAutomation.Open("MainScreen");要查找ObjectRepository
命名空间和Descriptors
,请按键盘上的CTRL + space
。 - 使用以下代码对用户界面元素使用“单击 API”:
screen.Click("HomePageIcon");
screen.Click("HomePageIcon");
2. 以 IElementDescriptor 的形式调用用户界面元素
IElementDescriptors
: ObjectRepository.Descriptors.<ApplicationName>.<ScreenName>.<UiElementName>
,其中 ObjectRepository
是集成了 Descriptors
类的命名空间。Descriptors
类进一步包含您在对象存储库中捕获的所有用户界面元素。
Object
作为应用程序的名称。
- 在项目的对象存储库中创建一个名为
MyApplication
的应用程序。- 为名为
MainScreen
的应用程序创建一个屏幕。 - 创建名为
HomePageIcon
的元素。
- 为名为
- 为了增强可读性,您可以在工作流开头应用
using
语句,将应用程序定义为变量。示例如下:using app = <ProjectName>.ObjectRepository.Descriptors.<AppName>
。使用此方法,您可以轻松地按以下格式调用描述符:app.<ScreenName>.<UiElementName>
- 为屏幕创建一个变量。
- 使用 Open API 通过以下代码打开屏幕:
var screen = uiAutomation.Open(ObjectRepository.Descriptors.MyApplication.MainScreen);
var screen = uiAutomation.Open(ObjectRepository.Descriptors.MyApplication.MainScreen);要查找ObjectRepository
命名空间和Descriptors
,请按键盘上的CTRL + space
。 - 使用以下代码对用户界面元素使用“单击 API”:
screen.Click(ObjectRepository.Descriptors.MyApplication.MainScreen.HomePageIcon);
screen.Click(ObjectRepository.Descriptors.MyApplication.MainScreen.HomePageIcon); - 如果要使用导入的库项目中的对象存储库元素,请执行以下步骤:
- 在您从中导出库的项目中,新建编码测试用例或编码工作流文件。
- 将
UiPath.CodedWorkflows
包更新到最新版本。 - 在要使用已导入对象存储库元素的文件中,使用以下格式在“命名空间”部分引用您从中导出元素的项目:
<ProjectName> = <LibraryName>.ObjectRepository.Descriptors
。 - 使用 API(例如“单击”或“打开”)时,请使用以下格式调用用户界面元素:
screen.Click(<LibraryName>.ObjectRepository.Descriptors.MyApplication.MainScreen.HomePageIcon);
screen.Click(<LibraryName>.ObjectRepository.Descriptors.MyApplication.MainScreen.HomePageIcon);
使用移动自动化 API 时,可使用两种主要方法通过对象存储库访问用户界面元素:
- 使用
ObjectRepository
命名空间和Descriptors
类中的IScreenDescriptors
与IElementDescriptors
。 - 使用对象存储库中相对于屏幕的路径。如果您有多个应用程序或多个屏幕,则必须在方法调用中加以指定。
1. 使用描述符类中的 IElementDescriptor
IElementDescriptors
: ObjectRepository.Descriptors.<ApplicationName>.<ScreenName>.<UiElementName>
,其中 ObjectRepository
是集成了 Descriptors
类的命名空间。Descriptors
类进一步包含您在对象存储库中捕获的所有用户界面元素。
Object
作为应用程序的名称。
- 在项目的对象存储库中创建一个名为
MyApplication
的应用程序。- 为名为
HomeScreen
的应用程序创建一个屏幕。 - 创建名为
ParentElement
的元素。 - 在
ParentElement
下创建名为ChildElement
的嵌套式元素。
- 为名为
- 为了增强可读性,您可以在工作流开头应用
using
语句,将应用程序定义为变量。示例如下:using app = <ProjectName>.ObjectRepository.Descriptors.<AppName>
。使用此方法,您可以轻松地按以下格式调用描述符:app.<ScreenName>.<UiElementName>
- 在移动设备和对象存储库中记录的应用程序之间创建连接。
- 使用以下代码在连接上调用点击 API,以单击
ChildElement
元素:connection.Tap(Descriptors.MyApplication.HomeScreen.ParentElement.ChildElement);
connection.Tap(Descriptors.MyApplication.HomeScreen.ParentElement.ChildElement);要查找ObjectRepository
命名空间和Descriptors
类,请按键盘上的CTRL + space
。 - 使用以下代码,对
ParentElement
使用获取属性 API:var isChecked = connection.GetAttribute(Descriptors.MyApplication.HomeScreen.ParentElement, Attributes.Android.CHECKED);
var isChecked = connection.GetAttribute(Descriptors.MyApplication.HomeScreen.ParentElement, Attributes.Android.CHECKED); - 如果要使用导入的库项目中的对象存储库元素,请执行以下步骤:
- 在您从中导出库的项目中,新建编码测试用例或编码工作流文件。
- 将
UiPath.CodedWorkflows
包更新到最新版本。 - 在要使用已导入对象存储库元素的文件中,使用以下格式在“命名空间”部分引用您从中导出元素的项目:
<ProjectName> = <LibraryName>.ObjectRepository.Descriptors
。 - 使用 API 时,请使用以下格式调用用户界面元素:
connection.Tap(<LibraryName>.ObjectRepository.Descriptors.MyApplication.HomeScreen.ParentElement.ChildElement);
connection.Tap(<LibraryName>.ObjectRepository.Descriptors.MyApplication.HomeScreen.ParentElement.ChildElement);
2. 使用对象存储库中相对于屏幕的路径
Strings
来访问对象存储库元素。路径是移动设备屏幕上表示元素层次结构的字符串。您还可以访问任何描述符,即使存储库中存在重名描述符也无妨,因为您可以为每个元素指定目标应用程序和屏幕。
MobileTarget.FromObjectRepository
构造函数创建而成,该构造函数接受用户界面元素相对于所用屏幕和应用程序的路径。此构造函数的返回值为 ObjectRepositoryTarget
。
可通过两种方法指定对象存储库中用户界面元素的路径:
- 使用
Strings
,以“parentOfparent///parent///child”等格式排列为父子关系。例如,请参阅以下代码,该代码会点击名为ChildElement
的移动目标元素,该元素是ParentElement
的子元素,位于当前应用程序的当前屏幕上。connection.Tap(MobileTarget.FromObjectRepository("ParentElement///ChilElement"));
connection.Tap(MobileTarget.FromObjectRepository("ParentElement///ChilElement"));再举一个例子,但这次代码会点击相同的CheckedOnlyCheckBox
元素,但现在位于不同应用程序 (anotherApp
) 的不同屏幕 (anotherScreen
) 上。connection.Tap(MobileTarget.FromObjectRepository("ParentElement///ChildElement", "anotherApp", "anotherScreen");
connection.Tap(MobileTarget.FromObjectRepository("ParentElement///ChildElement", "anotherApp", "anotherScreen"); - 按照父子关系,以 ["parentOfParent", "parent", "child"] 这类格式排列的
Strings
数组。例如,请参阅以下代码,其会点击相同的用户界面元素,但会将路径输入到数组内所排列的单独字符串中。connection.Tap(MobileTarget.FromObjectRepository(new string[]{"ParentElement", "ChildElement"}));
connection.Tap(MobileTarget.FromObjectRepository(new string[]{"ParentElement", "ChildElement"}));当您要为方法调用指定不同的屏幕或应用程序时,可以使用相同的示例。connection.Tap(MobileTarget.FromObjectRepository(new string[]{"ParentElement", "ChildElement"}, "anotherApp", "anotherScreen"));
connection.Tap(MobileTarget.FromObjectRepository(new string[]{"ParentElement", "ChildElement"}, "anotherApp", "anotherScreen"));
可以在两种模式下从“对象存储库”中编辑描述符,我们将这两种模式称为“在线”和“离线”编辑:
- 在线编辑 - 应用程序或浏览器可以在当前计算机上访问。应用程序/浏览器显示在屏幕上,允许再次选择或修改元素。
-
离线编辑 - 当前计算机上无法访问应用程序或浏览器。应用程序未安装,或者计算机处于离线状态。元素的选取器可见,允许进行更改。
注意:可以使用 按钮直接在“用户界面探测器”中编辑“描述符”中的“选取器”和“模糊选取器”。
在“描述符”选项卡中,右键单击某个元素,然后选择“编辑描述符”。选取屏幕随即打开,您可在此屏幕中捕获其他元素、编辑选取器和锚点。
单击“编辑元素”窗口中的“编辑描述符”按钮可以实现相同的效果。
在线编辑中的相同步骤也适用于此处。在“描述符”选项卡中,右键单击一个元素,然后选择“编辑描述符”。
离线编辑提供直接对元素描述符设置进行更改的选项,但您不能指定新元素。为此,请确保应用程序/浏览器以正确的状态打开。
每当在“项目用户界面描述符”或“用户界面库”下指定已在“对象存储库”中引用的屏幕或“用户界面元素”时,系统都将自动检测匹配项,并弹出以下窗口:
可用的选项如下:
- 重用 - 将“对象存储库”中的匹配描述符添加到当前活动。
- 新建 - 打开选项窗口以创建新屏幕/元素或更新“对象存储库”中的现有屏幕/元素。
- 取消 - 将当前指定的选取器保留在活动内,而不对存储库中的对象进行任何更改。
指示屏幕搜索相应的用户界面描述符,同时指示目标元素搜索匹配的用户界面描述符。使用“录制器”时,系统将在项目用户界面描述符的本地用户界面库中或从用户界面库导入的依赖项中搜索屏幕和元素的相应匹配项。
为了提高其可重用性,可以在描述符中使用变量。
您可以编辑目标,向其中添加变量,然后将其添加到对象存储库,或者可以将变量添加到现有屏幕或对象存储库中元素中的选取器。每当将包含变量的描述符添加到流程时,请确保在流程中创建变量,否则无法读取表达式。
要将变量添加到描述符选取器,请右键单击“对象存储库”中的元素,然后选择“编辑描述符”,然后从“选择选项”窗口中添加变量。
<name='{{VarNumber}}'/>
将变量 VarNumber
的值添加到选取器中的 name
属性。
在下面的示例中,我们在“使用应用程序/浏览器”活动的“浏览器 URL”字段内使用了一个变量,然后将该目标作为屏幕对象添加到对象存储库中。这样,我们确保描述符说明了 URL 更改的情况。