selenium中解决非input标签上传文件时的一些问题
最近在上传文件时遇到了一些问题:
一、使用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")
# 发送文件路径和两次回车键,因为中文的问题
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