- 0. 总结
- 0. 关于UiPath Academy Certifications
- 1. Lesson01-UiPath概要
- 2. 入门知识
- 3. 数据操作
- 4. recording概要
- 5. UI上的高级操作
- 6. Selector
0. 总结
这部分是Level 1 Foundation (基礎)トレーニング 的1-6章,主要介绍了:
- UiPath的基本概念,构造,快捷键
- 关于UiPath中使用的变量与数据类型
- 控制flow/分支/循环 等程序设计中基本概念在UiPath的体现
- 文字列的处理,数据的收集与处理
- 各种recording的差异
- UI高级操作,data scraping,OCR等
- Selector的概念与操作
0. 关于UiPath Academy Certifications
详细参考here,FREE Advanced RPA Developer certification 在6月30日前免费。
目标:在5月7日前取得该资格!
- Prerequisites:
If UiPath is new to you, we strongly recommend completing the RPA Developer Advanced Learning Plan (Foundation, Orchestrator and Advanced trainings and REFramework knowledge) before applying for the certification.
- How does the process work?
- Phase I - Theoretical exam (Quiz) - 90 minutes
- Phase II - Practical exam - 3h30m
1. Lesson01-UiPath概要
1.0 总结
- 用语介绍
用语 | 解释 |
---|---|
Orchestrator | 用语执行robot,管理schedule |
workflow | robot处理flow |
UiPath studio | robot作成app |
activity | robot执行的操作 |
webScraping | 从website中抽取信息,爬虫 |
recording Session | Scraping的结果 |
process | robot的处理 |
robot | 作成的robot |
component | robot的一部分 |
custom activity | 自己作成的activity |
- robot能完成的:
- application的自动执行
- excel读取写入
- mail自动执行
- database连接
- web爬虫
- UiPath Studio的作用:
- 作成robot
- activity/recoring/scraping,等robot的各个具体设定
- 在UiPath Orchestrator中与robot关联
- UiPath Orchestrator的作用:
- robot管理
- 多个robot的管理,监视和执行
- 执行schedule的设定
1.1 简介
一个业务流程称为Project,流程中的每个步骤称为Activity,Activity由button的按下,文件的读取等小的操作构成。
流程分为如下几种:
- Sequence:直线型的流程
- FlowChart:复杂流程,分有分支和循环等
- State Machines:大规模的工作流程
- Global Exception Handler:发生Error时触发的工作流
1.2 快捷键
- 文件管理:
- Ctrl + Shift + N - 新建新的Process
- Ctrl + O - 打开以前作成的workflow
- Ctrl + L - 打开log文件所在的文件夹
- Ctrl + S - 保存当前的workflow
- Ctrl + Shift + S - 保存当前所有的workflow
- Ctrl + Tab - 当前所有打开的workflow之间移动
-
注释:通过Ctrl + D 将选中的activity注释掉,通过Ctrl + E 将注释去掉
- 调试:
- F7 - 针对打开的workflow进行调试
- F8 - 检查当前的workflow是否有错误
- F9 - 给选中的workflow设置调试断点
- Shift + F9 - 删除当前workflow中的所有断点
- F11 - 调试的时候,进入一个activity内部执行
- Shift + F11 - 调试的时候,跳过某个activity
- 录制:
- Alt + Ctrl + W - 打开Web Recording工具栏
- Alt + Ctrl + B - 打开Basic Recording工具栏
- Alt + Ctrl + C - 打开Citrix Recording工具栏
- Alt + Ctrl + D - 打开Desktop Recording工具栏
- F2 - 迟延处理
- F3 - 指定独立的录制区域
- F4 - 記録する UI フレームワークを 既定値、AA、および UIA から選択できます
- workflow的执行:
- F5 - 开始执行当前的workflow
- Pause - 暂时中止
- F12 - 停止执行当前workflow
- 選択したアクティビティ:
- Ctrl + T - アクティビティを [トライキャッチ (Try Catch)] アクティビティの [Try] セクション内に配置します。
- Ctrl + N - 新しいシーケンスダイアグラムを現在のプロジェクトに作成します。
- Ctrl + C - 复制一个activity
- Ctrl + V - 粘贴一个activity
- 其他:
- F1 - 帮助
- Alt + Ctrl + F - 检索
- Ctrl + P - 启动Package管理
1.3 automation project
制作了一个简单的根据输入判断,然后显示messagebox的flowchart,如下:
- inputdialog中的Output Result设置为变量name (使用ctrl+k按下)
- 另外添加了一个Flow Decision,其condition设置为
name = "lijun"
- 如果条件为True,则能跳转到MessageBox,MessageBox的Test设置为
"Hello," + name
注意字符串有双引号,变量没有
1.4 activity package的管理
通过Manage Packages可以管理activity package,根据来源分为Local/Official/Community/Orchestrator,比如之前转为Excel操作而install的excel activity package。
1.5 automation lib的重复使用
通过将常用操作整理成lib,可以实现重复使用,下面是lib的显示栏:
1.6 Chrome与Firefox插件
Chrome 和 Firefox中安装UiPath插件后,可以实现自动化。
1.7 连接source管理系统
UiPath中通过team选项,可以连接各种source管理系统。
2. 入门知识
2.1 总结
- 变量/类型
- 文字列-string
- 数值型-Integer
- 布尔型-Boolean
- 通用类型-Generic
- 将数值型转换为文字列,使用.ToString
- 控制flow
- sequence适合处理单纯的执行性流程
- flowchart适合处理带有判断的复杂流程
- statemachine适合大规模Project
- 条件判断
- flow design 双分支判断
- flow switch 多分支判断
- roop循环
- while
- do…while
- for each
- for each row应用在data table中按行进行循环处理
2.2 变量与数据类型
- 変数の管理
通过下面两种方式添加变量:
通过这种方式添加的变量,其作用范围为最小的容器内。
- workflow设计
参考 here
各种activity:
- 条件分支if
- If…Else If 多条件分支
- VB If函数
- Switch Activity
- Flow Switch
关于数据,从使用范围来区分,可以分为参数(引数)和变量(変数):
- 参数:主要目的是将数据从一个workflow传递给别的workflow
- 变量:在一个单一的workflow内,捆绑在一个容器上
关于命名规则:
- 变量:使用大写字母开头的驼峰命名法,如FirstName
- 参数:添加表明参数类似的前缀,使用驼峰命名,例如in_FileName
- activity名:比如「Click the Save Button」将操作的动作作为关键词包含在标题中
- workflow名:所有的workflow名中,包含workflow要进行的操作,比如GetTransactionData。
- 変数パネル
参考here
- ジェネリック値(GenericValue)変数
这是一种通用变量,根据执行的action,能自动变换成其他数据类型。
- テキスト変数
- True または False 変数
参考here
- 数字変数
- 配列変数
- 日付および時刻変数
- データテーブル変数
- 引数の管理
- 引数パネル
- 引数の使用
- インポートした名前空間について
- 新しい Namespaces のインポート
2.3 控制flow
- if / Then / Else
- Decision
- While / Do while / For Each
- FlowChart内部的重复构造
- workflow内部使用vb.net
2.4 条件分支
- Flow Decision,在FlowChart中使用
- If,在Sequence中使用
- 新建一个flowchart,命名masterflowchart
- 在start后面,上面的masterflowchart内部,再新建一个flowchart,命名为具体要做的操作,如”闰年check”
- 在闰年check flowchart中,添加变量year/int32
- 在start后添加input dialog,将result设置为year变量接收
- 添加flow decision,添加条件 year mod 4 = 0 ,即除以4是否为0
- 添加两个messagebox,分布连接到flow decision的true和false
- 在messagebox中,分布输入对应要显式的消息
上面是flowchart,下面是sequence的情况:
需要将上面的Flow Decision替换成If判断。
2.5 循环loop
- while():
- do{}while():
- 添加Do While到Sequence中
- 按住Ctrl,将input Dialog和If加入到Do while中
- Do while中添加判断条件 year mod 4 <> 0
如下图:
如上就实现了do while的判断,只要符合上面的条件,就不断循环。
- For…Each()循环
下图是使用For Each循环:
- 先弹出文件选择对话框
- 选择文件夹后,将该文件夹内的文件列表打印出来
2.6 实践篇(推测game)
- 在MasterFlowChart中添加一个推測Game FlowChart
- 添加Assign,添加RandomNumber = new Random().next(0,1000)
- 添加InputDialog, 将其输出设置为GuessNumber变量
- 添加FlowDecision, 条件是GuessNumber = RandomNumber
- Ture的情况下,指向MessageBox
- False的情况下,继续添加一个FlowDecision,条件是GuessNumber < RandomNumber
- 上面FlowDecision的True和False,分别指向对应的Assign,在Assign中使用Hint = “请输入更大的数字”和Hint = “请输入更小的数字”
- 将上述InputDiaglog中的Text修改为Hint
- 另外,将上面的两个Hint的Assign指向Input Dialog
下面是执行过后的图:
其中800-785,是inputDialog的Title,800表示GuessNumber,785表示RandomNumber,需要设置InputDialog的Title为GuessNumber.ToString + "-" + RandomNumber.ToString
。
2.7 小结
- sequence
- flowchart
- 控制Flow
- 代入Assign
- 延迟Delay
- Do While
- If
- Switch
- While
- For Each
- Break 循环中断
2.8 练习1
完成如下的任务:
- 使用InputBox询问 “1+1=2?”
- 如果是Yes,则将打开NotePad.exe,并写入“正解”,否则写入”不正解”
写入内容到NotePad.exe作为一个子sequence:
2.9 练习2
将sequence中添加4个GenericValue,分别为A/B/C/D,计算这4个变量的和:
3. 数据操作
本节包含:
- 处理文字列:分割/格式化
- 根据特定条件,取数据表中特定行
3.0 总结
- 类型/变量
- 文字列 String
- 数值型 Integer
- 时间 DateTime
- 数组 Array
- 数据表 DataTable
- 数据表的行 DataRow
- 数据表的列 DataColumn
- 文字列操作
- ToUpper
- ToLower
- Remove 删除
- Contains 判断是否包含
- Replace 替换文字
- 关于DataTable
- dtNewHires(0)(1): 第0行第1列
- 要确认DataTable的内容,通过Output Data Table 的activity,将其转换为文字列
- 循环处理for each row
3.1 关于数据类型
- 单一型数据: Char / Boolean / Integer / Date
- 集合型数据: Array / Queue / List / String / Dictionary
- 表形式数据: DataTable
关于GenericValue型,可以保存各种数据类型,比如String/Boolean/Integer/Date。
GenericValue型能使用的method:
关于Array和List:
- Array:其中的元素(可变);元素的个数(不可变)
- List :其中的元素(可变);元素的个数(可变)
使用定义的Array和List进行循环,输出到log:
Dictionary<TKey,TValue>:
3.2 文字列操作方式
另外,通过strInput.Split(":]".ToCharArray)(1)
可以将字符串分割,遇到:
或]
即断开字符串,存储为字符串的数组。
3.3 数据收集与输出
如果要组合一段字符串,输出当前时间:
- 添加strDate变量,默认值 **Today is **
- 添加MessageBox:“Good morning,” + strDate + Now.ToString
- 如果修改格式,则为“Good morning,” + strDate + Now.ToString(“yyyy/MM/dd”)
也可以使用format函数,比如
String.Format(Filepath1,"ファイル")
,使用方式可以具体参考帮助文件,参考VB的帮助。
下面是String的代表性方法:
关于data table:
常用data table有csv,excel,web数据,下面通过两种方式将CSV输出:
或是:
3.4 演習1
- 读取CSV文件,并将其保存到DataTable变量:Names
- 根据是否会员,对数据进行过滤
- 使用姓和名,根据简单的规则(姓的前面3个字母变成大写,名的前3个字母变成小写),作成nickname
- 将生成的Nickname输出
CSV文件如下:
作成workflow如下:
- 将CSV读取,并保存到DataTable
- 将DataTable代入到Member变量中,类型为DataRow[]
- 使用For..each循环,取出每一行,设为row
- 使用Assign取出姓和名
- 使用String的函数,作成NickName
4. recording概要
本篇学习:
- 使用recorder添加UI的activity
- customize方法
4.0 小结
- 自动recording操作
- activity自动生成
- 文字输入与click操作等
- 通过F2能暂定,3秒倒计时
- 通过esc停止
- 容器コンテナ的生成
- basic:✕ 无法生成
- desktop:◯ Attach Window
- web:◯ Attach Browser
- Citrix:✕ 无法生成
4.1 recording功能(basic,desktop基本)
- recording可能的:
- 左键按下(button,checkbox,dropdown)
- 文字输入
- recording不可的:
- shortkey
- 修饰key(ctrl+c,ctrl+a,など)
- 右键key
下面分别使用basic和desktop的自动recording功能生成的workflow,用于在记事本中输入文字,并修改font:
- basic的自动记录
- desktop的自动记录
- 关于basic与desktop的差异:
4.2 recording功能(basic,desktop应用)
对上面的进行改造,可以根据inputdialog的内容,写入记事本:
4.3 recording功能(web)
访问天气预报网站,检索东京的天气,计算第二天的温度差,如果差高于10°则给予报警。
- 选择web
- web recording中,选择Record,然后选择东京都
- 按下ESCkey,停止
- 使用Text,copy下最高气温
- 使用Text,copy下最低气温
- 添加Assign,设置等式
TempDiff = 0+MaxTemp-MinTemp
,这里0表示将结果转变为数值 - 使用If进行分支判断
需要注意:OpenBrowser的Type设置为Chrome。
4.4 练习1
- 弹出对话框,用于输入写入记事本的文字
- 弹出对话框,用于输入记事本的文件名
- 打开记事本
- 将文字写入记事本
- 改成粗体,size变为16
- 以上面的文件名保存文件
具体的workflow作成步骤:
- 作成两个inputdialog,分别用于保存记事本文字和文件名
- 然后使用自动recording,录制剩余的部分,首先打开计时班
- 选择recording -> desktop
- 在desktop的recording中,选择start app,并点击记事本
- 点击recording
- 输入”text”到记事本
- 点击修改格式,粗体和16,完毕后OK
- 点击file->使用名称保存,输入”filename”并保存文件
- esc退出recording,保存
- 查看录制的workflow,使用inputDialog中的文字和文件名的变量,替换上面临时的文字和文件名。
4.5 练习2
- 弹出对话框,输入要查询的城市
- 进入google,输入该城市的天气,进行查询
- 将查询的气温输出
具体的workflow作成步骤:
- 添加InputDialog,并保存输入的城市
- 在Chrome中打开google.com
- 打开web,在web recording中打开web浏览器
- 点击type,录入要检索的内容,内容随意,稍后会进行替换
- 点击type->hotkey按下,使用enter key
- 点击copy,将温度值copy下来
- web recording中,选择关闭浏览器
- 保存终止
- 替换文本为变量
完毕后的workflow如下图:
5. UI上的高级操作
- 3种input 方式的设定,以及各自的差别
- screen scraping wizard的使用方法
- 3种output方式的设定以及区别
- data scraping wizard的使用方法
5.0 小结
- 三种文字抽取方式:
- FullText:默认的输出method,高速且正确
- Native:输出method,高速而且能抽出文字位置
- OCR:抽取上面无法抽取的文字
5.1 输入输出方法
- 能recording的:
- button按下
- checkbox按下
- dropdown
- 文字shur
- 不能recording的
- shortkey
- 修饰key,ctrl+c等
- 右键按下
- mousebar
- 选择basic
- recording 开始按下
- 选择记事本的空白区域,输入文字
- 然后最小化
- 再次点开记事本,继续输入
- 保存
输入的方式有三种:
- default
- window message
- simulator
5.2 画面scraping
关于数据的输出方式:
默认的方式是第一种,FullText
看一下实际的例子:
- 选择画像scraping
- 准备打开记事本,IE,以及demo程序
- 获取IE上的文字串,点击后在Scrape Result Review中选择Scraping Method可以切换不同的方式(OCR,Native,FullText),同时更新,可以看到结果将发生变化
- 最后用MessageBox输出
自动的输出方式,与其对应的手动追加方式:
输出方法(自动) | activity(手动) |
---|---|
Basic Recording | GetText |
Full Text | GetFullText |
Native | GetVisibleText |
OCR | GetOCRText |
然后,通过手动添加activity的方式添加了GetFullText:
5.3 data scraping
与前面两类不同,data scraping能够对应的是结构化数据,比如google的结果,都是固定的格式(title-url-details)。
通过选择Data Scraping,选择结构化的数据后,根据wizard提示,抽出对应的数据的flow:
5.4 练习1
- 打开浏览器,输入“https://www.ebay.com/”
- 检索 LapTop,将前100个项目的商品名和价格抽出
- 输入到excle文件
workflow如下图:
- 打开chrome,访问ebay.com
- 使用web,自动录制
- 输入laptop,点击Search
- 保存退出
- 打开data scraping
- 按wizard提示操作
- 最后将录制的activity的输出设置为ExtractDataTable
- 添加system下写入excel的activity
6. Selector
本章学习:
- 什么是稳定的selector
- 如何将wildcard插入selector
- 如何将变量插入selector中
- 如何作成相对selector
6.0 总结
- 用语:
- selector:自动化操作所拥有的信息
- UIExplorer:作成select,微调整
- wildcard:即通配符,如*或?
- 完全selector:没有省略的selector,在container中可以使用
- 部分selector:一部分省略的selector,在container中可以使用
- anchor base:anchor与target,利用其画面的位置定位
- highlight:selector的确认,以及trouble shooting中使用
- selector:
- 从根要素到target要素的UI要素路径
- selector是文字型
- 通过使用wildcard,能使selector更安定
- activity:
- 通过Find Element在画面上查找要素
- 查找所需要的时间,通过timeout设定
6.1 Selector概要
- 打开basic
- 按下recording,选择记事本”filename.txt”的输入区域
- 输入文字
可以看到这个workflow如下:
下面就是notepad的selector,其中checkbox是一系列约束条件,如果不满足这些条件,robot会弹出下面的错误,显示selector无法找到。
如果将title的checkbox去掉,就会发现在其他文件名的记事本中,也能运行该robot。
6.2 Selector的结构/定制化/改善方法(1)
- 完全selector (recording-basic)
- 部分selector (recording-desktop)
1. 两者之间的差别
下面通过两种方式basic和desktop,录制计算器中按下7的操作,对比两种不同方式的workflow,以及selector:
在basic中,针对按下7这个activity,其selector中包含了其app,以及按键等各个属性。 而在desktop中,最上层有一个attach window,下面存储的按下7这个activity,其selector只包含部分属性。
2. 使用通配符
*
和 ?
分别表示多个文字,和 一个文字,比如如果某个workflow是针对文件filename_0423.txt
的,要使得该workflow有通用性,可以将其selector
中的文件名进行修改,如下:
6.3 Selector的结构/定制化/改善方法(2)
下面的workflow实现:
- 弹出输入对话框,输入数字0-9
- 使用highlight activity,并按下计算器中的数字
可以将输入框中的数字进行高亮显示:
6.4 Selector应用
假定在下面的网页(http://rpachallenge.com/?lang=ja)中输入名字,如果位置变化的话,可能会造成错误:
1. 使用 anchor base
- 使用anchor base
- 左边选择 find element,选中输入框旁边的label
- 右边选择 type info,选中输入框,并输入文字
如下:
2. 使用相对selector
- 添加type info activity
- 选中输入框后输入文字
会发现如果页面更新后,网页结构发生变化后,就无法正常工作了。
下面使用相对selector方式,修改上面的selector:
- 使用Ui exploerer
- 使用indicatetor选中输入框
- 使用indicate anchor选中旁边的label
取出selector内容(因为id受页面结构影响,故将id的checkbox去掉):
<html app='chrome.exe' title='RPAチャレンジ' />
<webctrl aaname='苗字' tag='LABEL' />
<nav up='1' />
<webctrl tag='INPUT' />
经过上面的修改后,发现即使发生页面变化,也能准备将文字输入到指定输入框。
6.5 练习
- 使用 https://ja.fakenamegenerator.com 生成随机值,抽出姓名,电话号码,和公司名,并将姓名分割成LastName和FirstName
- 然后将上面的信息,输入到 http://rpachallenge.com/?lang=ja 中。
- 使用Ui Explorer作成selector
参考 here
https://ja.fakenamegenerator.com
,选择成日本人的名字,其url为https://ja.fakenamegenerator.com/gen-random-jpja-us.php
- 打开
http://rpachallenge.com/?lang=ja
作成flow如下:
- 选取attach browser,选择上面的fakename的网站
- 查看selector,将其title修改为带有通配符的
<html app='chrome.exe' title='ランダムに名前を生成 - * - Fake Name Generator' />
- 在Attach Browser中添加Get Text 的activity
- 使用indicate on screen选择生成的姓名
- 选择其selector,使用UI exploerer打开
- 追加其父要素,同时删除css-selector,处理前后:
处理前:
<webctrl idx='1' tag='H3' />
处理后:
<webctrl parentid='details' tag='DIV' idx='10' />
<webctrl tag='H3' />
- 将该activity的output设置为变量Name,因为这个Name变量在后续的Attach Browser会继续使用,需要修改其scope
- 下面处理公司名,公司名旁边有label,所以适合使用Anchor base,将其加入到Attach Browser中
- 左边使用Find element,点击网页上的label-社名
- 打开其selector,将
<webctrl tag='DT' aaname='Company'/>
复制过去。(通过UI Explorer查询到的) - 右侧使用Get Text,将其output设置为变量CompanyName
- 另外将anchor的位置设置为left
- 同样的方式处理电话号码。(添加Anchor Base)
- FirstName和LastName使用两个Assign的activity处理,分别使用
Name.Split(""c).GetValue(1).ToString
- 下面处理文字输入,再加一个Attach Browser,将其指定为
http://rpachallenge.com/?lang=ja
- 这里可以使用两种方式,使用Anchor base,或相对Selector,这里使用相对Selector
- 使用UI Explorer,先使用IndicateElement选择姓名的输入框,再使用Indicate Anchor选择其label。
- 在selector editor中,check上其父要素,将Id的checkbox删除(它属于变动的)
- 添加Type Into到第二个AttachBrowser中,将上面得到的selector复制过去
- 用上面相同的方式,继续处理其他要输入的要素
上面的workflow没有执行成功,后续再修改,先赶进度。@2019年4月24日