在作測試的時候,空口無憑都是白掐,特別是自動化測試的時候,更須要圖片來佐證本身發現的問題python
話很少說,直接進入主題,技術就是這麼直白web
Webdriver自帶截圖功能,get_screenshot_as_file(),save_screenshot(),使用起來仍是蠻方便的學習
該方式很簡單,經過driver獲取該方法,將截圖要保存的路徑寫入就好,先看一張圖,沒運行代碼的時候,Picture目錄下尚未名爲baidu.png的圖片,建個Picture目錄,是爲了方便管理截圖的圖片測試
接下來運行代碼,保存的圖片以下:優化
能夠看到,圖片是截圖成功了的,在對應文件夾下也是能夠看到圖片的,代碼以下:ui
# 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()
這裏須要注意的是,文件存放的路徑必定要正確,路徑中的\\雙斜槓,有一個是轉義符,這個就很少說了url
這種方式寫法太過於死板,這樣運行下去,圖片名字會重名,達不到什麼好效果,能夠生成代碼運行的當前時間,來作爲圖片名,這樣就不會再出現該問題了,修改代碼以下:spa
# 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()
代碼運行後,查看截圖的效果,以下:code
該方法使用起來更加方便,算是一個小小優化blog
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的配合了。今天所述內容,有誤的地方,但願你們及時指出,我也及時改正。
學習的一點心得,你們都知道,遇到問題,不要逃避,更不要慌張,慢慢來,沉下心來,多度娘,多看博客,終究會解決的。今天在使用第二種方式優化代碼截圖的時候,因爲沒有新建目錄的那一步,因此一直截圖不成功,後面靈機一動,先給建立一個目錄,再運行代碼,結果就截圖成功了,有點小喜悅。
本文僅表明做者觀點,系做者@溫一壺清酒發表。轉載請註明出處:http://www.cnblogs.com/hong-fithing/