在做自動化的過程中,大多數執行者都不在旁邊,那麼如果用例失敗了我們通常看報告上的失敗信息,但是這樣有時候可能不夠清楚的判斷到底哪裏出了錯誤,我們還可以通過自動截圖的功能,判斷用例走到哪裏出了錯誤。
截圖方法
在自動化中截圖方法有幾種,我們一個個來看,那種最適合我們。
方法1:get_screensho t_as_file(self,filename)
通過屏幕進行截圖保存在對應路徑中
def get_screenshot_as_file(self, filename):
"""
將當前窗口的屏幕快照保存到PNG圖像文件中。返回
如果有IOError,則爲False,否則返回True。使用完整路徑
你的文件名。
"""
if not filename.lower().endswith('.png'):
warnings.warn("name used for saved screenshot does not match file "
"type. It should end with a `.png` extension", UserWarning)
png = self.get_screenshot_as_png()
try:
with open(filename, 'wb') as f:
f.write(png)
except IOError:
return False
finally:
del png
return True
上面的源碼中提示了我們如何進行使用,那麼我們直接通過unittest進行開始操作吧
異常截圖
# coding:utf-8
from appium import webdriver
import unittest
import time
class test(unittest.TestCase):
def setUp(self):
desired_caps = {
'platformName': 'Android', # 測試版本
'deviceName': 'emulator-5554', # 設備名
'platformVersion': '5.1.1', # 系統版本
"appPackage": "com.taobao.taobao", # app包名
"appActivity": "com.taobao.tao.welcome.Welcome", # 啓動launch Activity
"noReset": True, # 不清空數據
"unicodeKeyboard": True, # 使用Unicode編碼方式發送字符串
"resetKeyboard": True, # 鍵盤隱藏起來
}
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
def test01(self):
try:
# 這裏寫錯了定位信息
text = 'text("註冊/登錄1")'
self.driver.find_element_by_android_uiautomator(text).click()
except Exception as msg:
print('報錯信息:%s'%msg)
# 截圖
self.driver.get_screenshot_as_file('123.png')
def tearDown(self):
time.sleep(3)
self.driver.quit()
if __name__ == '__main__':
unittest.main()
打開appium進行執行腳本,腳本執行後,查看我們腳本的當前目錄,就會發現我們的截圖已經成功的保存在當前目錄了
方法2:save_screenshot(‘filename')
通過源碼我們可以看到調用的還是上門的方法,但是我們一樣也可以使用
def save_screenshot(self, filename):
"""
將當前窗口的屏幕快照保存到PNG圖像文件中。返回
如果有IOError,則爲False,否則返回True。使用完整路徑
你的文件名。
"""
return self.get_screenshot_as_file(filename)
異常截圖
# coding:utf-8
from appium import webdriver
import unittest
import time
class test(unittest.TestCase):
def setUp(self):
desired_caps = {
'platformName': 'Android', # 測試版本
'deviceName': 'emulator-5554', # 設備名
'platformVersion': '5.1.1', # 系統版本
"appPackage": "com.taobao.taobao", # app包名
"appActivity": "com.taobao.tao.welcome.Welcome", # 啓動launch Activity
"noReset": True, # 不清空數據
"unicodeKeyboard": True, # 使用Unicode編碼方式發送字符串
"resetKeyboard": True, # 鍵盤隱藏起來
}
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
def test01(self):
try:
text = 'text("註冊/登錄1")'
self.driver.find_element_by_android_uiautomator(text).click()
except Exception as msg:
print('報錯信息:%s'%msg)
# 方法2:
self.driver.save_screenshot('222.png')
def tearDown(self):
time.sleep(3)
self.driver.quit()
if __name__ == '__main__':
unittest.main()
同樣的執行後,會在當前目錄中發現設備已經截圖了。
其他的截圖方法
# 保存的是base64的方法。一般用在html的時候。
def get_screenshot_as_base64(self):
"""
以base64編碼的字符串獲取當前窗口的屏幕截圖
這是有用的嵌入式圖像在HTML。
"""
return self.execute(Command.SCREENSHOT)['value']
# 截圖屏幕,以二進制的方法進行保存
def get_screenshot_as_png(self):
"""
以二進制數據的形式獲取當前窗口的屏幕截圖。
"""
return base64.b64decode(self.get_screenshot_as_base64().encode('ascii'))
總結:unittest的截圖大致就是通過拋異常的方法捕捉錯誤,然後加上截圖功能。保存在指定目錄中。
如果感覺安靜寫的對您有所幫助,可以右下角點個關注,點關注,不迷路~~