11.1 截圖函數的正常使用
11.1.1 截圖方法
無論是在手動測試還是自動化測試中場景復現永遠是一個很重要的事情,有時候一些問題可能很難復現,這個都需要測試人員對bug有很高的敏感度,在一般的情況下有一個很好的測試習慣也很重要,發現bug馬上截圖,不要管那么多。下面我們看一下自動化測試截圖的一些方法:
1、save_screenshot(). 這個方法的用戶最直接driver.save_screenshot('test.png'),他直接是獲取當前屏幕的截圖,然后進行保存,可能會有人有疑問,這個不能指定目錄嗎?當然可以,只是你需要使用另外一個截圖方法,如下
2、get_screenshot_as_file(filename) 用法和上面的有一些差別,這個需要指定文件夾driver.get_screenshot_as_file('png/test.png')。
截圖方法常用的是這兩個,其他的使用很少,這里不做講解,如果有興趣的可以去了解一下一個是以二進制,一個是以base64的形式獲取。
11.2 以時間戳命名錯誤圖片
11.2.1 時間戳命名圖片
可能看到這里的人會覺得不懂,為什么我們需要用時間戳來命名,其實這個並不是我們的最終目的,這里是在給大家傳遞一個思想,你想想在自動化測試中你每個方法都有可能錯誤,而且每次運行都是在不同的地方出錯,那么你這個命名如果按照上面的寫死,那么永遠只有一張圖片,其他的圖片找不到了,這個不符合我們設計時的思考,所以我們需要用不同的方式去,顯然時間戳是一個不錯的選擇,只要出錯,我們就截圖,而且還能保證每張圖的名字不一樣,是不是感覺很nb,哈哈,開玩笑。
既然是以時間戳來進行命名,那么首先我們需要有一個獲取時間戳的方法,要把它封裝好,因為調用這個的地方會很多,所以要進行封裝。
import time def getTime(self): tamp = int(time.time()) return tamp
上面的方法便是我們封裝的獲取時間戳的方法,我這里使用了一個返回函數,每次當我們調用的時候我們就能夠獲取到當前的時間戳。接下來看一下在實際中我們如何將時間戳使用到截圖方法中:
import time #獲取時間戳,並當作圖片名字 def getTime(self): tamp = int(time.time()) filename = '../jpg/ %s.png' %tamp self.driver.get_screenshot_as_file(filename)
看見上面的代碼是不是很簡單啊,但是不知道你們思考過一個問題沒,是不是怎么看怎么覺得別扭啊?接着往下看。
11.3 截圖功能的封裝
11.3.1 截圖功能封裝實戰
上面的代碼越來越別扭,哈哈,我也是那么覺得的,下面看一下截圖功能在實際中的封裝,其實和上面差不多,只是需要養成一個習慣,盡可能的將同一類功能封裝到一個方法中,so,如下:
import time #截圖 def getScreenShot(self): time = self.getTime() filename = '../jpg/ %s.png' %time self.driver.get_screenshot_as_file(filename) #獲取時間戳 def getTime(self): tamp = int(time.time()) return tamp
看到這個是不是稍微好一點點呢?其實這個呢只能算是入門的,那么在實際項目中我們到底是怎么進行的呢?大家下去思考一下。
我看着上面的代碼模糊,總感覺這個driver哪里來的呢?是不是又忘記了呢?還記得我們return driver了么?
提示:在實際項目中我們的截圖封裝一般會和我們當前的case有關系,基本是按照case執行的來進行命名,那樣在圖片頁面就能夠一目了然的指導這個圖片是哪個地方出錯的。去動手嘗試一下吧。