前言
1、被測産品中檔案上傳的功能非常普遍,一般情況下需要将準備好的檔案放在預定的路徑下,然後在自動化測試的腳本中,去預置的路徑下擷取檔案即可。
2、selenium UI自動化中檔案上傳的兩種方式:
①被測産品的UI界面中存在可輸入檔案路徑的input輸入框(該input框元素可能是可見元素,也有可能是隐藏元素),可以通過 send_keys('檔案路徑') 函數。
②被測産品是采用調用本地Windows檔案系統視窗的方式進行檔案上傳。(該方式進行檔案上傳時,selenium工具無能為力。selenium工具是通過發送js腳本來驅動浏覽器,而Windows系統視窗就完全不在Selenium的能力範圍内),調用windows作業系統的UI自動化架構。
3、當被測産品與Windows系統進行互動時,就需要使用C端自動化的相關架構,這類架構有很多選擇,此次選擇的是PyAutoGUI。
詳解
一、通過send_keys方法(該方法隻适用于input标簽)
1、檢視上傳按鈕的元素标簽為input标簽,調用 send_keys() 方法傳入檔案路徑即可,無需模拟彈出windows選擇框且選擇檔案的過程。
2、通過該方法可以簡單、高效的實作選擇檔案的目的,避免将處理思路卡在如何選擇檔案這個問題上。
3、檔案上傳的input框實作方式如下:
4、selenium UI自動化代碼如下:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('http://sahitest.com/demo/php/fileUpload.htm')
driver.implicitly_wait(10)
driver.find_element_by_css_selector('form>#file').send_keys(r'C:\Users\Administrator\Desktop\1.txt')
driver.find_element_by_css_selector('form>input[type="submit"]').click()
time.sleep(3)
driver.quit()
二、PyAutoGUI上傳檔案方式
pyautogui為第三方包,需要 pip install pyautogui 進行安裝後,在腳本中 import 導入即可使用。
執行個體如下:
import time,pyautogui
def uploadWinFile(self,filepath):
'''
通過Windows系統上傳檔案
'''
try:
pyautogui.write(filepath) # 輸入檔案絕對路徑
time.sleep(2)
pyautogui.press('enter',2) # 按2次Enter鍵(按2次是為了防止出錯)
except Exception as e:
loggerHandler.logger.error(e)
e.args = ('上傳檔案操作異常',)
raise e
else:
return filepath
三、AutoIt方式處理上傳檔案
四、pywin32庫,識别對話框句柄,進而操作
五、SendKeys庫,不穩定,不推薦
六、keybd_event,跟2類似,不過是模拟按鍵,ctrl+a,ctrl+c, ctrl+v…
多檔案上傳
1、多檔案上傳就是在檔案路徑框裡用引号括起單個路徑,然後用空格隔開多個路徑。例如: “D:\a.txt” “D:\b.txt”
注意:在多檔案上傳時,隻有多個檔案在同一路徑下,才可以這樣使用。例如: “C:\a.txt” “D:\b.txt” 該格式不對,不能實作多檔案上傳。
2、多檔案上傳原理