Selenium2+python自動化60-異常後截圖(screenshot)

前言html

在執行用例過程當中因爲是無人值守的,用例運行報錯的時候,咱們但願能對當前屏幕截圖,留下證據。web

在寫用例的時候,最後一步是斷言,能夠把截圖的動做放在斷言這裏,那麼如何在斷言失敗後截圖呢?框架

 

1、截圖方法測試

1.get_screenshot_as_file(self, filename)ui

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

filename參數是保存文件的路徑。
Usage:
driver.get_screenshot_as_file('/Screenshots/foo.png')url

 

2.get_screenshot_as_base64(self)htm

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

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

 

3.get_screenshot_as_png(self)
--這個是獲取屏幕截圖,保存的是二進制數據,不多用到.
Usage:
driver.get_screenshot_as_png()

 

2、異常後截圖

1.爲了能拋異常,把定位登陸按鈕的id換了個錯的id。

2.給圖片命名時候加個時間戳,避免同一個文件名稱被覆蓋掉。

3.文件路徑,這裏直接寫的文件名稱,就是跟當前的腳本同一個路徑。若是圖片輸出到其它文件路徑,須要些文件的絕對路徑了。

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

 

3、selenium實例

1.在unittest框架裏寫用例的時候,咱們但願在斷言失敗的時候,對當前屏幕截圖。

2.若是加try...except捕獲異常後結果,此時全部的測試用例都是經過的了,會影響測試結果。解決辦法其實很簡單,再把異常拋出來就好了。

3.參考代碼:

# coding:utf-8
from selenium import webdriver
import time,unittest
from selenium.webdriver.support import expected_conditions as EC
class Login(unittest.TestCase):
    def setUp(self):
        url_login = "https://passport.cnblogs.com/user/signin"
        self.driver = webdriver.Firefox()
        self.driver.get(url_login)

    def test_01(self):
        '''前面輸入帳號密碼,讓正確運行到assert這一步,斷言故意設置爲False不成功'''
        try:
            self.driver.find_element_by_id("input1").send_keys(u"上海-悠悠")
            self.driver.find_element_by_id("input2").send_keys("xxx")
            # 登陸id是錯的,定位會拋異常
            self.driver.find_element_by_id("signin").click()
            # 判斷登陸成功頁面是否有帳號:"上海-悠悠"
            time.sleep(3)
            locator = ("id", "lnk_current_user")
            result = EC.text_to_be_present_in_element(locator,u"上海-悠悠")(self.driver)
            self.assertFalse(result)
        except Exception as msg:
            print(u"異常緣由%s"%msg)
            # 圖片名稱能夠加個時間戳
            nowTime = time.strftime("%Y%m%d.%H.%M.%S")
            self.driver.get_screenshot_as_file('%s.jpg' % nowTime)
            raise

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()

4.運行結果:

異常緣由True is not falseFailureTraceback (most recent call last):  File "D:\test\yoyot\ketang\test01.py", line 22, in test_01    self.assertFalse(result)AssertionError: True is not false

相關文章
相關標籤/搜索