RPA 入門介紹
什么是 RPA?RPA 是機(jī)器人流程自動(dòng)化 Robotic Process Automation 的簡寫。在《智能RPA實(shí)戰(zhàn)》中,我們這樣定義:通過特定的、可模擬人類在計(jì)算機(jī)界面上進(jìn)行操作的技術(shù),按照規(guī)則自動(dòng)執(zhí)行相應(yīng)的流程任務(wù),代替或輔助人類完成相關(guān)的計(jì)算機(jī)操作。一句話總結(jié)就是:用軟件機(jī)器人自動(dòng)化之前由人完成的任務(wù)。
那么什么是 IPA 呢?IPA (Intelligent Process Automation) = RPA+AI。簡單來說就是使用 AI 來強(qiáng)化 RPA 的各項(xiàng)能力。比如:加強(qiáng) RPA 的界面元素識(shí)別能力、賦能 RPA 來完成 RPA 任務(wù)執(zhí)行過程中的智能決策等。我們通常把 RPA 比作抓手、AI 比作大腦。AI 負(fù)責(zé)思考,RPA 負(fù)責(zé)行動(dòng)。RPA 是一個(gè)數(shù)字化平臺(tái),可以調(diào)用計(jì)算機(jī)所有軟硬件能力。AI 可以作為其中一個(gè)智能組件存在,被 RPA 調(diào)用。AI 也可以作為 RPA 的一部分進(jìn)行賦能,比如智能化機(jī)器人調(diào)度邏輯。
目前,主要有 CV 和 NLP 兩個(gè)領(lǐng)域的 AI 技術(shù)在 RPA 中應(yīng)用比較廣泛。
1.?計(jì)算機(jī)視覺
CV (Computer Vision) 計(jì)算機(jī)視覺是一個(gè)專門研究如何從數(shù)字圖像中提取有用信息的領(lǐng)域。在 RPA 中,常見的 CV 技術(shù)有模板匹配、光學(xué)字符識(shí)別、目標(biāo)檢測(cè)等:
- Template Matching 模板匹配:模板匹配是大圖中定位小圖(模板)的算法。比如在桌面中定位一個(gè)圖標(biāo)的位置、尋找窗體中的一個(gè)按鈕等。
- OCR (Optical Character Recognition) 光學(xué)字符識(shí)別:通過輸入一張圖像,OCR 模型分析處理后,輸出圖像上的結(jié)構(gòu)化字符信息(字符的坐標(biāo)、字符的具體值)。比如驗(yàn)證碼識(shí)別、提取發(fā)票上的信息等。
- OD (Object Detection) 目標(biāo)檢測(cè):通過給計(jì)算機(jī)輸入一張圖像,讓計(jì)算機(jī)分析出其中的物體。比如分析一個(gè)應(yīng)用窗體內(nèi)的所有控件(按鈕、編輯框等)來進(jìn)行后續(xù)的 RPA 操作。
2.?自然語言處理
NLP (Natural Language Processing) 自然語言處理是一個(gè)專門研究如何從文本中提取有用信息的領(lǐng)域。在 RPA 中,常見的場(chǎng)景有:
- IDP (Intelligent Document Processing) 智能文檔處理:比如合同文檔自動(dòng)解析:自動(dòng)化處理大量合同文檔、快速應(yīng)對(duì)審閱、查找、校對(duì)等工作。文件信息分析提取:對(duì)企業(yè)招投標(biāo)文件、內(nèi)部文檔資料等長篇幅文件進(jìn)行解析。HR人崗精準(zhǔn)匹配:對(duì)簡歷進(jìn)行關(guān)鍵信息提取構(gòu)建人才畫像,匹配精準(zhǔn)崗位。
- 文本審核:黃反審核,識(shí)別文本中色情等低俗信息;識(shí)別宗教、槍支等反動(dòng)信息。涉政識(shí)別,識(shí)別文本中涉政等敏感信息。廣告過濾,識(shí)別和攔截廣告信息,并對(duì)用戶發(fā)言進(jìn)行識(shí)別和分析。垃圾檢測(cè),識(shí)別文本中罵人、刷帖等垃圾信息。
3. 應(yīng)用價(jià)值
RPA 應(yīng)用價(jià)值主要體現(xiàn)在下面幾個(gè)方面:
- 提升企業(yè)效率:時(shí)間上,人類選手 5 x 8h = 40h。機(jī)器選手 7 x 24h = 168h 是人類的 4.2 倍!畢竟 RPA 機(jī)器人一天有 3 個(gè)工作日,上一天班加兩天班…速度上,業(yè)務(wù)系統(tǒng)響應(yīng)有多快,RPA 就能執(zhí)行有多快。并且不會(huì)因?yàn)楣ぷ鲿r(shí)間延長而出現(xiàn)疲勞或準(zhǔn)確率降低等問題。
- 降低人工風(fēng)險(xiǎn):人類擅長抽象、推理。機(jī)器擅長重復(fù)。人類在疲倦、外界干擾、主觀情感波動(dòng)時(shí),容易產(chǎn)生誤操作、誤判。RPA 機(jī)器人擅長不斷地重復(fù)執(zhí)行特定的工作。
- 打通業(yè)務(wù)系統(tǒng):不需要改造原有系統(tǒng)、不需要開發(fā)接口或 SDK 來實(shí)現(xiàn)對(duì)接。也就是大家所聽到的“非侵入式”。典型應(yīng)用就是:完成孤立應(yīng)用間的數(shù)據(jù)轉(zhuǎn)移。
4. 發(fā)展歷程
RPA 發(fā)展歷程大概可以概括為以下幾個(gè)階段:
- 有人值守階段:在這個(gè)階段 RPA 以“虛擬助手”的身份出現(xiàn),幾乎涵蓋了機(jī)器人自動(dòng)化的主要功能、以及現(xiàn)有桌面自動(dòng)化軟件的全部操作。部署在員工PC機(jī)上,用于提高工作效率。缺點(diǎn)是難以實(shí)現(xiàn)端到端的自動(dòng)化,做不到成規(guī)模應(yīng)用。不過已能夠有效減少業(yè)務(wù)平均處理時(shí)間,可有效改善客戶體驗(yàn)并節(jié)省成本。
- 無人值守階段:在這個(gè)階段 RPA 被稱為“虛擬勞動(dòng)力”,主要目標(biāo)即實(shí)現(xiàn)端到端的自動(dòng)化,以及虛擬員工分級(jí)。主要部署在VMS虛擬機(jī)上,能夠編排工作內(nèi)容,集中化管理機(jī)器人、分析機(jī)器人的表現(xiàn)等。缺點(diǎn)是對(duì)于 RPA 軟件機(jī)器人的工作仍然需要人工的控制和管理。無人值守 RPA 機(jī)器人可以全天候工作 24 * 7,并用業(yè)務(wù)流程代替了人機(jī)交互,釋放了更大的增效降本可能性。
- 自主性 RPA 階段:在這個(gè)階段,RPA 的主要目標(biāo)是實(shí)現(xiàn)端到端的自動(dòng)化和成規(guī)模多功能虛擬勞動(dòng)力。通常部署在云服務(wù)器和 SaaS 上,特點(diǎn)是實(shí)現(xiàn)自動(dòng)分級(jí)、動(dòng)態(tài)負(fù)載平衡、情景感知、高級(jí)分析和工作流。缺點(diǎn)是處理非結(jié)構(gòu)化數(shù)據(jù)仍較為困難。但更多技術(shù)的融合,使得自主性 RPA 可從根本上提升業(yè)務(wù)價(jià)值并為用戶帶來更多優(yōu)勢(shì)。
- 認(rèn)知性 RPA 階段:這個(gè)階段將是未來RPA發(fā)展的方向。開始運(yùn)用人工智能、機(jī)器學(xué)習(xí)以及自然語言處理等技術(shù),以實(shí)現(xiàn)非結(jié)構(gòu)化數(shù)據(jù)的處理、預(yù)測(cè)和分析、自動(dòng)接受任務(wù)處理等。借助認(rèn)知能力,決策過程全都由機(jī)器人執(zhí)行,從而可以將所有漫長而復(fù)雜的任務(wù)自動(dòng)化。
RPA 的核心模塊?
1. 開發(fā)平臺(tái)
達(dá)觀 RPA 開發(fā)平臺(tái)
開發(fā)平臺(tái)是流程設(shè)計(jì)者設(shè)計(jì)流程的工具。主要有以下功能:
- 流程設(shè)計(jì):當(dāng)我們有一個(gè)想法,我們想使它變?yōu)榭勺远▓?zhí)行的流程,我們就需要用它來設(shè)計(jì)一個(gè)流程。可視化編程界面、低代碼編程,提供拖拉拽方式進(jìn)行業(yè)務(wù)邏輯的設(shè)計(jì)。必須要有設(shè)計(jì)復(fù)雜流程的能力,如流程、子流程、第三方庫、自定義組件等功能。也必須要有“封裝”能力,從小流程封裝為大流程。以及提供”復(fù)用“的概念,避免重復(fù)造輪子。另外還有幾個(gè)流程設(shè)計(jì)過程中的必備工具:
- 元素分析器:界面上,我們?nèi)庋劭吹降囊粋€(gè)個(gè)按鈕、編輯框等,在 RPA 的世界里都是一個(gè)個(gè)“元素”。很多可視化組件都是以一個(gè)元素作為輸入?yún)?shù),執(zhí)行相應(yīng)的動(dòng)作,比如“點(diǎn)擊按鈕”、“在編輯框內(nèi)輸入文本”等。通過元素分析器,我們可以很方便地在屏幕上選擇一個(gè)目標(biāo)元素。有了元素分析器,流程設(shè)計(jì)者不必?fù)碛羞^多的底層界面元素技術(shù)知識(shí)即可識(shí)別、定位元素,指哪兒就是哪兒。
- 元素錄制器:顧名思義,通過錄制一段用戶的操作,自動(dòng)地生成一堆可視化組件。在環(huán)境干擾比較小的時(shí)候,往往很有用。再結(jié)合調(diào)試進(jìn)行微調(diào),往往可以較快設(shè)計(jì)出一個(gè)流程原型。
- 數(shù)據(jù)抓?。哼@是一個(gè)特別有意思的功能,可以抓取屏幕上的結(jié)構(gòu)化信息:任何看起來像列表、表格、樹的數(shù)據(jù)都應(yīng)支持被抓取。
- 智能組件包:也就是部分通過 AI 賦能的可視化組件,通過簡單拖拽方式,可以完成像下面的一些功能:
- 圖片抽取信息:身份證抽取、發(fā)票抽取、營業(yè)執(zhí)照抽取、銀行卡抽取、火車票抽取等。
- 文檔抽取信息:采購類合同、銀行業(yè)零售貸款合同、民事判決、債券募集說明書等。
- 文檔智能分析:文本分類、文本審核、文本摘要、標(biāo)簽提取、觀點(diǎn)提取、情感分析等。
- 流程調(diào)試:流程開發(fā)過程中,我們可能需要實(shí)時(shí)進(jìn)行調(diào)試來發(fā)現(xiàn)流程中存在的問題。比如隨機(jī)斷點(diǎn)、單步調(diào)試、單步進(jìn)入、單步跳出、查看當(dāng)前狀態(tài)(如變量)等信息。利用調(diào)試功能,我們可以很方便地停留在流程的任一步驟,檢查當(dāng)前的上下文狀態(tài),以便調(diào)整、優(yōu)化流程。
- 版本管理:流程開發(fā)好以后,我們需要發(fā)布到控制臺(tái)。這個(gè)過程也就是“發(fā)版”。成熟的 RPA 產(chǎn)品應(yīng)當(dāng)有完善的版本化支持,可以為當(dāng)前流程發(fā)布特定的版本。也應(yīng)支持回滾到歷史任意版本。當(dāng)然,也應(yīng)該允許多個(gè)流程設(shè)計(jì)者同時(shí)修改同一個(gè)流程。
- 畫中畫:主要目的是提供環(huán)境隔離。通過提供一層虛擬會(huì)話,將機(jī)器人的運(yùn)行和當(dāng)前宿主機(jī)隔離開。讓機(jī)器人在執(zhí)行的同時(shí),業(yè)務(wù)老師也能正常使用電腦,互不干擾。
- 代碼支持:也是專家模式,直接調(diào)用底層 API、Block API 等。提供了任意復(fù)雜度的擴(kuò)展,允許有編程能力的流程設(shè)計(jì)同學(xué)進(jìn)行 RPA 的能力擴(kuò)展。
2. 控制中心
達(dá)觀 RPA 控制中心
控制中心是 RPA 機(jī)器人的大腦,所有的任務(wù)都從這里下發(fā),也可以說是 RPA 機(jī)器人的中央處理單元。主要有以下功能:
- 流程管理:對(duì)已發(fā)布的可視化流程進(jìn)行管理,也可以進(jìn)行導(dǎo)入導(dǎo)出、查看特定流程版本等。
- 機(jī)器人管理:管理 RPA 機(jī)器人。包含審核機(jī)器人上線、啟用禁用機(jī)器人、是否共享機(jī)器人等功能。也可以通過遠(yuǎn)程桌面技術(shù),直接查看機(jī)器人桌面。
- 任務(wù)管理:任務(wù)是機(jī)器人運(yùn)行流程的模板(static、靜態(tài)),通過選擇特定的流程、配置特定的參數(shù),可以創(chuàng)建一個(gè)任務(wù)。任務(wù)創(chuàng)建好以后,控制中心會(huì)根據(jù)任務(wù)的調(diào)度信息對(duì) RPA 機(jī)器人進(jìn)行調(diào)度。
- 作業(yè)管理:當(dāng)任務(wù)開始運(yùn)行,則會(huì)產(chǎn)生“作業(yè)”(runtime、動(dòng)態(tài))。包含機(jī)器人的運(yùn)行時(shí)的各種各樣的信息。比如運(yùn)行日志、運(yùn)行狀態(tài)等。
- 數(shù)據(jù)資產(chǎn):簡單理解就是云端的安全數(shù)據(jù)庫,在權(quán)限滿足的情況下,流程可以增刪查改指定的數(shù)據(jù)。同時(shí)也有安全字段的概念,比如當(dāng)一個(gè)字段為“加密”類型時(shí),我們不應(yīng)該能夠在開發(fā)平臺(tái)直接打印出它的值。
- 權(quán)限管理:基于角色的權(quán)限管理模型??梢詫?duì)不同的賬號(hào)賦予不同的角色,對(duì)不同的角色賦予不同的功能。
- 租戶管理:多租戶是一種單個(gè)軟件實(shí)例可以為多個(gè)不同用戶組提供服務(wù)的軟件架構(gòu)。SaaS 就是一種多租戶架構(gòu)。不同租戶間數(shù)據(jù)完全隔離。
- 運(yùn)維管理:管理 RPA 服務(wù)器本身??梢詫?duì)服務(wù)器進(jìn)行資源監(jiān)控、系統(tǒng)運(yùn)行監(jiān)控等。
- 報(bào)表分析:控制中心提供了關(guān)于機(jī)器人所有的數(shù)據(jù),我們可以通過這些數(shù)據(jù)來進(jìn)行各種統(tǒng)計(jì)分析。比如,分析某個(gè)流程的執(zhí)行成功率、某個(gè)機(jī)器人的執(zhí)行效率等。
- 日志審計(jì):每一次操作,都應(yīng)留痕。應(yīng)包含 RPA 機(jī)器人的相關(guān)日志、也包含用戶操作的相關(guān)日志。
3.?機(jī)器人
RPA 機(jī)器人:簡單來說就是執(zhí)行控制中心下發(fā)過來的任務(wù)。RPA 的執(zhí)行器!
RPA 元素分析器
兩個(gè)概念需要理解:用戶界面樹、元素選擇器。
- 用戶界面樹:用戶界面的抽象數(shù)據(jù)結(jié)構(gòu)呈現(xiàn),包含靜態(tài)數(shù)據(jù)和動(dòng)態(tài)數(shù)據(jù)。樹上的每個(gè)節(jié)點(diǎn)都是用戶界面上的一個(gè)元素。針對(duì)每個(gè)元素,我們可以對(duì)它進(jìn)行屬性查看、操作測(cè)試。
- 元素選擇器:用于在用戶界面樹上定位某個(gè)或某組元素的方式??梢跃珳?zhǔn)定位某個(gè)元素,比如找一個(gè)標(biāo)題為 X 的窗體;也可以模糊定位某個(gè)元素,找一個(gè)按鈕名稱以 X 開頭的元素。
那么為什么需要元素分析器呢?原因在于 UI 框架技術(shù)太多了!每種技術(shù),所需要適配的方式都不同。比如,想要自動(dòng)化 Web,我們需要理解 Web 的自動(dòng)化技術(shù);想要自動(dòng)化 Java 程序,我們需要理解 Java 的自動(dòng)化技術(shù);想要自動(dòng)化 SAP 程序,我們需要理解 SAP 自動(dòng)化引擎技術(shù)。這個(gè) UI 框架的適配應(yīng)該交給 RPA 廠商來完成。我們需要一種統(tǒng)一、簡單的方式來自動(dòng)化我們所看到的一切 UI 元素。流程設(shè)計(jì)者只需要了解:哦!這里有一個(gè)按鈕,我需要點(diǎn)擊它!
從定位方式來看元素分析器的發(fā)展歷程:
- 絕對(duì)坐標(biāo)定位:自動(dòng)喝藥輔助外掛。監(jiān)控屏幕上特定坐標(biāo)點(diǎn)的顏色變化,當(dāng)血槽顏色變?yōu)榛疑珪r(shí),就喝一瓶金瘡藥(按下使用金瘡藥道具的按鍵)
圖像識(shí)別示意圖1
- 圖像識(shí)別:在大圖中找小圖。循環(huán)監(jiān)控屏幕上是否出現(xiàn)了“地鼠”,出現(xiàn)了以后,則操作鼠標(biāo)點(diǎn)擊目標(biāo)位置。
圖像識(shí)別示意圖2
- 選擇器定位:DOM (Document Object Model) 文檔對(duì)象模型,把整個(gè) UI 界面抽象成一個(gè)“樹”數(shù)據(jù)結(jié)構(gòu),使用 XPath、CSS Selector 等語法來定位。我們可以把選擇器寫得很“精確”,也可以把選擇器寫得很“模糊”。
? ? ? ? ? ? ? ?選擇器定位 DOM 樹示意圖
- 智能定位:使用 AI 賦能 RPA。比如使用目標(biāo)檢測(cè)相關(guān)算法來進(jìn)行定位。
目標(biāo)檢測(cè)示意圖RPA 最核心的兩個(gè)任務(wù):元素的定位和元素的操控
元素的定位:
- 基于屏幕坐標(biāo)點(diǎn)(HitTest):主要是元素分析器的捕獲功能,可以讓流程設(shè)計(jì)者便捷地選擇一個(gè)目標(biāo)元素。
- 基于選擇器:通過簡單的選擇器語法,選擇 DOM 上的某個(gè)或某組元素。主要是流程運(yùn)行過程中,為了在運(yùn)行的環(huán)境中找到目標(biāo)元素。
- 基于 CV:通過模板匹配或相關(guān) AI 算法來定位目標(biāo)元素。當(dāng)業(yè)務(wù)程序不支持捕獲時(shí),它很有用!
元素的操作:
- 基于方法 AT (Assistive Technology):當(dāng)業(yè)務(wù)程序支持 AT 時(shí),我們可以直接調(diào)用 AT 方法來進(jìn)行操作。比如調(diào)用一個(gè)按鈕的點(diǎn)擊功能、設(shè)置文本框的內(nèi)容等。大部分業(yè)務(wù)程序都支持了 AT 方法!
- 基于消息:在 Windows 上,窗體之間可以通過消息來進(jìn)行通訊。我們可以利用 Window Message 來操控元素。
- 基于鍵鼠模擬:在獲取到目標(biāo)元素后,如果目標(biāo)元素不支持任何 AT 或消息,我們還可以簡單粗暴地利用鍵鼠模擬來操作。這也是最模擬人工的一種方式,在所有場(chǎng)景都可以用,畢竟人也是通過這種方式來和計(jì)算機(jī)進(jìn)行交互的。鍵鼠模擬本質(zhì)上也是基于 Windows 消息的。
自動(dòng)化技術(shù)可以按照是否有 GUI 來進(jìn)行分類。RPA 同時(shí)支持兩種自動(dòng)化,對(duì)帶 GUI 或 不帶 GUI 的業(yè)務(wù)程序都是支持的。
- 非 GUI 自動(dòng)化編寫簡單:測(cè)試代碼相對(duì)容易編寫,調(diào)試容易。運(yùn)行穩(wěn)定,不容易受到環(huán)境變化影響。易于維護(hù),不需要經(jīng)常更新測(cè)試代碼。運(yùn)行效率高,相對(duì)于 GUI 自動(dòng)化,非 GUI 自動(dòng)化非???。
- GUI 自動(dòng)化主要是覆蓋范圍廣:大多遵循 UI 框架底層 Accessibility 規(guī)范。非侵入式,不需要業(yè)務(wù)應(yīng)用的源代碼或 SDK 接入。(其實(shí)本質(zhì)上是被侵入了……在 UI 框架層!)最大程度模擬用戶操作,用戶怎么操作就怎么模擬。
- 有一些造成 GUI 自動(dòng)化不穩(wěn)定的因素:
- 隨機(jī)彈窗:當(dāng)自動(dòng)化腳本發(fā)現(xiàn)控件無法正常定位,或無法操作時(shí),GUI 自動(dòng)化框架自動(dòng)進(jìn)入“異常場(chǎng)景恢復(fù)模式”。在“異常場(chǎng)景恢復(fù)模式”下,GUI 自動(dòng)化框架依次檢測(cè)各種可能出現(xiàn)的對(duì)話框,一旦確認(rèn)了對(duì)話框的類型,立即執(zhí)行預(yù)定義的操作(比如:點(diǎn)擊“確定”按鈕),接著重試剛失敗的步驟。
- 控件屬性變化:絕對(duì)匹配比較精準(zhǔn),但”模糊匹配“彈性更大,可以提升控件的識(shí)別率。往往流程設(shè)計(jì)過程中需要權(quán)衡目標(biāo)元素以及相鄰層級(jí)之前的屬性使用。
- 被測(cè)系統(tǒng)的 A/B 測(cè)試:開發(fā)流程時(shí)見到的界面和運(yùn)行時(shí)見到的界面并不相同。需要在測(cè)試用例腳本中做分支處理,正確識(shí)別出不同的分支。
- 還有一些隨機(jī)的頁面延遲造成控件識(shí)別失?。阂胫卦嚈C(jī)制,可以是步驟級(jí)別、頁面級(jí)別、業(yè)務(wù)流程級(jí)別。
元素分析器的幕后技術(shù)
1. Win32 API
微軟的 Windows 操作系統(tǒng)底層 API。優(yōu)點(diǎn)就是看起來很高深、很強(qiáng)大、很底層,對(duì)標(biāo)準(zhǔn) Windows 的控件支持還不錯(cuò)。缺點(diǎn)是很復(fù)雜,開發(fā)效率低下。不支持自定義控件。
- 窗體識(shí)別:需要通過 FindWindow 和 EnumWindows 來查找到窗口句柄,然后再調(diào)用其它 API GetWindowText,GetWindowRect, GetWindowLong 等來獲取窗口屬性,以此來找到想要的控件或窗口。
- 操控和獲取屬性:通過 SetWindowText 和 GetWindowText 來操作控件上顯示的文字,通過SetForegroundWindow 設(shè)置頂層窗口,GetForegroundWindow 獲取當(dāng)前的頂層窗口,類似的還有 GetActiveWindow 和 SetActiveWindow。從理論上來說,通過 Windows API 和 Windows Message 可以完成對(duì)大部分控件或窗口的操作,也可以獲取部分控件的部分屬性。
2. MSAA?
MSAA(Microsoft Active Accessibility)?是一項(xiàng)提升 Windows 輔助控制能力的技術(shù)。MSAA 天生就不是設(shè)計(jì)給自動(dòng)化測(cè)試的,它存在的意義在于提供一套接口,讓開發(fā)人員可以方便的給殘疾人開發(fā)可以使用的軟件,比如屏幕閱讀程序(鼠標(biāo)移動(dòng)到按鈕的時(shí)候,可以發(fā)出聲音,輔助視力障礙的人操作電腦),從而實(shí)現(xiàn)微軟將電腦普及到每一個(gè)家庭的夢(mèng)想。MSAA 主要是基于 COM 的技術(shù)。通過 IAccessible 來表示 UI 界面元素的信息。提供了如 AccessibleObjectFromWindow 等 API 來獲取它。MSAA 可以查詢?cè)匦畔ⅲ热缣囟ㄎ恢玫脑匦畔?。注?cè)事件,當(dāng)元素信息改變時(shí)得到通知。比如當(dāng)按鈕 disable 了或字符串變化。操作界面元素,比如按鈕、下拉框、菜單等。
- 優(yōu)點(diǎn):比起 Windows API 來說,用戶只需要跟 IAccessible 打交道,通過這個(gè)接口能獲得的控件信息相對(duì)豐富很多,基本操作也不需要通過 Windows Message 的方式來實(shí)現(xiàn)。另外一個(gè)比較大的優(yōu)點(diǎn)就是,自定義控件的支持,當(dāng)然了,并不是說開發(fā)寫一個(gè)自定義控件,這個(gè)控件就可以通過 MSAA 來識(shí)別,而是說當(dāng)開發(fā)人員在實(shí)現(xiàn)自定義控件的時(shí)候,可以實(shí)現(xiàn) IAccessible 的接口,并且通過這個(gè)接口,把一些的屬性和操作暴露出來,測(cè)試人員就可以將這個(gè)控件當(dāng)作標(biāo)準(zhǔn)控件,并通過MSAA來自動(dòng)化??雌饋砺闊┝它c(diǎn),但是最起碼對(duì)自動(dòng)化自定義控件提供了可能。
- 缺點(diǎn):天生不足,MSAA 從來就不是給自動(dòng)化測(cè)試設(shè)計(jì)的,所以也不會(huì)考慮自動(dòng)化測(cè)試的需求,獲取到的控件信息比 Windows API 多,但是相對(duì)自動(dòng)化測(cè)試的需求來說還是遠(yuǎn)遠(yuǎn)不夠,而且僅僅支持一個(gè)基本操作,其它的操作還必須通過 Windows Message。另外就是微軟推出 WPF 以后,MSAA 的局限性越加明顯(這也是因?yàn)?WPF 的控件屬性更加豐富、更具定制性、更自由,用 MSAA 難以描述),這也是微軟推出 UIAutomation 的一個(gè)的原因。
它是如何工作的:提供信息的應(yīng)用稱為 Server;負(fù)責(zé)處理事件通知 NotifyWinEvent;獲取元素信息 WM_GETOBJECT。Server 通過 IAccessible 來返回元素信息。Client 可以通過 AccessibleObjectFromWindow、AccessibleObjectFromPoint、AccessibleObjectFromEvent、accNavigate、get_accParent 來獲得 IAccessible。
3. UIA 用戶界面自動(dòng)化
UIA 是微軟新一代的 Accessibility 框架,在所有支持 WPF 的操作系統(tǒng)上都支。UIA 提供了大多數(shù) UI 元素可編程訪問的能力。它抽象了大部分 UI 框架的共有屬性,比如 WPF 按鈕的 Content 屬性、Win32 按鈕的 Caption 屬性、HTML 圖像的 ALT 屬性,都被映射成 UIA 的 Name 屬性。另外,UIA 也兼容 MSAA。從架構(gòu)上來講,UIA 在針對(duì)標(biāo)準(zhǔn)控件的時(shí)候,通過 UI Automation Proxy 調(diào)用了 MSAA Server,基本上覆蓋了 MSAA 的功能。
4. JAB
JAB?(Java Access Bridge)主要是為 Java 應(yīng)用提供元素信息的框架。主要服務(wù)于屏幕閱讀器或其它輔助控制程序。利用 JAB 我們可以訪問到 Oracle 系列應(yīng)用、金蝶、用友等廠商開發(fā)的業(yè)務(wù)程序。
5. SAP
SAP 提供了 Scripting Engine 來進(jìn)行用戶界面自動(dòng)化。SAP Scripting Engine 是一套基于 COM 的接口,提供了 SAP 全面的腳本化支持。需要在 RZ11 transaction 下,將 sapgui/user_scripting 參數(shù)設(shè)置為 TRUE。
6. Citrix Virtual Channel
Citrix 提供了 Virtual Channel 的機(jī)制來滿足 Client 和 Server 之間的通訊需求。利用 Virtual Channel,我們可以向 Citrix 虛擬桌面發(fā)送任意指令、獲取業(yè)務(wù)所需信息。Citrix 是基于 ICA (Independent Computing Architecture) 協(xié)議來實(shí)現(xiàn)的。
Citrix Virtual Channel
7. RDP Virtual Channel
RDP (Remote Desktop Protocol) 是微軟開發(fā)的一套遠(yuǎn)程桌面協(xié)議。RDP 也提供了 Virtual Channel 機(jī)制來滿足 Client 和 Server 之間的通訊需求。
RDP Virtual Channel
8. 瀏覽器控制
- Selenium:開源的瀏覽器控制框架,支持大多數(shù)瀏覽器。市面上大多的網(wǎng)頁爬蟲程序都是用 Selenium 來實(shí)現(xiàn)的。另外 Selenium 對(duì)編程語言非常友好,支持絕大多數(shù)編程序言的接入。但……Selenium 太有名了,很多業(yè)務(wù)網(wǎng)站針對(duì) Selenium 做了很多反自動(dòng)化的操作,導(dǎo)致 Selenium 操作網(wǎng)頁時(shí),會(huì)出現(xiàn)諸如驗(yàn)證碼、隨機(jī)校驗(yàn)窗體等驗(yàn)證過程。另外 Selenium 對(duì) IE 支持得不太好。
- IE自動(dòng)化:MSHTML/Trident – IWebBrowser2 接口。IE 瀏覽器使用的是 Trident 瀏覽器引擎,是 IE4 在 1997 年發(fā)布的。通過提供 IWebBrowser 接口來進(jìn)行自動(dòng)化操控。Windows 10 上的 IE11 已在 2022-06-15 號(hào)停止維護(hù)。
- Chrome Extension:Chrome 瀏覽器插件是允許開發(fā)者自定義用戶使用體驗(yàn)的一種技術(shù)??梢岳?Web 技術(shù),如 HTML、CSS、JavaScript 來自定義瀏覽體驗(yàn)。
- CDP (Chrome Devtools Protocol):DevTools 協(xié)議是 Chrome、Chromium,或任何基于 Blink 引擎的瀏覽器都支持的一種通訊協(xié)議。該協(xié)議可以對(duì)瀏覽器進(jìn)行檢查、調(diào)試、監(jiān)控等。Blink 是 Chromium 的渲染引擎。
9.?辦公自動(dòng)化
Microsoft Office 自動(dòng)化主要是通過 COM 技術(shù)的 IDispatch 接口來實(shí)現(xiàn)。通過 IDispatch,我們可以用任意支持 COM 調(diào)用的語言進(jìn)行自動(dòng)化,比如 Python、VBS 等。