studio
2024.10
true
- 发行说明
- 入门指南
- 设置和配置
- 自动化项目
- 依赖项
- 工作流类型
- 控制流程
- 文件比较
- 自动化最佳实践
- 源代码控件集成
- 调试
- 日志记录
- 诊断工具
- 工作流分析器
- 变量
- 参数
- 导入的命名空间
- 编码自动化
- 基于触发器的 Attended 自动化
- 录制
- 用户界面元素
- 选取器
- 对象存储库
- 数据抓取
- 图像与文本自动化
- Citrix 技术自动化
- RDP 自动化
- VMware Horizon 自动化
- Salesforce 自动化
- SAP 自动化
- macOS 用户界面自动化
- ScreenScrapeJavaSupport 工具
- Webdriver 协议
- 扩展程序
- 测试套件 - Studio
- 故障排除
Studio 用户指南
Last updated 2024年11月18日
在编码自动化中使用导入的库项目
本教程将向您介绍如何在编码自动化中使用导入库项目中的对象。该示例演示了如何使用导入的库项目中的对象存储库元素和工作流。给定的场景涉及自动化 Acme 网站,会填写学生记分卡并将其添加到数据库中。
创建一个库项目以存储自动化 Acme 应用所必需的用户界面元素,特别是用于填写学生记分卡的元素。此外,在库项目中创建低代码 (
.xaml
) 或编码工作流 (.cs
),以便稍后在另一个编码自动化中使用。
- 创建一个名为
AcmeLibrary
的库项目。 - 捕获要在“对象存储库”和“描述符”部分中使用的所有用户界面元素。
- 在“文件”组中新建一个“编码工作流”。
在另一个项目中导入库时,此步骤对于启用对编码自动化中的对象存储库的访问至关重要。
- 将主要的低代码工作流重命名为
Send message box
,并添加具有以下文本的“消息框”活动:“您已为 Acme 中的学生添加了新的计分卡。”注意:您也可以按照本教程中列出的步骤将“消息框”活动重新创建为编码工作流。 - 保存库项目并将其发布到订阅源。
您将在编码自动化的另一个项目中安装并使用此已发布的库。
创建库项目后,将其安装到另一个项目中以利用其可重用资产,包括对象存储库元素和工作流,低代码 (
.xaml
) 和编码 (.cs
) 均可。
提示:使用用户界面自动化 API 时,请记住,带有
IScreenDescriptor
或 IElementDescriptor
的重载旨在与对象存储库元素一起使用,而带有 TargetAnchorableModel
的重载旨在与通过 UI Explorer 获取的原生选取器一起使用。请访问用户界面自动化 API,了解如何通过用户界面自动化 API 来利用选取器。
- 在“文件”组中,新建编码工作流。
- 转到“管理包”并安装先前创建的库项目。
- 在“文件”组中,新建工作流。
- 将工作流命名为
notifyStudentScoreCardAdded
。 - 导航至“活动”面板的“已安装”部分。
- 搜索您导入的库项目的名称(在此示例中为
AcmeLibrary
)。 - 将
Send message box
活动拖放到notifyStudentScoreCardAdded
中。现在,notifyStudentScoreCardAdded
具有与导入的库项目中的Send message box
工作流相同的行为。
- 将工作流命名为
- 为了增强可读性,您可以在工作流开头应用
using
语句,将导入的对象存储库应用程序定义为变量。示例如下:using app = <ProjectName>.ObjectRepository.Descriptors.<AppName>
。使用此方法,您可以轻松地按以下格式调用描述符:app.<ScreenName>.<UiElementName>
在此示例中 ,我们定义了 Acme 对象存储库 ,如下所示:namespace UsingImportedLibraryProjects { using AcmeApp = AcmeLibrary.ObjectRepository.Descriptors.Acme;
namespace UsingImportedLibraryProjects { using AcmeApp = AcmeLibrary.ObjectRepository.Descriptors.Acme; - 现在,您可以在 Acme 中自动化给定场景。首先使用开启 API 打开 Acme 登录画面。
[Workflow] public void Execute() { // 1.Open the Acme app on the Login screen var AcmeLoginScreen = uiAutomation.Open(AcmeApp.LoginScreen);
[Workflow] public void Execute() { // 1.Open the Acme app on the Login screen var AcmeLoginScreen = uiAutomation.Open(AcmeApp.LoginScreen); - 使用键入 API 键入登录 Acme 所需的凭据。
// 2.Type in the necessary credentials AcmeLoginScreen.TypeInto(AcmeApp.LoginScreen.Email, "john.doe2023@uipath.com"); AcmeLoginScreen.TypeInto(AcmeApp.LoginScreen.Password, "12345678");
// 2.Type in the necessary credentials AcmeLoginScreen.TypeInto(AcmeApp.LoginScreen.Email, "john.doe2023@uipath.com"); AcmeLoginScreen.TypeInto(AcmeApp.LoginScreen.Password, "12345678"); - 使用单击 API 和原生选取器,单击“登录”按钮。
// 3.Use a native selector to click the Login button AcmeLoginScreen.Click(Target.FromSelector("<webctrl tag='BUTTON' type='submit'/>"));
// 3.Use a native selector to click the Login button AcmeLoginScreen.Click(Target.FromSelector("<webctrl tag='BUTTON' type='submit'/>")); - 登录流程将转到 Acme Web 应用程序中的“仪表板”画面。因此,请使用附加 API 将焦点放在新屏幕上。
// 4. Focus on the Dashboard screen var DashboardScreen = uiAutomation.Attach(AcmeApp.Dashboard);
// 4. Focus on the Dashboard screen var DashboardScreen = uiAutomation.Attach(AcmeApp.Dashboard); - 使用单击 API 选择网站上的“学生”条目。
// 5. Click the Students entry DashboardScreen.Click(AcmeApp.Dashboard.Students);
// 5. Click the Students entry DashboardScreen.Click(AcmeApp.Dashboard.Students); - 选择“分数卡”以使用单击 API 打开“学生 - 分数卡”表单。
// 6. Click Score card, to start filling in a student score card DashboardScreen.Click(AcmeApp.Dashboard.Students.ScoreCard);
// 6. Click Score card, to start filling in a student score card DashboardScreen.Click(AcmeApp.Dashboard.Students.ScoreCard); - 使用附加 API 聚焦学生 - 记分卡画面。
// 7. Focus on the Score Card screen where you fill in the necessary information var ScoreCardScreen = uiAutomation.Attach(AcmeApp.StudentsScoreCard);
// 7. Focus on the Score Card screen where you fill in the necessary information var ScoreCardScreen = uiAutomation.Attach(AcmeApp.StudentsScoreCard); - 使用键入 API 和对象存储库中的元素填写“学生 - 记分卡”表单中的一半字段。
ScoreCardScreen.TypeInto(AcmeApp.StudentsScoreCard.StudentEmail, "john.doe@uipath.com"); ScoreCardScreen.TypeInto(AcmeApp.StudentsScoreCard.FirstName, "John"); ScoreCardScreen.TypeInto(AcmeApp.StudentsScoreCard.LastName, "Doe"); ScoreCardScreen.TypeInto(AcmeApp.StudentsScoreCard.ParentEmail, "johnny.doe@uipath.com"); ScoreCardScreen.TypeInto(AcmeApp.StudentsScoreCard.Tuition, "Private");
ScoreCardScreen.TypeInto(AcmeApp.StudentsScoreCard.StudentEmail, "john.doe@uipath.com"); ScoreCardScreen.TypeInto(AcmeApp.StudentsScoreCard.FirstName, "John"); ScoreCardScreen.TypeInto(AcmeApp.StudentsScoreCard.LastName, "Doe"); ScoreCardScreen.TypeInto(AcmeApp.StudentsScoreCard.ParentEmail, "johnny.doe@uipath.com"); ScoreCardScreen.TypeInto(AcmeApp.StudentsScoreCard.Tuition, "Private"); - 结合使用键入 API 与通过 UI Explorer 发现的原生选取器,填写表单中的其余字段。
ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='mathematics' tag='INPUT' />"), "A"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='physics' tag='INPUT' />"), "B"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='biology' tag='INPUT' />"), "C"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='chemistry' tag='INPUT' />"), "A"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='geography' tag='INPUT' />"), "C"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='history' tag='INPUT' />"), "A"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='english' tag='INPUT' />"), "A"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='computer Science' tag='INPUT' />"), "C"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='professorComments' tag='INPUT' />"), "The student is doing okay, very hardworking and does its best");
ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='mathematics' tag='INPUT' />"), "A"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='physics' tag='INPUT' />"), "B"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='biology' tag='INPUT' />"), "C"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='chemistry' tag='INPUT' />"), "A"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='geography' tag='INPUT' />"), "C"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='history' tag='INPUT' />"), "A"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='english' tag='INPUT' />"), "A"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='computer Science' tag='INPUT' />"), "C"); ScoreCardScreen.TypeInto(Target.FromSelector("<webctrl id='professorComments' tag='INPUT' />"), "The student is doing okay, very hardworking and does its best"); - 使用单击 API,选择“添加分数卡详情”。
// 10. Click the "Add score card details" button using an Object Repository descriptor ScoreCardScreen.Click(AcmeApp.StudentsScoreCard.AddScoreCardDetailsButton);
// 10. Click the "Add score card details" button using an Object Repository descriptor ScoreCardScreen.Click(AcmeApp.StudentsScoreCard.AddScoreCardDetailsButton); - 使用
RunWorkflow()
方法调用从库项目导入的工作流。为方法提供项目内工作流的路径。// 11. Invoke imported workflow from library RunWorkflow("notifyStudentScoreCardAdded.xaml");
// 11. Invoke imported workflow from library RunWorkflow("notifyStudentScoreCardAdded.xaml"); - 关闭您打开的浏览器标签页,以便使用
Dispose()
API 自动化该场景。// 12. Close the applications/browsers you opened, to finish he automation ScoreCardScreen.Dispose();
// 12. Close the applications/browsers you opened, to finish he automation ScoreCardScreen.Dispose();
To follow the steps and try out the tutorial yourself, see the following sample project: Using imported library projects in coded automations. The file contains the library project, as well.