在做測試的時候,空口無憑都是白掐,特別是自動化測試的時候,更需要圖片來佐證自己發現的問題
話不多說,直接進入主題,技術就是這么直白
Webdriver自帶截圖功能,get_screenshot_as_file(),save_screenshot(),使用起來還是蠻方便的
截圖一:get_screenshot_as_file()
截圖二:save_screenshot()
get_screenshot_as_file()方式
該方式很簡單,通過driver獲取該方法,將截圖要保存的路徑寫入就好,先看一張圖,沒運行代碼的時候,Picture目錄下還沒有名為baidu.png的圖片,建個Picture目錄,是為了方便管理截圖的圖片

接下來運行代碼,保存的圖片如下:

可以看到,圖片是截圖成功了的,在對應文件夾下也是可以看到圖片的,代碼如下:
# coding=utf-8 from selenium import webdriver import time driver = webdriver.Chrome() driver.get("https://www.baidu.com") driver.maximize_window() time.sleep(2) try: picture_url=driver.get_screenshot_as_file('G:\\201801-\\python_code\\Demo\\Picture\\baidu.png') print("%s:截圖成功!!!" % picture_url) except BaseException as msg: print(msg) driver.quit()
這里需要注意的是,文件存放的路徑一定要正確,路徑中的\\雙斜杠,有一個是轉義符,這個就不多說了
這種方式寫法太過於死板,這樣運行下去,圖片名字會重名,達不到什么好效果,可以生成代碼運行的當前時間,來做為圖片名,這樣就不會再出現該問題了,修改代碼如下:
# coding=utf-8 from selenium import webdriver import time driver = webdriver.Chrome() driver.get("https://www.baidu.com") driver.maximize_window() time.sleep(2) picture_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time())) print(picture_time) try: picture_url=driver.get_screenshot_as_file('G:\\201801-\\python_code\\Demo\\Picture\\'+ picture_time +'.png') print("%s:截圖成功!!!" % picture_url) except BaseException as msg: print(msg) driver.quit()
代碼運行后,查看截圖的效果,如下:

該方法使用起來更加方便,算是一個小小優化
save_screenshot()方式
save_screenshot()與get_screenshot_as_file()方式都是一樣,先看一個小例子,代碼如下:
# 截圖方式二 # coding=utf-8 from selenium import webdriver import time driver = webdriver.Chrome() driver.get("https://www.baidu.com") driver.maximize_window() time.sleep(2) try: picture_url=driver.save_screenshot('.\\baidu1.png') print("%s :截圖成功!!!" % picture_url) except BaseException as msg: print("%s :截圖失敗!!!" % msg) driver.quit()
運行該代碼后,在當前目錄下會保存成功一張名為baidu1.png的圖片,如下:

一種方式學會,另一種是不是很簡單了,接下來以這種截圖方式,來做個優化吧,先看代碼:
# 截圖方式二 # coding=utf-8 from selenium import webdriver import os import time # 生成年月日時分秒時間 picture_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time())) directory_time = time.strftime("%Y-%m-%d", time.localtime(time.time())) print(picture_time) print(directory_time) # 打印文件目錄 print(os.getcwd()) # 獲取到當前文件的目錄,並檢查是否有 directory_time 文件夾,如果不存在則自動新建 directory_time 文件 try: File_Path = os.getcwd() + '\\' + directory_time + '\\' if not os.path.exists(File_Path): os.makedirs(File_Path) print("目錄新建成功:%s" % File_Path) else: print("目錄已存在!!!") except BaseException as msg: print("新建目錄失敗:%s" % msg) driver = webdriver.Chrome() driver.get("https://baidu.com/") try: url=driver.save_screenshot('.\\' + directory_time + '\\' + picture_time + '.png') print("%s :截圖成功!!!" % url) except BaseException as pic_msg: print("截圖失敗:%s" % pic_msg) time.sleep(2) driver.quit()
該代碼的優化,是自動創建日期目錄,並將截取的圖片以年月日時分秒命名保存在當前日期目錄下,這樣就能很方便的查看圖片保存路徑,也方便管理自己的測試圖片
運行代碼,我們來查看結果,如下:

這樣運行代碼后,就自動生成了名為2018-09-16的文件夾,截取的圖片命名為2018-09-16-16_14_18.png,並保存在2018-09-16的文件夾下,如果明天運行該代碼,就會生成新的文件夾,並命名為2018-09-17,這樣就很好的區分了圖片日期來源,如果再次運行該代碼,就會提示文件夾已存在,圖片依然截取成功,如下:

好了,這就是今天的截圖內容了,還有可優化的地方,比如,截取指定大小的圖片,截取元素的圖片,如果頁面很長,單單使用該兩種方式是截取不全的,這就需要使用JS的配合了。今天所述內容,有誤的地方,希望大家及時指出,我也及時改正。
學習的一點心得,大家都知道,遇到問題,不要逃避,更不要慌張,慢慢來,沉下心來,多度娘,多看博客,終究會解決的。今天在使用第二種方式優化代碼截圖的時候,由於沒有新建目錄的那一步,所以一直截圖不成功,后面靈機一動,先給創建一個目錄,再運行代碼,結果就截圖成功了,有點小喜悅。
