python实现图像识别水果_使用Python实现基于图像识别的iOS自动化测试
相對(duì)于Android來(lái)講,iOS比較封閉。這一點(diǎn),在設(shè)計(jì)和評(píng)估自動(dòng)化測(cè)試方案的時(shí)候感受尤為強(qiáng)烈。iOS平臺(tái)上沒有特別好用的自動(dòng)化測(cè)試工具。蘋果針對(duì)iOS提供了UI Automation的Instruments工具,以及相配合使用的Javascript庫(kù),可是使用起來(lái)有很大的局限性。主要問題是必須使用Javascript來(lái)編寫測(cè)試腳本,不支持其余語(yǔ)言,很難實(shí)現(xiàn)復(fù)雜的功能。并且,在一臺(tái)mac機(jī)上同時(shí)只能運(yùn)行一個(gè)Instruments實(shí)例,沒法對(duì)多個(gè)設(shè)備同時(shí)進(jìn)行測(cè)試。在多數(shù)游戲應(yīng)用中,UI都不是使用標(biāo)準(zhǔn)控件的,因此不可避免的要使用圖像識(shí)別技術(shù)。而iOS UI Automation API里面除了截屏的功能并無(wú)提供多少幫助。html
所幸的是咱們找到了UIAHost.performTaskWithPathArgumentsTimeout()方法。這個(gè)方法是用來(lái)調(diào)用外部程序的。巧妙地利用這個(gè)方法能夠?qū)崿F(xiàn)比較復(fù)雜的功能。可是我仍然但愿測(cè)試邏輯能用Python來(lái)寫,由于Python用起來(lái)至關(guān)順手并且有成熟的測(cè)試框架。python
要讓UI Automation的Javascript腳本遵從Python腳本的指揮,能夠把Javascript腳本寫成一個(gè)服務(wù)器,接受來(lái)自Python腳本的指令,并調(diào)用相應(yīng)的API完成任務(wù)。通訊的任務(wù)可使用socket。固然Javascript腳本自己沒法完成這個(gè)任務(wù),因此須要調(diào)用外部程序來(lái)實(shí)現(xiàn)。這個(gè)外部程序能夠用Python來(lái)寫,我稱之為slave.py,而Javascript腳本就是master.js,由于是master建立的slave進(jìn)程。固然實(shí)際上slave并不聽命于master,master反而要遵從slave從socket得到的指令。ios
這樣一來(lái),只須要寫個(gè)驅(qū)動(dòng)層,把API調(diào)用包裝一下,經(jīng)過socket傳輸?shù)絪lave.py,再經(jīng)過slave.py的stdout返回到master.js,再經(jīng)過調(diào)用UI Automation API就實(shí)現(xiàn)了Python腳本的自動(dòng)化測(cè)試。固然本文沒有涉及不少細(xì)節(jié)實(shí)現(xiàn)問題,留給之后有時(shí)間再闡述。服務(wù)器
如下是簡(jiǎn)化的master.js示例代碼:app
UIALogger.logMessage("Instruments started.")var target =UIATarget.localTarget();var app =target.frontMostApp();var window =app.mainWindow();var host =target.host();var screenshotPath = "screen";var python_path = host.performTaskWithPathArgumentsTimeout("/usr/bin/which", ['python'], 1).stdout.replace("\n", "");if (python_path == "") {
UIALogger.logError("python is not found.");
}else{while(1) {var result =host.performTaskWithPathArgumentsTimeout(
python_path,['InstrumentsSlave.py'], 30);var ins = ("" + result.stdout).split('\n');if (ins[0] == 'exitApp')break;switch (ins[0]) {case 'tap':var x = ins[1];var y = ins[2];
target.tap({x:x, y:y})break;case 'input':var s = ins[1];
app.keyboard().typeString(s)break;case 'captureScreen':
target.captureScreenWithName(screenshotPath);break;default:break;
}
}
}
總結(jié)
以上是生活随笔為你收集整理的python实现图像识别水果_使用Python实现基于图像识别的iOS自动化测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android处理图片透明度并绘画图片
- 下一篇: 使用OpenCV和Python进行人脸识