Qt 是一個跨平臺應用程序和 UI 開發框架。使用 Qt 您只需一次性開發應用程序,無須從新編寫源代碼,即可跨不一樣桌面和嵌入式操做系統部署這些應用程序。javascript
Qt 支持在Windows,Linux等平臺運行,以及包括多達 250 個以上的 C++ 類,同時支持 2D/3D 圖形渲染,支持 OpenGL等優異的特性,不少企業會選擇使用Qt開發桌面客戶端。java
下面是Qt的演示樣例,裏面包含豐富的樣例小程序。node
因爲它的跨平臺特色,它的控件實現有本身獨特性。自動化測試是一個挑戰。有些用戶選擇在Windows上作自動化,其它平臺再手動驗證主要場景。本次教程以Windows上面Qt 桌面端爲例,講解如何自動化基於Qt 的Windows桌面應用程序。編程
桌面應用自動化從大的類別分主要有兩種方式,一種是對象識別,一種是圖像識別。對象識別能夠經過控件的一些屬性特色精準的識別控件,包括它的子控件。圖像識別則經過圖像匹配,或OCR的方式找到控件,作相應的操做。小程序
圖像識別由於識別精度的問題,何況容易受分辨率或其它系統設置的影響,一直沒法100%精肯定位和操做,通常做爲對象識別的輔助手段。框架
LeanRunner做爲使用對象識別方式的自動化工具,可以比較精準的操做控件,特別是Windows複雜控件,如TreeView、ListView、DataGrid等,還可以對它們中間的子控件作相應的操做。此外它能支持多種編程語言,包括Node.js、VBScript、JavaScript (WScript)和C#等,除此以外還可以經過圖片自定義虛擬控件。異步
在這裏,主要使用LeanRunner Lite,即LeanRunner 的簡化版,它支持Node.js開發腳本,可以在Windows 應用商店自由下載。更多信息可參見相關文檔:www.leanpro.cn/docs/leanru…。async
一個LeanRunner自動化腳本由兩部份組成:對象模型庫和腳本部分。對象模型庫存儲被測應用界面上的控件識別信息,它還保留了控件層級的信息。編程語言
下圖爲LeanRunner 的模型管理器:工具
使用模型管理器能夠方便的識別各種Windows 桌面端應用控件。
下圖爲 LeanRunner腳本編輯界面,它能夠編輯Node.js、VBScript、JavaScript(WScript)等語言腳本。C#腳本須要在Visual Studio中開發。LeanRunner也提供了Visual Studio的集成。
與模型管理文件結合使用,調用相關的操做API,便可進行UI的自動化。 當被測應用更新時,主要更新對象模型就能夠了,提升了腳本的可維護性。
下面能夠經過具體的一個操做來熟悉桌面應用自動化的使用方法。
實例操做
使用Qt自帶的Adrress Book應用,模擬添加一個聯繫人操做,快速入門Qt桌面應用自動化。
下面就上述場景實現自動化:
打開LeanRunner, 選擇【文件】--【新建項目】
填寫相應的【項目名】和【項目路徑】,點擊建立按鈕。
默認軟件界面以下:
項目已經幫你生成了空的腳本和模型文件。
彈出添加對象對話框。選擇【添加】,添加成功後,保存文件。
將add 按鈕的元素模型添加到模型文件中。
在模型管理器中選中對應節點,在元素操做界面選擇對應操做,點擊【複製方法代碼到剪貼板】
按照如上操做,能夠定位到「新建聯繫人」窗口中的 【name】,【address】對象。
在定位【name】,【address】控件的時候,因爲它們都是Edit類型控件,且其它識別屬性都相同。在自動化時會被認爲是同一控件。爲了區分,在添加對象到模型後,須要爲此元素手動添加一個index屬性。
添加方式爲選擇【Edit】節點,【識別控件】點擊【添加屬性】按鈕:
一樣爲 address 控件以一樣方式添加 index屬性並設置值爲1: 最終對象以下:
做爲node.js代碼,LeanRunner使用了async/await語法。不瞭解的同窗能夠參考一下node.js文檔。
將複製的代碼粘貼到script1.js文件中。
const { TestModel } = require("leanrunner");
var model = TestModel.loadModel("E:\\qtdemo\\model1.tmodel");
(async function() {
//// Paste code here /////
})();
複製代碼
咱們要模擬點擊add按鈕的操做,在模型管理器中,選中add 節點,控件操做欄選擇click 方法,點擊【複製方法到剪貼板】
const { TestModel } = require("leanrunner");
var model = TestModel.loadModel("E:\\qtdemo\\model1.tmodel");
(async function () {
//// Paste code here /////
await model.getButton("Add").click(0, 0, 1);
})
複製代碼
最終代碼:
const { TestModel, Util } = require("leanrunner");
var model = TestModel.loadModel("E:\\qtdemo\\model1.tmodel");
(async function () {
//// Paste code here /////
await model.getButton("Add").click(0, 0, 1);
await model.getEdit("Edit").pressKeys("sam");
await model.getEdit("Edit2").set('china');
await model.getButton("OK").click(0, 0, 1);
})();
複製代碼
上面的代碼中await關鍵字是在異步操做中使用的,由於LeanRunner中全部對控件的操做都是異步調用,因此要加這個關鍵字。
保存文件,點擊【運行腳本】按鈕,便可運行當前代碼。能夠看到鼠標會自動點擊 address book 中的 【add】按鈕。
經過上面的實例,咱們能夠快速上手構建Windows 應用程序的自動化。此教程爲系列教程,會在後面的教程中詳細爲你們介紹一些Qt複雜控件的自動化技巧以及LeanRunner的高級功能。敬請期待。。。