在airtest中使用ocr反向識別文本內(nèi)容進(jìn)行斷言

airtest是網(wǎng)易開發(fā)的一款基于圖象識別的ui自動化框架炭分,其對元素操作的流程是先對元素進(jìn)行截圖驾孔,再和客戶端當(dāng)前界面截圖進(jìn)行對比瓶盛,找出位置,執(zhí)行點擊操作呕乎。

這樣的操作免除了傳統(tǒng)的查找控件的繁雜积担,但是對元素的斷言卻不夠精細(xì),尤其在不僅僅判斷元素是否存在猬仁,而且還要對文本的內(nèi)容進(jìn)行檢查時帝璧,可以說無能為力了。

想要解決這個問題湿刽,可以使用回歸傳統(tǒng)的元素查找方式(airtest內(nèi)置了各端通過元素查找方式的api)的烁,查找到元素,再判斷他的文本屬性诈闺,得到內(nèi)容渴庆;但這樣的方式第一需要在元素的映射方式上增加傳統(tǒng)的例如xpath的關(guān)系,第二很多時候由于不規(guī)范開發(fā)等原因,元素的定位屬性往往不容易確定襟雷,花費(fèi)時間查找其實已經(jīng)丟失了圖像識別控件的便利性刃滓。

在實際的操作中(我的項目是pc端+安卓端雙端互動的場景),我發(fā)現(xiàn)可以利用airtest本身的api耸弄,外加ocr的python庫咧虎,做到對元素內(nèi)容的識別,從而解決這個問題计呈。

大概的思路是老客,先用airtest本身的api,將待識別內(nèi)容截圖扣下來震叮,然后利用ocr的庫進(jìn)行對其內(nèi)容識別胧砰。

理論上,如果你的設(shè)備分辨率不會變更苇瓣,那么其實不需要用到airtest的api尉间,直接用固定的位置,通過opencv等圖像處理的庫進(jìn)行摳圖保存即可击罪,但由于生產(chǎn)設(shè)備的分辨率不能保證哲嘲,因此,需要一個相對的位置媳禁,對這個位置眠副,airtest里有直接可用的方法,這個方法也是其本身對分辨率兼容的辦法竣稽。

airtest通過你截圖時記錄的坐標(biāo)囱怕,設(shè)備分辨率,來生成一個recordpos毫别,這個pos其實就是一個用來計算當(dāng)分辨率不同時他的坐標(biāo)偏移量娃弓。

具體怎么通過recordpos進(jìn)行計算坐標(biāo),這里就不贅述了岛宦,主要說一下通過recordpos進(jìn)行元素查找的方法台丛,這個方法是get_predict_area,有四個參數(shù)砾肺,分別是record_pos(截取控件圖片時的偏移量)挽霉、image_wh(空間的寬高)、image_resolution(截取圖片時記錄的設(shè)備分辨率)变汪、screen_resolution(查找控件時所在設(shè)備的實際分辨率)侠坎。

該方法會返回一個四角坐標(biāo),我們把這個四角坐標(biāo)用內(nèi)置的圖片處理方法疫衩,在設(shè)備及圖上進(jìn)行截圖保存硅蹦,就可以獲取到待識別控件的圖片啦,然后再用ocr庫對這個圖片進(jìn)行識別闷煤,就可以得到控件的文本內(nèi)容了童芹。

示例代碼如下(只適用于本人的硬件設(shè)備,用作參考):

        dev = device()
        stu_answer_num = r'./valid_pic/stu_answer_num.png'  # 答題區(qū)域的截圖路徑
        interact_pic_path = r'./valid_pic/snap_interact.png'  # 互動界面的截圖路徑
        interact_image = dev.snapshot(interact_pic_path)  # 把互動界面截圖保存

        from PIL import Image
        import pytesseract
        from airtest import aircv
        from airtest.core.cv import Predictor

        screen_resolution = aircv.get_resolution(interact_image)  # 獲取互動界面截圖的實際分辨率
        # 動態(tài)創(chuàng)建類繼承自Predictor鲤拿,修改類參數(shù)假褪,偏移值DEVIATION為0,用以獲取精準(zhǔn)的截圖區(qū)域
        predictor = type('Pos', (Predictor,), {'DEVIATION': 0})
        xmin, ymin, xmax, ymax = predictor.get_predict_area(record_pos=(0.404, -0.213), image_wh=(265, 45),
                                                            image_resolution=(1919, 1040),
                                                            screen_resolution=screen_resolution)  # 獲取答題區(qū)域的截圖坐標(biāo)
        predict_area = aircv.crop_image(interact_image, (xmin, ymin, xmax, ymax))
        aircv.imwrite(stu_answer_num, predict_area)  # 將待識別區(qū)域進(jìn)行截圖保存
        answer_str = pytesseract.image_to_string(Image.open(stu_answer_num), 'chi_sim')  # 識別出的文字類似’全 班 共 參 與 : 1/1‘
        print(answer_str)
        if answer_str.find('參 與'):
            answer_str = answer_str.split(' ')[-1]  # 取1/1
            answer_num = int(answer_str.split('/')[0])  # 取答題人數(shù)
            return answer_num
        return
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末近顷,一起剝皮案震驚了整個濱河市生音,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窒升,老刑警劉巖缀遍,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饱须,居然都是意外死亡域醇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門蓉媳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來譬挚,“玉大人,你說我怎么就攤上這事酪呻〖跣” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵玩荠,是天一觀的道長漆腌。 經(jīng)常有香客問我,道長阶冈,這世上最難降的妖魔是什么屉凯? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮眼溶,結(jié)果婚禮上悠砚,老公的妹妹穿的比我還像新娘。我一直安慰自己堂飞,他們只是感情好灌旧,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绰筛,像睡著了一般枢泰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铝噩,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天衡蚂,我揣著相機(jī)與錄音,去河邊找鬼。 笑死毛甲,一個胖子當(dāng)著我的面吹牛年叮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播玻募,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼只损,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了七咧?” 一聲冷哼從身側(cè)響起跃惫,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎艾栋,沒想到半個月后爆存,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蝗砾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年终蒂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遥诉。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡拇泣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矮锈,到底是詐尸還是另有隱情霉翔,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布苞笨,位于F島的核電站债朵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瀑凝。R本人自食惡果不足惜序芦,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粤咪。 院中可真熱鬧谚中,春花似錦、人聲如沸寥枝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽囊拜。三九已至某筐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冠跷,已是汗流浹背南誊。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工身诺, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抄囚。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓霉赡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親怠苔。 傳聞我的和親對象是個殘疾皇子同廉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 本教程翻譯自PyImageSearch英文原文 上周的博客內(nèi)容仪糖,我們學(xué)習(xí)了如何安裝Tesseract去做OCR識別...
    TimBao閱讀 33,530評論 0 14
  • 無目標(biāo)命令 在[上一章][界面元素]中柑司,我們講述了界面元素,以及如何選取一個界面元素作為目標(biāo)锅劝,以便使用有目標(biāo)的命令...
    Creator_蔚藍(lán)閱讀 10,066評論 0 3
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案攒驰? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,737評論 1 92
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,090評論 1 32
  • hi,大家好我是小咖 第五人格在正式服上線的時候很多老玩家都記得故爵,官方曾經(jīng)舉辦了一項征文比賽玻粪,就是尋找設(shè)計師設(shè)計第...
    第五出報員小咖閱讀 147評論 0 0