最近在上传文件时遇到了一些问题:
一、使用pyautogui
①、使用pyautogui模拟在windows弹窗中输入文件路径,因系统输入法默认为中文,导致上传失败
②、后来修改代码,在每次输入文件路径之前,先用热键将输入法切换为英文,然而稳定性不高
import timetry:self.click(locator)time.sleep(2)pyautogui.hotkey('shift') # 切换输入法为英文pyautogui.typewrite(file) # 在win窗口中输入文件路径pyautogui.press(keys='enter', presses=1) # 点击确定,一次except:raise Exception
二、使用win32com
①、不稳定,本质上还是因系统输入法默认为中文,导致上传失败
import timetry:self.click(locator)time.sleep(2)# 创建 WScript.Shell 对象,用于模拟键盘输入shell = win32com.client.Dispatch("WScript.Shell")# 发送文件路径和两次回车键,因为中文的问题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 pyperclipimport timetry:self.click(locator)time.sleep(2)pyperclip.copy(file)pyautogui.hotkey('ctrl', 'v')pyautogui.press(keys='enter', presses=1) # 点击确定,一次except:raise Exception