前言
在執行用例過程中由於是無人值守的,用例運行報錯的時候,我們希望能對當前屏幕截圖,留下證據。
在寫用例的時候,最后一步是斷言,可以把截圖的動作放在斷言這里,那么如何在斷言失敗后截圖呢?
一、截圖方法
1.get_screenshot_as_file(self, filename)
--這個方法是獲取當前window的截圖,出現IOError時候返回False,截圖成功返回True。
filename參數是保存文件的路徑。
Usage:
driver.get_screenshot_as_file('/Screenshots/foo.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。
三、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 false
Failure
Traceback (most recent call last):
File "D:\test\yoyot\ketang\test01.py", line 22, in test_01
self.assertFalse(result)
AssertionError: True is not false
學習過程中有遇到疑問的,可以加selenium(python+java) QQ群交流:646645429
覺得對你有幫助,就在右下角點個贊吧,感謝支持!
selenium+python高級教程》已出書:selenium webdriver基於Python源碼案例
(購買此書送對應PDF版本)