標籤:編輯器 ima div drive 接下來 upload pfile span 擷取
我們在使用selenium做web自動化測試的時候也許會碰到需要上傳檔案或者圖片的需求。那麼下面給大家介紹一下,selenium是怎麼實現檔案上傳和哪些情況不能直接上傳。
一、上傳控制項標籤為input
請看以百度首頁的檔案上傳為例:
點擊小相機後彈出檔案上傳視窗
我們通過源碼可以看出,這個"本地上傳圖片"的控制項標籤是input
這時候我們可以直接使用seleniumAPI進行檔案上傳,代碼實現如下:
#coding=utf-8from selenium import webdriverbrowser = webdriver.Firefox()browser.get("https://www.baidu.com/")#點擊百度首頁小相機按鈕browser.find_element_by_class_name("soutu-btn").click()#通過send_keys傳送檔案的絕對路徑,檔案在我原生C盤目錄下browser.find_element_by_class_name("upload-pic").send_keys(r"C:\test.png")#我們這裡已經實現了檔案上傳,至於百度返回404不用管它 二、上傳控制項標籤為非input
當控制項標籤非input時,這種情況我們不能直接使用上面的方法了,我們可以藉助第三方工具:Autolt
AutoIt
AutoIt v3是一種免費BASIC-like指令碼語言為Windows的GUI自動化設計和泛型指令碼。它使用的組合類比鍵盤,滑鼠移動和視窗/控制操縱,以自動化任務的方式不可能或可靠的與其他語言(如VBScript和SendKeys)。
現在已經出到v3.3版本,更多介紹可以到下面的官網查看。
:https://www.autoitscript.com/site/autoit/downloads/
圖2.1
通過圖2.1的導引安裝完後可以看到如下組件,圖2.2
圖2.2
這幾個組件的功能介紹:
AutoIt Windows Info 用於協助我們識Windows控制項資訊。
Compile Script to.exe 用於將AutoIt產生 exe 執行檔案。
Run Script 用於執行AutoIt指令碼。
SciTE Script Editor 用於編寫AutoIt指令碼。
1.通過AutoIt Windows Info 擷取我們要操作的對象,以Firefox瀏覽器為例,因為每個瀏覽器彈出來的視窗名字可能不一樣。2.3 和 圖2.4
圖2.3
圖2.4
通過上面兩個圖AutoIt Windows Info中Control頁面 獲得以下資訊。
視窗的title為“檔案上傳”,標題的Class為“#32770”。
檔案名稱輸入框的class 為“Edit”,Instance為“1” ,ClassnameNN為“Edit1”。
開啟按鈕的class 為“Button”,Instance為“1” ,ClassnameNN為“Button1”。
2.根據AutoIt Windows Info 所識別到的控制項資訊,接下來我們開啟SciTE Script Editor編輯器,編寫指令碼。
;ControlFocus()方法用於識別Window視窗 ControlFocus("檔案上傳", "","Edit1") ; WinWait()設定1秒鐘用於等待視窗的顯示 WinWait("[CLASS:#32770]","",1) ; ControlSetText()用於向“檔案名稱”輸入框內輸入本地檔案的路徑,如果是在案頭第三個參數直接寫檔案名稱 ControlSetText("檔案上傳", "", "Edit1", "C:\selenium.png") Sleep(1000) ; ControlClick()用於點擊上傳視窗中的“開啟”按鈕 ControlClick("檔案上傳", "","Button1");
3.寫好指令碼之後我們可以在瀏覽器已經大家檔案上傳視窗的情況按F5運行,看看指令碼效果,如
圖2.5
4.指令碼運行正常,我們將它儲存為upfile.au3檔案,這裡儲存的指令碼可以通過Run Script 工具將其開啟運行,但我們的目的是希望這個指令碼被Python程式調用,那麼就需要將其產生exe程式。開啟Compile Script to.exe工具,將其產生為exe可執行檔
5.產生了upfile.exe後,我們把它放在C盤根目錄,我們再用python指令碼實現借用它來上傳檔案:
#coding=utf-8from selenium import webdriverimport osbrowser = webdriver.Firefox()browser.get("https://www.baidu.com/")#點擊百度首頁小相機按鈕browser.find_element_by_class_name("soutu-btn").click()#開啟檔案上傳視窗browser.find_element_by_class_name("upload-pic").click()#調用upfile.exe實現檔案上傳os.system(r"C:\upfile.exe")
用過os.system()方法可以進行調用,類比在cmd裡面輸入:C:\upfile.exe
selenium2之檔案上傳