selenium2之文件上傳


我們在使用selenium做web自動化測試的時候也許會碰到需要上傳文件或者圖片的需求。那么下面給大家介紹一下,selenium是怎么實現文件上傳和哪些情況不能直接上傳。

 

一、上傳控件標簽為input

請看以百度首頁的文件上傳為例:

 

 

     點擊小相機后彈出文件上傳窗口

 

我們通過源碼可以看出,這個"本地上傳圖片"的控件標簽是input

 

這時候我們可以直接使用seleniumAPI進行文件上傳,代碼實現如下:

#coding=utf-8
from selenium import webdriver
browser = 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 獲取我們要操作的對象,以火狐瀏覽器為例,因為每個瀏覽器彈出來的窗口名字可能不一樣。如圖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-8
from selenium import webdriver
import os
browser = 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

 


免責聲明!

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



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