之前,在斷言心得第二篇分享中,我自己想到的一個問題,地圖類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直接進行識别的時候,發現幾乎百分百 無法識别我想要的比例尺,先給大家看下識别後的結果:
思路改變為 裁剪所儲存的截圖,隻把比例尺那一小部分 截取出來再進行識别。
三) 識别圖檔内的文字,斷言
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
實際用例設計及列印的識别結果:
看下截取比例尺那一部分的先後不同截圖結果的 第一種:
【100米 是預設】
第二種:
斷言
最初決定練習的時候,我想到的是判斷‘米’、‘公裡’存在是否,讀取後對前面那數字進行不相等比較;在看到實際識别結果後,很有可能出現識别失敗内容不清楚(内容不符合,和比例尺無關的),我覺得要更換思路:直接對前後識别内容進行對比,判斷是否相等【我相信:相同内容識别結果肯定相等】。
再深入想想後,覺得可以多次縮放,把每次識别後的内容都與前一次進行對比,總有機會完全識别得。當然這時候,隻要把讀取的str進行切片後斷言前幾個字,這應該最符合我最初的需要。
交流技術 歡迎+QQ 153132336 zy
個人部落格 https://blog.csdn.net/zyooooxie