selenium中解決非input標籤上傳檔案時的一些問題

雾以丶泪聚發表於2024-09-08

最近在上傳檔案時遇到了一些問題:
一、使用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

相關文章