1. 程式人生 > >selenium2之文件上傳

selenium2之文件上傳

odin 成了 height 鼠標移動 執行文件 可靠 eight back con

我們在使用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

selenium2之文件上傳