網站自動化測試Selenium如何處理檔案上傳的視窗?

網站自動化測試Selenium如何處理檔案上傳的視窗?

這篇文章主要說明如何處理這樣的檔案上傳視窗?

其實這樣的視窗Selenium有指令可以處理,不需要透過額外的工具或是AutoIT。

我們會舉一個實例,用Selenium IDE與 python為範例說明如何處理這樣的檔案上傳視窗。

測試情境

http://www.fileconvoy.com/

這個網站提供檔案上傳與分享的功能,我們要如何透過Selenium自動的上傳一個檔案傳送呢?

手動上傳操作步驟如下

1. 選取檔案名稱,例如file.txt

2.  勾選 “Check if you have read the terms of use (mandatory).

3. 點擊 “Upload”按鈕,上傳檔案

fileSharing Service

分析該網站的內容,可以得知該檔案檔名輸入的HTML為:

<input id=”upfile_0 type=”file value=”” onchange=”AddUploadSlot(1) style=”width: 550px; size=”70 name=”upfile_0 disabled=””/>

所以,只要是利用 HTML, <input ….type=file…./>的檔案上傳方式,都可以透過Selenium的指令來做檔案的自動化上傳。

反問? 那麼有其他不可以透過Selenium檔案上傳的嗎? 例如,用Flash的方式檔案上傳,Selenium就無法直接處理。

fileupload DOM

 

Selenium IDE

如果使用SeleniumIDE 自動化下列步驟:

1. 選取檔案名稱,例如file.txt

2.  勾選 “Check if you have read the terms of use (mandatory).

3. 點擊 “Upload”按鈕,上傳檔案

特別提醒的兩個小地方,會讓整個自動化操作更順利

1. 下一個操作動作前,先停留一些時間。這個例子,我們使用Pause停留三秒,等待讓畫面有所反應。

2. 這裡我們輸入檔案名稱使用的指令為 Type。這個網站範例,我們需要使用Type才會讓整個檔案上傳順利。

其他網站有可能需要將該指令改為SendKeys

範例如下圖:

 

SeleniumIDE fileupload

 

Python 範例程式

如果是用Python開發,範例程式如下:

[pastacode lang=”python” message=”Selenium FileUpload Handling” highlight=”” provider=”manual”]

import time
driver.get('http://www.fileconvoy.com')
driver.find_element_by_id('upfile_0').send_keys('C:\\Users\\hello\\url.txt')
driver.find_element_by_id('readTermsOfUse').click()
driver.find_element_by_name('form_upload').submit()
time.sleep(5)

[/pastacode]

小結

這個範例我們主要使用 Type / sendKeys這兩個指令處理檔案的上傳

當網頁透過HTML, <input ….type=file…./>的方式來提供檔案上傳功能時

Selenium是可以直接處理這樣檔案上傳的行為,不需要透過額外的工具(例如:autoIT)來處理這樣的視窗

 

Leave a Reply

Your email address will not be published. Required fields are marked *