天天看點

Appium app自動化測試經驗分享-圖檔内文字的斷言

之前,在斷言心得第二篇分享中,我自己想到的一個問題,地圖類App如何做斷言?

現在較長的描述下情景:對地圖導航類app進行放大與縮小時【選擇不同縮放級别】,如何對前後不同界面進行斷言?想到的方法就是斷言比例尺。

這次來分享下經驗:1.多點觸控,實作地圖縮放;2.由于比例尺沒能通過uiautomatorviewer/Appium的Inspector定位到,想到截圖之後識别文字,再作斷言;3.識别不到比例尺的内容,決定先裁剪圖檔,再識别;4.斷言的幾種思路。

個人部落格:https://blog.csdn.net/zyooooxie

一)地圖縮放 多點觸控

MultiAction 是多點觸控的類,用來模拟使用者多點操作。主要包含 add() 和 perform() 兩個方法, MultiAction要結合TouchAction才能模拟出使用者的多個手指滑動的操作效果【地圖縮放】;

第一種 多點觸控的方法:放大地圖

def duoDian(self):
        """多點觸控"""
        # 實際這用例是模拟手指從左上角、右下角往中間并攏的情景
        # 雖然手指一般不會超過中間點,但是腳本設定可以超過

        from appium.webdriver.common.multi_action import MultiAction
        from appium.webdriver.common.touch_action import TouchAction

        x1 = self.driver.get_window_size()['width']
        y1 = self.driver.get_window_size()['height']

        a1 = TouchAction(self.driver)
        a1.press(x=x1 * 0.2, y=y1 * 0.2).wait(400).move_to(x=x1 * 0.75, y=y1 * 0.75).release()
        # press() move_to()用的是坐标位置,非元素
        # wait() 模拟真實滑動使用時間

        a2 = TouchAction(self.driver)
        a2.press(x=x1 * 0.8, y=y1 * 0.8).wait(400).move_to(x=x1 * 0.25, y=y1 * 0.25).release()

        a3 = MultiAction(self.driver)
        a3.add(a1, a2)
        a3.perform()
           

第二種 多點觸控的方法:縮小地圖

def duoDian_2(self):
        """多點觸控"""
        # 實際這用例是模拟手指從中間線的上面、下面往中間并攏的情景
        # 雖然手指一般不會超過中間點,但是腳本設定可以超過

        from appium.webdriver.common.multi_action import MultiAction
        from appium.webdriver.common.touch_action import TouchAction

        x1 = self.driver.get_window_size()['width']
        y1 = self.driver.get_window_size()['height']

        a1 = TouchAction(self.driver)
        a1.press(x=x1 * 0.5, y=y1 * 0.45).wait(400).move_to(x=x1 * 0.5, y=y1 * 0.2).release()
        # press() move_to()用的是坐标位置,非元素
        # wait() 模拟真實滑動使用時間

        a2 = TouchAction(self.driver)
        a2.press(x=x1 * 0.5, y=y1 * 0.55).wait(400).move_to(x=x1 * 0.5, y=y1 * 0.8).release()

        a3 = MultiAction(self.driver)
        a3.add(a1, a2)
        a3.perform()
           

二)截圖,裁剪圖檔

在把前後截圖儲存後,利用Tesseract直接進行識别的時候,發現幾乎百分百 無法識别我想要的比例尺,先給大家看下識别後的結果:

Appium app自動化測試經驗分享-圖檔内文字的斷言

思路改變為 裁剪所儲存的截圖,隻把比例尺那一小部分 截取出來再進行識别。

三) 識别圖檔内的文字,斷言

def shiBie(self, path):
        from PIL import Image
        import pytesseract

        img = Image.open(path)      # 加載原始圖檔

        width = img.size[0]
        height = img.size[1]

        # 可以隻截取比例尺那一點點
        img = img.crop((150, height - 300,  width - 720, 1750))     # crop()的尺寸 根據手機分辨率有改變
        img.save('D:\last.png')

        text = pytesseract.image_to_string(Image.open('D:\last.png'), )
        return text
           

實際用例設計及列印的識别結果:

Appium app自動化測試經驗分享-圖檔内文字的斷言

看下截取比例尺那一部分的先後不同截圖結果的 第一種:

Appium app自動化測試經驗分享-圖檔内文字的斷言

【100米 是預設】

Appium app自動化測試經驗分享-圖檔内文字的斷言

第二種:

Appium app自動化測試經驗分享-圖檔内文字的斷言
Appium app自動化測試經驗分享-圖檔内文字的斷言

斷言

最初決定練習的時候,我想到的是判斷‘米’、‘公裡’存在是否,讀取後對前面那數字進行不相等比較;在看到實際識别結果後,很有可能出現識别失敗内容不清楚(内容不符合,和比例尺無關的),我覺得要更換思路:直接對前後識别内容進行對比,判斷是否相等【我相信:相同内容識别結果肯定相等】。

再深入想想後,覺得可以多次縮放,把每次識别後的内容都與前一次進行對比,總有機會完全識别得。當然這時候,隻要把讀取的str進行切片後斷言前幾個字,這應該最符合我最初的需要。

Appium app自動化測試經驗分享-圖檔内文字的斷言

交流技術 歡迎+QQ 153132336 zy

個人部落格 https://blog.csdn.net/zyooooxie

繼續閱讀