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
posted @ 2024-09-08 09:44  雾以丶泪聚  阅读(29)  评论(0编辑  收藏  举报