窗口截圖
自動化用例是由程序去執行的,因此有時候打印的錯誤信息並不十分明確。如果在腳本執行出錯的時候能對當前窗口截圖保存,那么通過圖片就可以非常直觀地看出出錯的原因。WebDriver提供了截圖函數get_screenshot_as_file()、save_screenshot()、get_screenshot_as_png、get_screenshot_as_base64四種方法來截取當前窗口。
get_screenshot_as_file()
該方式很簡單,通過driver獲取該方法,將截圖要保存的路徑寫入就好,首先建立一個Picture文件夾目錄,為了方便存儲管理截圖的圖片。代碼如下:
from selenium.webdriver import Chrome from time import sleep # 訪問百度 driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe") driver.get("https://www.baidu.com/") driver.find_element_by_id("kw").send_keys("selenium") sleep(2)
# 保存圖片至文件夾中 driver.get_screenshot_as_file("D:\\PythonProject\\Test\\Picture\\baidu.jpg") driver.quit()
當我們運行上述程序時,我們發現有一個Warning警告,告訴我們建議保存圖片時用”.png“格式保存,但不影響正常流程保存圖片。如下圖所示。
Warning警告提示如下:UserWarning: name used for saved screenshot does not match file type. It should end with a `.png` extension
"type. It should end with a `.png` extension", UserWarning)

優化一下用以.png格式保存圖片。兩次保存皆成功!

save_screenshot()
save_screenshot()使用方法與上述get_screenshot_as_file()差不多。我們直接來看實例。代碼如下:
from selenium.webdriver import Chrome from time import sleep # 訪問百度 driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe") driver.get("https://www.baidu.com/") driver.find_element_by_id("kw").send_keys("selenium") sleep(2) # save_screenshot保存圖片 driver.save_screenshot("D:\\PythonProject\\Test\\Picture\\baidu2.png") driver.quit()
get_screenshot_as_png和get_screenshot_as_base64
這兩個平時並不常用,大家可大體了解一下。get_screenshot_as_png是獲取二進制數據流,get_screenshot_as_base64是獲取base64編碼原始數據,實際工作實踐中如遇到再總結整理。
關閉瀏覽器
WebDriver提供了兩種quit()和close()方法,quit()是退出相關的驅動程序和關閉所有窗口,close()是用來關閉當前窗口。例多窗口的處理,在用例執行的過程中
打開了多個窗口,我們想要關閉其中的某個窗口,這時就要用到close()方法進行關閉了。

我們舉個栗子看一下,close()與quit()有什么區別。代碼如下:
from selenium.webdriver import Chrome from time import sleep # 訪問百度
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe") driver.get("https://www.jd.com/") # 查看當前window handle
indexwindow = driver.current_window_handle print(indexwindow) print('\n') driver.find_element_by_link_text("家用電器").click() sleep(2) #循環遍歷找到第一個window,再打開一個“手機”頁面
for handle in driver.window_handles: if handle == indexwindow: driver.find_element_by_link_text("手機").click() sleep(2) # 查看所有window handles
print(driver.window_handles) print('\n') # 關閉當前窗口
driver.close() # 查看現在的所有window handles,可看到只是關閉了最開始的一個window,其他兩個window還在
print(driver.window_handles) print('\n') # 關閉所有窗口,退出相關的驅動程序
driver.quit()
上述代碼運行結果可看出close()只關閉了最開始打開的一個window,后面打開的兩個仍在。如下圖所示:

大家可以動手試試。親自實踐一下記憶更加深刻哦~~~
