
1. 内容整体设计与思路拆解1.1 先搞清楚Robocorp和Robot Framework到底是什么我在接触Robocorp和Robot Framework之前已经在自动化测试领域摸爬滚打了好几年。当时团队里用的自动化方案五花八门有商业RPA工具也有开源测试框架但总觉得差点意思。直到有一次接手一个业务流程自动化的项目才真正系统地学了一遍Robocorp的初学者一级课程也就是大家常说的Level 1课程。先别急着敲代码概念必须先理清楚。Robot Framework是一个基于Python的、关键字驱动的自动化测试框架它最核心的特点是“用自然语言写测试用例”。你不需要一上来就写大段Python代码而是用类似“Open Browser”“Input Text”“Click Button”这样的关键词把业务流程描述出来框架负责把这些关键词翻译成真正的底层操作。这一点对业务人员极其友好也让开发者的维护成本大幅下降。Robocorp则是围绕Robot Framework建立起来的一套云端自动化平台它做的事情可以理解为“给Robot Framework配上了一整套工业化流水线”本地用VS Code写机器人通过Robocorp CLI打包上传到Control Room云端控制室再用定时器或API触发运行整个过程有日志、有存储、有权限管理。你可以把Robot Framework理解成发动机把Robocorp理解成整车——发动机决定动力整车决定能不能上路跑。1.2 为什么一级课程值得认真过一遍很多有编程经验的人会觉得一级课程太简单随便跳着看看就完了。但我实际学完后的感受是这个课程最关键的价值不在于教你几条语法而在于帮你建立一套完整的“机器人开发思维”。它从头到尾只围绕一个核心目标来设计——让你在尽量短的时间内把一个能跑的自动化机器人部署到Robocorp云上并且让它能独立运行。我见过太多人犯同一个错误语法学得滚瓜烂熟但一遇到“如何在Robocorp里配置环境变量”“如何用Artifact把结果文件传回Control Room”“如何让机器人同时处理Excel和网页操作”这些问题就卡住了。为什么因为语法只是零件工程化才是整台机器的装配图。一级课程把所有装配步骤按顺序排好你跟着做一遍脑子里自然就建立起完整的地图。还有一个让我很意外的收获是它的练习设计。它不是那种“看完视频自己做”的路线而是每个小节都配了一个可以直接导入VS Code的练习项目。你学完一个知识点马上就能在真实工程里看到它出现的位置和作用。这种“所见即所得”的学习方式比单独背语法有用得多。1.3 适合谁来学、需要什么基础如果你符合下面任何一条这个一级课程都值得花时间过一遍刚接触RPA、想搞清楚机器人自动化到底怎么落地的新人用过商业RPA工具比如某U开头或某B开头的产品想了解开源替代方案的技术人员有Python基础、但对Robot Framework的工程化组织方式不熟悉的开发业务团队里负责流程梳理、想亲手实现自动化的运营或数据分析人员。关于基础我个人建议至少会一点点Python。不是说你必须写很多代码而是遇到报错时能看懂Traceback在说什么。如果完全零基础建议先用一周时间把Python最简单的语法过一遍只要会变量、列表、字典、函数调用这四样就完全够用了。课程本身不需要你写复杂算法但有一点编程直觉会顺利很多。2. 环境搭建与第一个机器人——磨刀不误砍柴工2.1 开发环境选择VS Code Robocorp扩展一级课程里推荐的环境是VS Code配合Robocorp扩展。这个组合我第一次用的时候就觉得很顺整个过程下来没怎么折腾环境问题。你只需要在VS Code的扩展市场里搜索Robocorp安装那个官方扩展然后在侧边栏里点击登录按钮用Robocorp账户登录即可。登录的作用是让本地开发环境和云端Control Room关联起来后面打包、上传、运行都会用到这个登录态。安装扩展之后Robocorp会自动帮你装好一套Python虚拟环境。这一点特别重要——它不会污染你系统里的全局Python而是给每个项目单独隔离一套依赖。也就是说你机器上即便已经装了Python 3.9项目里用的可能是3.10两者互不干扰。2.2 用模板创建第一个机器人工程登录并安装完扩展后回到Robocorp扩展面板点击“New Robot Project”你会看到好几套官方模板。初学者课程建议直接选“Basic”模板它的结构最简单只有一个tasks.robot文件和一个robot.yaml配置文件。选完模板后填一个项目名称VS Code会自动在当前目录下生成整个工程。这个生成的工程结构是这样的my-first-robot/ ├── robot.yaml ├── tasks.robot ├── devdata/ │ └── input.json └── output/robot.yaml是机器人的行为配置文件里面定义了任务的名称、要执行的文件、Python路径、以及运行环境要求。tasks.robot是真正的业务逻辑文件写的是Robot Framework语法。devdata目录存放本地开发的测试数据output目录用来放运行结果和日志。初次看到这个结构只需要知道每个文件大致管什么就行真正理解它们的作用要等到跑完第一个任务之后。2.3 跑通第一个任务从Hello World到真实浏览器操作模板生成后先直接点击右上角的运行按钮。Robocorp会用默认的Python环境跑一遍tasks.robot如果一切正常你会在终端看到类似这样的输出 Tasks Minimal task Minimal task | PASS | ------------------------------------------------------------------------------ Tasks | PASS | 1 test, 1 passed, 0 failed Output: /path/to/output/output.xml Log: /path/to/output/log.html Report: /path/to/output/report.html看到PASS之后工作还没完。我建议你立刻做三件额外的动作第一打开log.html用浏览器渲染一下看看Robot Framework生成的日志长什么样因为后面排查问题基本全靠它第二把模板里默认的Log Many关键字改成Log再运行一次体会格式差异第三尝试在tasks.robot顶部加一行Library RPA.Browser.Selenium然后写一个打开百度首页的关键字跑一遍试试。这三步做完你对整个运行机制的体感会完全不一样。这里我踩过一个小坑默认模板里没有RPA.Browser.Selenium这个库直接加在*** Settings ***段落里运行会报错“Library not found”。因为Robocorp环境里的依赖是通过robot.yaml的conda段来安装的不是写进代码就能用的。所以你在robot.yaml里得提前声明依赖。一种典型配置是这样的conda: - python3.10 - pip - nodejs18 - chromedriver pip: - rpaframework25.0.0rpaframework是一个聚合包里面包含了浏览器自动化、Excel操作、HTTP请求、文件处理等常用能力对应的库。一级课程里几乎所有的任务都依赖它。改完robot.yaml后重启一下VS Code窗口让Robocorp重新构建环境然后再把Library RPA.Browser.Selenium加进去就能顺利跑起来了。2.4 工程结构核心配置逐行解读很多人学完一级课程后对robot.yaml依然一知半解这里我建议你把每一段都搞清楚因为后面部署到Control Room时全靠它。tasks: Run all tasks: shell: python -m robot --report NONE --outputdir output --logtitle Task log tasks.robot这一段定义了在云端运行时控制台会执行什么命令。默认情况下它会把tasks.robot里所有任务依次执行。如果你的项目里有多个.robot文件处理方法一般有两种要么用--include只跑某几个标签要么在robot.yaml里分别定义多个task段。一级课程里只用到了一个文件但你得知道这个入口是可以自定义的。environmentConfigs: - environment_windows_amd64_freeze.yaml - environment_linux_amd64_freeze.yaml - environment_darwin_amd64_freeze.yaml - conda.yaml这一行很关键。Robocorp在本地运行时会优先尝试匹配当前系统的freeze文件如果没有就用conda.yaml。实际项目中我自己更常用的做法是直接把依赖写进conda.yaml然后在robot.yaml里只保留conda.yaml这一行。这样团队协作时大家依赖版本完全一致不会出现“你机器上能跑我机器上报错”的情况。artifactsDir: output这个配置决定了运行结果输出到哪个目录。为什么要单独拎出来说因为Robocorp云端运行时Control Room会收集这个目录下的所有文件作为Artifact你可以下载output.xml、log.html等文件来分析运行情况。如果你在脚本里生成了Excel报告或PDF文件想从云端下载记得一定把它们也放到artifactsDir指定的目录下否则下载列表里看不到。3. 核心语法与关键字——Robot Framework的骨架3.1 四段式结构一图记牢Robot Framework的文件用段落区隔最常见的是四个***开头的段落。一级课程里所有练习都围绕这四段展开*** Settings ***导入库、配置套件级变量、声明标签*** Variables ***定义当前文件内会用到的变量*** Test Cases ***编排要执行的任务步骤*** Keywords ***定义自定义关键字相当于函数封装。理解这个结构有个很好的类比把*** Test Cases ***当作一个菜谱上的成品菜名*** Keywords ***则是每道菜的具体做法步骤。你可以在一个任务里调用多个自定义关键字也可以通过[Arguments]传入参数来复用同一个关键字处理不同数据。3.2 内置库和RPA库的分工初学者最容易搞混的是“内置库”和“RPA库”。Robot Framework自带一套标准库比如BuiltIn提供Log、Should Be Equal等基础断言、Collections操作字典和列表、String字符串处理、OperatingSystem文件读写。这些库不需要额外安装直接用。RPA库则是专门为自动化机器人场景封装的。拿rpaframework这个聚合包来说它至少包含下面这些值得关注的库库名主要用途典型场景RPA.Browser.Selenium浏览器自动化打开网页、点击按钮、填写表单RPA.Excel.FilesExcel文件读写读取订单表、生成报表RPA.HTTPHTTP请求下载文件、调用APIRPA.FileSystem文件与目录操作移动文件、创建文件夹RPA.Dialogs交互对话框运行时让用户输入信息RPA.Tables表格数据处理将CSV转成表格结构一级课程里用得最多的是RPA.Browser.Selenium和RPA.Excel.Files。这两个几乎能覆盖日常办公自动化的半壁江山。3.3 变量、参数和返回值——不写一行Python也能抽象逻辑Robot Framework的变量语法是${name}。你可以在*** Variables ***里直接定义也可以在运行时用关键字赋值。比如*** Variables *** ${URL} https://example.com ${USERNAME} demo_user *** Test Cases *** Login Test Open Browser ${URL} chrome Input Text idusername ${USERNAME} Input Password idpassword secret123 Click Button login这里${URL}和${USERNAME}是在Variables段定义好的使用时直接引用。如果数据来自外部文件可以用${data}[key]这种索引方式从字典取值也可以用Evaluate关键字执行一段Python表达式。自定义关键字的参数传递也很直观*** Keywords *** Login To System [Arguments] ${username} ${password} Input Text idusername ${username} Input Password idpassword ${password} Click Button login之后在测试用例里调用Login To System admin admin123这种封装方式让同一个登录逻辑可以被多个任务复用维护起来非常舒服。如果你有Python基础可以把自定义关键字看作函数把[Return]看作return语句。3.4 循环、条件与等待——控制流程的三板斧一级课程不会深入讲太多编程逻辑但循环和条件一定绕不开。在Robot Framework里循环写作FOR这种大写形式FOR ${item} IN {ITEMS} Log ${item} END条件语句的写法是IF ${count} 0 Log Count is positive ELSE Log Count is zero or negative END和Python相比Robot Framework的循环和条件在排版上会更“啰嗦”一些但可读性极强。尤其当任务逻辑交给业务同事审核时这种接近自然语言的写法能省下大量解释成本。关于等待我强烈建议你养成习惯在浏览器操作后加等待而不是直接睡死。Sleep是万不得已才用的手段更优雅的用法是Wait Until Element Is Visible、Wait Until Page Contains Element这类显式等待关键字。写自动化脚本时页面加载速度是不稳定的用固定sleep 3可能造成某个环境跑得快就白白浪费时间、跑得慢就元素还没出现的窘境。4. 从教程到实战——一级课程学习路线复盘4.1 我实际做过的几个练习项目一级课程的练习大概分三四个递进层次。第一个练习是纯粹的数据处理类从一个输入文件里读取订单信息做一些简单计算再把结果输出到另一个文件。这个练习的核心目的是让你理解devdata目录的作用——本地运行时Robocorp会把devdata/input.json里的内容当作输入源注入到任务里你通过RPA.Json或RPA.Browser.Selenium去读取。第二个练习开始涉及浏览器自动化打开一个网页登录填写表格提交后抓取结果并保存。这个练习的关键是首次接触RPA.Browser.Selenium你会用到Open Available Browser、Input Text、Click Button、Wait Until Element Is Visible这一系列关键字。第三个练习则是把Pandas处理Excel和Selenium操作网页组合起来先读Excel表格逐行把数据填入网页表单再把最终结果写回Excel。如果你平时做过测试自动化会觉得这个流程很眼熟如果你是从零开始的新人完成这个练习之后基本上就已经能独立实现“读取数据—操作网页—写回数据”的完整闭环了。4.2 从半懂到入门的三个关键节点很多人都卡在同一个位置跟着视频能跑通但自己换一个网站、换一个需求就不知道从哪下手。我自己复盘后觉得从半懂到入门中间有三个节点必须自己主动迈过去。第一个节点是看懂log.html。Robot Framework运行时log.html会以树形结构展示每一个关键字的执行结果、耗时和可能的错误信息。做第一个练习时我遇到页面元素定位失败整个人懵了不知道去哪看原因后来盯了log.html才发现失败位置清清楚楚标着“Element with locator idbtn-login not found”。从那之后我再也不怕报错了。第二个节点是自己改关键字而不是抄关键字。做第三个练习时官方示例里Excel表格的行列索引是固定的但我自己的数据源结构完全不同。我花了两个小时把官方关键字拆开一行一行理解Read Worksheet返回的表格结构、Get Table Cell如何按行列取值最后自己拼装出一个新的关键字来适配数据。这一步做完我才真正感到自己“会写”而不是“会抄”。第三个节点是学会调试。一级课程里对调试着墨不多但实战里调试能力决定了你能跑多远。我的经验是分三层第一层用Log Many输出中间变量搞清楚每一步的数据长什么样第二层在浏览器自动化任务暂时跑不通时把Open Available Browser改成Open Browser并加上headlessFalse让浏览器窗口弹出来肉眼观察页面实际状态第三层用Screenshot关键字在关键节点截图保存到output目录里后面回看时非常有帮助。4.3 一级课程避坑指南——这几件事越早知道越好别跳过“环境变量配置”这一节。很多初学者看到环境变量就觉得是后端工程师的事直接跳过结果在Control Room里跑任务时发现云端和本地行为不一致。一级课程里用Set Environment Variable关键字改造流程时你没跟上后面就会一直在环境相关问题上反复折腾。别随意修改robot.yaml里的shell命令行。默认的python -m robot --report NONE --outputdir output --logtitle Task log tasks.robot里--report NONE不是随意写的它屏蔽了report生成而保留log输出避免云端保存太多无用文件。你不需要为了显示report而去掉--report NONE除非你真的需要那个report。output目录别提交到版本库。Robocorp的模板默认生成的.gitignore已经帮你过滤了output目录但如果你自己从别处拷贝代码过来很容易忽略这一点。把运行日志和临时文件提交进仓库不仅让代码库臃肿还可能在协同开发时产生大量冲突。tasks.robot里的测试用例名称尽量使用业务语言而不是技术语言。比如“Orders shipment process to be completed”比“Test 03”可读性强得多尤其在Control Room界面看任务列表时业务同事能一眼认出这个任务是干什么的沟通成本低很多。5. 常见问题排查与经验技巧——课程里没写的坑5.1 环境类问题速查现象可能原因处理方法运行时报“Library not found”依赖没有写进conda.yaml在pip:下补充对应库重启VS Code窗口浏览器自动化打开后闪退ChromeDriver版本和本机Chrome版本不匹配在robot.yaml的conda段指定与Chrome匹配的chromedriver版本VS Code里找不到Robocorp扩展面板扩展安装后未重载窗口按CtrlShiftP执行“Developer: Reload Window”本地运行正常但云端报错云端环境里缺少某个系统依赖查看Control Room运行日志将缺失依赖加入conda.yaml浏览器自动化闪退这一点我要特别强调。一级课程里跑Open Available Browser时Robocorp会自动下载一个匹配当前环境的ChromeDriver但如果你本机Chrome版本更新得很快自动下载的Driver可能跟不上。遇到这种情况直接在robot.yaml里指定一个已知稳定的chromedriver版本配合本机Chrome版本对照表来选基本一次就能解决。5.2 语法类问题的常见坑用Robot Framework写关键字时空格对齐非常敏感。它不像Python用缩进表达逻辑而是用“两个或以上空格”来区分参数。我见过很多新手在Input Text和idusername之间只敲了一个空格结果被解析成了一个完整参数报错信息还提示得不够直观。解决这类问题最快的办法是关闭输入法的全角空格并且在VS Code里把Robot Framework插件的格式检查打开它会在你写错对齐方式时直接标红。另一个常见的坑是变量名大小写敏感。${url}和${URL}是两个完全不同变量定义在*** Variables ***里的名字必须和引用时完全一致。我踩过一次坑之后给自己立了规矩所有变量一律用全大写加下划线比如${LOGIN_URL}、${DB_PASSWORD}这样一眼就能看出是变量而不是普通文本。5.3 调试自动化流程的独家技巧一级课程的练习量对于建立基础是够的但到了自己做项目阶段你很可能遇到一个头疼的情况页面上某几个元素时有时无脚本昨天还能跑通今天突然失败。这种问题最有效的调试方法是用Wait Until Element Is Visible配合时间参数来控制等待超时而不是盲目的Sleep。比如Wait Until Element Is Visible idsubmit-btn 30s Click Button idsubmit-btn如果30秒后元素还没出现说明页面逻辑或元素定位本身有问题而不是网速慢。这样定位问题的速度会快很多。我还会在流程关键节点主动添加截图Screenshot ${OUTPUT_DIR}/before_submit.png这里的${OUTPUT_DIR}是Robot Framework内置变量指向output目录。把截图命名得有意义一点比如before_submit后面排查人工流程审核时就不用重新跑一遍了。另外一个非常实用的调试技巧是善用Evaluate关键字直接执行Python表达式。有时你只是想验证某个字符串是否满足条件或者临时生成一个时间戳没必要单独写一个Python库直接${timestamp} Evaluate __import__(datetime).datetime.now().strftime(%Y%m%d_%H%M%S)运行效果很稳定而且不需要额外引入依赖。一级课程里没有单独讲这个技巧但它在日常开发中真的能节省很多时间。5.4 从课程到生产环境的升级建议学完一级课程你已经能独立开发简单的机器人任务了。但如果你想真正把机器人部署到生产环境供团队或客户使用还需要补上几个一级课程没细讲的点。日志与错误通知在tasks.robot里主动用Log关键字输出业务状态比如每一单处理成功后打印订单号。这样任务出问题时业务同事能从Control Room日志里快速定位是哪个环节出了问题。如果任务失败需要主动通知可以用RPA.Email或RPA.Slack这样的库。输入数据的健壮性从input.json或Excel读取数据时永远假设数据可能缺失、格式可能不对。用Get Value From Json配合默认值、用Run Keyword And Return Status包裹可能失败的关键字能让机器人在遇到脏数据时不会直接崩掉。版本管理与回滚Robocorp Control Room支持在云端发布多个版本但本地代码团队协作时最好用Git管理不要只用Robocorp自带的环境。每次改动都打上tag机器人出问题时可以快速回滚。运行环境的灰度验证在Control Room里创建一个组专门用于测试环境先用测试组跑新版机器人确认没问题再切生产组。别偷懒直接在生产组上发布新版本这个习惯能帮你避免很多线上事故。写在最后的一点体会一级课程虽然标注是初学者课程但我认为它更适合所有想认真用Robocorp做自动化的人完整刷一遍。它最大的价值不是教你写几条Robot Framework关键字而是把“本地开发—打包上传—云端定时运行—结果回传”这一整套开发范式刻进你的脑子里。课程里那些练习我至今还留着偶尔有新需求时还会翻出来参考它的工程结构。如果你刚开始学我的建议很简单别倍速看视频别跳过练习老老实实把每一个模板工程跑通把每一步的报错都看一遍你的第一周会很痛苦但第二周开始就会发现这种痛苦是值得的。