1. 从考试要求到实战思路:别慌,先理清脉络
刚拿到UiBot RPA中级认证的实践题,看到那一长串步骤和注意事项,是不是有点头大?尤其是题目里提到的“验证码识别可能不准确”、“界面元素动态变化”、“字段顺序不同”,这些词看着就让人心里打鼓。别担心,我当年备考和带新人时也经历过这个阶段。今天,我就以一个过来人的身份,带你把这套“从客户查询到批量录入”的自动化流程,像搭积木一样,一块一块地拆解清楚。咱们的目标不是死记硬背步骤,而是掌握一套能应对各种“幺蛾子”的健壮流程构建方法。
这道题的核心场景非常经典:登录一个带验证码的桌面应用 -> 导航到指定模块查询数据 -> 精准抓取动态表格中的所有数据 -> 再将数据一条条回填到另一个新增界面。这几乎是所有RPA处理老旧C/S架构系统或内部管理软件的缩影。考试系统故意设置的“不稳定验证码”和“随机字段顺序”,就是在模拟真实世界里最让人头疼的情况:系统不完美、界面会变动。所以,我们的解题思路绝不能是“录制回放”那么简单,必须从一开始就设计好容错、等待、判断和重试的机制。你可以把整个流程想象成一个有耐心、眼神好、还不怕麻烦的“数字员工”,我们的任务就是教会它如何应对各种突发状况,稳稳当当地把活儿干完。
在开始动手拖拽命令之前,我强烈建议你先花5分钟,在纸上或思维导图工具里画一下流程的主干和分支。主干就是题目要求的步骤一至五:启动应用、登录、查询、关闭查询框、新增录入。而分支,就是我们要重点设计的“安全网”:比如登录失败怎么办?查询界面没加载出来怎么办?表格数据抓取时,因为字段顺序变了抓错列怎么办?提交后弹窗提示不是“提交成功”又该怎么办?把这些“怎么办”都想清楚,并规划好对应的处理逻辑(比如重试几次、如何判断成功),你写出来的流程才会经得起考官的“折腾”。记住,中级认证考察的不是你能不能把流程跑通一次,而是你构建的流程是否健壮、可复用、符合规范。
2. 环境准备与流程框架搭建:打好地基
2.1 启动应用与初始设置
第一步,打开来也科技的“流程创造者”(Creator)。这步没啥好说的,但有个小习惯分享给你:我通常会先新建一个流程,并立刻用描述性的名字保存,比如“中级认证_客户数据迁移”。然后,第一件事不是去拖命令,而是先设置流程的默认错误处理。在流程创造者的空白处右键,找到“流程属性”或类似设置,里面一般会有“错误处理”或“异常处理”的选项。我习惯将其设置为“遇到错误时继续执行”或“忽略错误”,但这道题为了严谨,我们可以先保持默认,因为我们后面会自己写详细的错误捕获和重试逻辑。这个操作的目的是防止一个偶发的小错误导致整个流程崩溃,让我们的“数字员工”更有韧性。
接下来,就是启动目标应用了。使用“系统”或“应用程序”分类下的启动进程或运行命令。这里路径是固定的:C:\soft\订单管理系统\订单管理系统.exe。这里有个细节:启动后,最好加一个延时命令,比如等待2-3秒。别小看这个等待,它给应用程序留出了启动和初始化界面的时间。紧接着,我强烈建议使用获取窗口命令,并配合等待窗口出现命令。将窗口标题设置为“订单管理系统”或通过捕获窗口句柄来操作。这样做的好处是,确保应用窗口确实已经弹出并处于激活状态,为后续的登录操作提供一个稳定的操作对象。如果窗口没出来,流程可以在这里报错或重试启动,而不是对着空气点击登录按钮。
2.2 构建核心流程骨架
现在,我们来搭建主干流程的骨架。先别管细节,用注释块或者简单的日志输出命令,把五个主要步骤标记出来。比如:
日志输出:“步骤1:启动应用程序完成。”日志输出:“步骤2:开始登录操作。”日志输出:“步骤3:进入客户查询并获取数据。”日志输出:“步骤4:关闭查询窗口。”日志输出:“步骤5:循环录入客户数据。”
在这个骨架里,步骤三(获取数据)和步骤五(循环录入)是绝对的重头戏,我们后面会展开细说。但此刻搭建骨架的意义在于,让你对整个流程的脉络有清晰的掌控感。你可以在每个步骤之间加入一些延时,确保上一步操作完全生效。同时,我习惯在流程的关键节点,使用截图命令保存当前屏幕状态。这不是为了考试得分,而是为了调试。当流程跑飞了或者结果不对时,这些截图能帮你快速定位问题出在哪一步。按照考试要求,截图记得保存到指定目录:c:\exam_data\rpa\level2\。养成这个习惯,在真实项目排查问题时能省下大量时间。
3. 攻克第一道关卡:带验证码的登录
3.1 元素定位与信息填写
登录界面通常是我们的第一个实战点。题目已经给出了用户名和密码(xxxxxx),我们需要用界面元素操作来填写。首先,使用获取元素或查找元素命令来定位用户名输入框。这里不要依赖固定的屏幕坐标,一定要用元素特征(如窗口标题、控件类型、控件ID或Name属性)来定位。在流程创造者里,你可以使用“元素探测器”工具,直接点击界面上的输入框,它会自动生成定位信息。密码框同理。
重点和难点是验证码。题目明确提示“验证码识别可能不准确”,这几乎明示了这里必须做重试机制。我们不能使用被禁止的【图像】命令,所以通常验证码识别会依赖系统自带的OCR功能,或者通过其他方式获取(有时考题系统会提供一个模拟的验证码输入环节)。假设我们需要识别验证码图片,可以使用获取元素定位到验证码图片元素,然后使用获取元素文本或专门的OCR命令(注意,不是【图像】分类下的)来尝试识别其中的文字。识别结果存入一个变量,比如captcha_text。
然后,定位验证码输入框,将captcha_text填入。最后,定位“登录”按钮并点击。这一套操作,必须被包裹在一个循环重试结构中。
3.2 设计健壮的重试与判断逻辑
如何设计这个循环?我的经验是使用条件循环或计次循环配合条件判断。这里给出一个我常用的模式:
- 设置一个变量
登录成功 = False,一个计数器重试次数 = 0,最大重试次数比如设为5。 - 进入一个
当 登录成功 == False 且 重试次数 < 5的循环。 - 在循环体内,执行上述的填写用户名、密码、识别验证码、点击登录的操作。
- 点击登录后,系统要么跳转到主界面(成功),要么停留在登录页并提示验证码错误(失败)。我们需要一个判断。
- 关键判断点:在点击登录后,等待一小段时间(例如1-2秒),然后使用
查找元素或等待元素出现命令,去尝试定位登录成功后主界面独有的一个元素,比如左侧的【系统菜单】。如果能找到这个元素,说明登录成功,将变量登录成功设为True。 - 如果找不到主界面元素,反而找到了登录错误提示框(比如一个包含“验证码错误”文本的弹窗),那么说明本次登录失败。这时,我们需要:a) 关闭错误提示框;b) 刷新验证码(通常登录界面有“换一张”链接,需要点击);c) 计数器
重试次数加1;d) 适当延时,然后进入下一轮循环。 - 如果循环结束(重试了5次)
登录成功还是False,那么流程应该优雅地报错并结束,而不是继续往下执行。
这个逻辑确保了即使验证码连续识别错误,流程也会不断尝试,直到成功或达到上限。这完美呼应了考试要求中的“做好容错”。记住,所有对界面元素的操作(点击、输入)前,最好都先用等待元素出现命令等一等,避免因为界面加载慢而操作到空处。
4. 核心数据获取:应对动态表格的挑战
4.1 导航与表格定位
登录成功后,根据步骤三,我们需要点击【系统菜单】-【客户管理】-【客户查询】。这里涉及多层菜单点击。操作时,每点击一次菜单,最好都跟随一个等待元素出现,等待下一个子菜单或目标界面出现。例如,点击【系统菜单】后,等待【客户管理】这个菜单项出现再点击它。这样可以避免因为界面响应延迟而点击失败。
进入【客户查询】界面后,要在【客户所属行业】下拉框中选择“休闲娱乐”。使用界面元素操作,定位到这个下拉框(通常是ComboBox控件),然后使用设置元素选中项或模拟点击展开再选择的方式,选中“休闲娱乐”这一项。选择后,通常会触发查询,数据加载到下方的表格中。
这里就是第一个大坑:题目明确说明“表格的字段名称和顺序会略有不同”。这意味着我们不能用固定的列索引(比如第1列是客户名,第2列是电话)去抓数据,否则一旦顺序变了,抓取的数据就会全部错位。
4.2 动态表头识别与数据抓取策略
怎么应对?我们的策略必须是“先识别表头,再按表头名称映射抓取数据”。
获取表头信息:首先,定位到表格(通常是一个Table或DataGridView控件)。使用
获取元素命令获取整个表格元素。然后,使用获取子元素或专门处理表格的命令,获取表头行(通常为第一行)的所有单元格元素。将这些单元格的文本(即字段名称,如“客户名称”、“联系电话”、“行业”等)按顺序读取出来,存储到一个列表里,比如叫header_list。这样,我们就知道了当前表格每一列对应的是什么字段。定位目标列:我们需要的数据是“休闲娱乐”行业的所有客户。但表格可能包含很多行,我们需要全部获取。更复杂的是,题目要求获取“所有的数据”,而表格可能有分页。如果考试系统模拟的是客户端分页(点击下一页),你可能还需要编写翻页循环。这里我们假设所有数据都在当前页面。
按行遍历,按列映射抓取:接下来,我们循环遍历表格的数据行(从第二行开始)。对于每一行,我们再循环遍历之前获取的
header_list。对于每一个表头名称(比如“客户名称”),我们找到它在header_list中的索引位置(比如是第0个),然后就去读取当前行对应这个索引位置的单元格文本。这样,无论表格的列顺序怎么变,我们都能通过字段名正确拿到“客户名称”对应的数据。数据结构化存储:抓取到的每一行数据,不要简单地拼成一个字符串。我建议使用“字典”数据类型来存储。例如,对于一行数据,创建一个字典
row_dict,然后row_dict[“客户名称”] = 刚刚抓取到的客户名文本。这样,row_dict就完整地代表了这一条客户记录,并且字段名是键,清晰明了。把每一行得到的字典,再添加到一个总列表all_data_list中。最终,all_data_list就是一个包含了所有“休闲娱乐”客户数据的字典列表,结构非常清晰,为下一步的录入做好了完美准备。
完成数据获取后,记得关闭【客户查询】对话框。使用获取元素定位关闭按钮或对话框标题栏的关闭按钮,然后点击。
5. 数据批量录入与提交验证
5.1 界面导航与循环录入结构
现在,我们手里有了结构化的数据all_data_list,接下来就是“搬家”工作:点击【新增客户】菜单,进入新增界面,把数据一条条填进去。
首先,同样通过菜单点击导航到【新增客户】界面。使用等待元素出现确保新增界面加载完成,关键是要能定位到“客户名称”等输入框。
然后,构建一个循环,遍历all_data_list中的每一个字典元素(每一条客户记录)。在循环开始前,可以加个日志,输出“开始录入第X条客户数据...”。
在循环体内,对于当前这条记录current_record(它是一个字典),我们的任务就是根据新增界面上的每一个输入框的标签(Label),去current_record字典里找到对应的值,并填写进去。
5.2 字段映射填写与提交判断
这里又有一个关键点:新增界面的输入框旁边的标签文字(如“客户名称:”),需要和我们数据字典里的键(如“客户名称”)匹配起来。如果完全一致最好,如果不一致,你可能需要建立一个映射关系。例如,界面上叫“客户名”,字典里是“客户名称”,那么你就需要判断一下,或者提前处理好数据。
填写操作就是常规的获取元素(定位输入框) ->设置元素文本。按照界面顺序,逐个字段填写。全部填完后,定位并点击【提交】按钮。
点击提交后,才是真正的考验点。题目提示:“点击【提交】按钮后会有弹框提示,需要判断弹框内容是否为‘提交成功’,如果不是则需要重新录入该条记录,直到成功为止。”
这意味着,我们必须为每一条数据的提交操作,单独设计一个重试循环。不能因为一条数据提交失败,就跳过或者终止整个流程。
我的实现逻辑通常是这样的:
- 点击【提交】按钮后,立即使用
等待元素出现命令,等待一个预期的弹窗出现(弹窗通常有固定标题,如“系统提示”)。 - 弹窗出现后,使用
获取元素文本命令,获取弹窗中提示信息的文本内容,存入变量msg。 - 判断
msg是否包含“提交成功”字样。如果包含,则这条数据录入成功。然后,关闭弹窗,循环进入下一条数据的录入。 - 如果
msg不包含“提交成功”(可能是“网络超时”、“数据重复”等),则这条数据录入失败。这时,需要:a) 关闭错误提示弹窗;b)清空当前新增界面所有已填写的输入框(为重新填写做准备);c) 重新从current_record字典中取出数据,再次填写并提交。这个过程也需要一个小的重试循环,避免无限失败。 - 这里有个细节:重新填写前,最好确认一下界面是否已经复位。有时提交失败后,界面可能停留在某种状态。可以尝试轻微操作,比如点击一下某个输入框,确保焦点正常。
这个“提交-判断-重试”的闭环,是保证批量操作最终完整性的核心。它模拟了人工操作时,遇到错误我们会重新再试一次的行为。
6. 流程优化与考试避坑指南
6.1 通用容错与稳定性增强
除了上述针对登录、提交的重试逻辑,还有一些通用的容错技巧能极大提升流程的稳定性,这也是考官评判的重点。
- 元素等待策略:在任何
点击、设置文本等操作之前,都习惯性地加上等待元素出现甚至等待元素可用。等待时间可以设置一个合理的超时(比如10秒),超时后视为失败,进入错误处理或重试逻辑。不要使用固定的、长时间的延时来等,那样效率低且不保险。 - 存在性判断:在操作某些元素前,可以先使用
判断元素是否存在。例如,在关闭查询对话框时,可以先判断对话框是否存在,存在再点击关闭,避免操作不存在的元素引发异常。 - 错误捕获与日志:虽然考试可能不强制要求,但在关键步骤,尤其是重试循环内部,使用
尝试执行和错误捕获命令块是个好习惯。一旦发生预期外的错误,可以捕获异常,记录详细的错误信息到日志文件(保存到指定目录),然后根据错误类型决定是重试还是终止。这能让你的流程在“阅卷”时行为更清晰。 - 资源清理:流程最后,确保所有打开的应用程序、对话框都被正确关闭。可以在流程结束时,加入强制结束进程的命令作为兜底。
6.2 严格遵守考试规范
考试不只是考技术,也考规则意识。题目中的“注意事项”就是铁律,必须逐条遵守:
- 禁用命令:绝对不要使用【界面操作】下的【图像】命令。所有定位和识别都必须基于界面元素(UI Automation)。
- 使用指定账号:流程中填写的用户名密码必须是考题指定的,硬编码在流程里即可,不要做任何从外部读取的复杂操作。
- 流程结构限制:题目要求“不要使用【子流程】或【辅助流程】”,这意味着所有逻辑都必须在一个主流程图中完成。虽然这会让流程图看起来有点长,但我们必须遵守。可以通过“分组”或“注释”来让逻辑更清晰。
- 文件保存路径:所有截图、日志文件,必须严格保存到
c:\exam_data\rpa\level2\或@res目录下。路径一个字符都不能错。在流程开始时,可以用判断目录是否存在,不存在则创建,确保不会因路径问题报错。 - 以结果为准:最终阅卷只看你流程运行的结果——是否把所有查询到的“休闲娱乐”客户都成功录入到了新增客户界面。所以,你的流程必须在各种干扰下(验证码错误、网络延迟、意外弹窗),依然能顽强地走到最后,并产出正确结果。这意味着,你设计的重试、判断、续跑逻辑至关重要。
构建这个流程的过程,就像在训练一个数字员工处理一套标准但充满变数的文书工作。把每一个可能出错的地方都想到,并给它写好应对手册。当你看到流程最终能全自动地、一遍又一遍稳定地完成整个任务时,那种成就感就是RPA最大的魅力所在。这份实战经验,不仅是为了通过认证,更是你今后应对真实企业复杂自动化需求的宝贵基础。多练几次,把每个环节的重试和判断逻辑都理清,你一定会发现,所谓的“中级挑战”,也不过如此。