selenium2之檔案上傳

來源:互聯網
上載者:User

標籤:編輯器   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之檔案上傳

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.