1. 程式人生 > 實用技巧 >Selenium3+python3自動化(三十八)--異常後截圖(screnshot)

Selenium3+python3自動化(三十八)--異常後截圖(screnshot)

前言

在執行用例過程中由於是無人值守的,用例執行報錯的時候,我們希望對當前螢幕截圖,留下證據。

一、截圖方法

1.get_screenshot_as_file(self,filename)

--這個方法是獲取當前window的截圖,出現IOError時候返回False,截圖成功返回True.

filename引數是儲存檔案的路徑。

如,driver.get_screenshot_as_file("D:\\a.png")

 driver.get_screenshot_as_file("D:/b.png")

 driver.get_scrrenshot_as_file("c.png")  #當前指令碼所在目錄下

2.get_screenshot_as_base64(self)

--這個方法也是獲取螢幕截圖,儲存的是base64的編碼格式,在HTML介面輸出截圖的時候,會用到。

比如,想把截圖放到html測試報告裡。
Usage:
driver.get_screenshot_as_base64()

3.get_screenshot_as_png(self)
--這個是獲取螢幕截圖,儲存的是二進位制資料,很少用到.
Usage:
driver.get_screenshot_as_png()

二、異常後截圖

1.為了能丟擲異常,把定位“百度一下”按鈕的id換個錯的id。

2.給圖片命名時候加上時間,避免同一檔名稱被覆蓋掉。

3.檔案路徑,相對路徑或絕對路徑。執行程式碼後,在相應位置檢視圖片

4.結果的結果,如果沒截到圖返回False,截圖成功會返回True。

參考程式碼:

# coding:utf-8
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
try:
    driver.find_element_by_id("kw").send_keys("xixi")
    driver.find_element("id","suxx").click()
except Exception as msg:
    print("報錯資訊:{}".format(msg))
    ctime=time.strftime("%Y%m%d_%H%M%S",time.localtime())
    pic=driver.get_screenshot_as_file("{}.png".format(ctime))
    pic1=driver.get_screenshot_as_file("{}.png".format("d:\\a"))
    pic2=driver.get_screenshot_as_file("{}.png".format("D:/b")) #碟符(d,D)大小寫都可以
    print("截圖結果:{},{},{}".format(pic,pic1,pic2))

 執行結果:

報錯資訊:Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="suxx"]"}
  (Session info: chrome=84.0.4147.89)

截圖結果:True,True,True

三、get_screenshot_as_file原始碼如下

    def get_screenshot_as_file(self, filename):
        """
        Saves a screenshot of the current window to a PNG image file. Returns
           False if there is any IOError, else returns True. Use full paths in
           your filename.

        :Args:
         - filename: The full path you wish to save your screenshot to. This
           should end with a `.png` extension.

        :Usage:
            driver.get_screenshot_as_file('/Screenshots/foo.png')
        """
        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