最近在上傳檔案時遇到了一些問題:
一、使用pyautogui
①、使用pyautogui模擬在windows彈窗中輸入檔案路徑,因系統輸入法預設為中文,導致上傳失敗
②、後來修改程式碼,在每次輸入檔案路徑之前,先用熱鍵將輸入法切換為英文,然而穩定性不高
import time
try:
self.click(locator)
time.sleep(2)
pyautogui.hotkey('shift') # 切換輸入法為英文
pyautogui.typewrite(file) # 在win視窗中輸入檔案路徑
pyautogui.press(keys='enter', presses=1) # 點選確定,一次
except:
raise Exception
二、使用win32com
①、不穩定,本質上還是因系統輸入法預設為中文,導致上傳失敗
import time
try:
self.click(locator)
time.sleep(2)
# 建立 WScript.Shell 物件,用於模擬鍵盤輸入
shell = win32com.client.Dispatch("WScript.Shell")
# 傳送檔案路徑和兩次Enter鍵,因為中文的問題
shell.SendKeys(file + "{ENTER}" + "{ENTER}")
time.sleep(2)
except Exception as e:
raise Exception(f'Failed to upload file:{e}')
以上程式碼的不穩定性,導致測試結果不真實,想起如果直接copy+paste的方式應該可以解決問題,經多次驗證沒有失敗的,很穩。
需要注意的是file要使用原路徑時要轉義,如:D:\code\123.img
def upload_file_by_pyauto(self, locator, file):
"""使用pyautogui上傳單個檔案"""
import pyperclip
import time
try:
self.click(locator)
time.sleep(2)
pyperclip.copy(file)
pyautogui.hotkey('ctrl', 'v')
pyautogui.press(keys='enter', presses=1) # 點選確定,一次
except:
raise Exception