Selenium3 + Python3自動化測試系列十二——窗口截圖與關閉瀏覽器


窗口截圖

  自動化用例是由程序去執行的,因此有時候打印的錯誤信息並不十分明確。如果在腳本執行出錯的時候能對當前窗口截圖保存,那么通過圖片就可以非常直觀地看出出錯的原因。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,后面打開的兩個仍在。如下圖所示:

 

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM