python+selenium实现文件上传

文件上传是web测试种很常见的一个场景

文件上传功能实现分为两类,一类是input标签,这种比较简单,可以直接send_keys实现上传操作;但遇到非input标签的因为是windows控件所以有些情况下通过selenium却没法操作,因此需要借助一些第三方库来实现。

下面主要介绍一下非input标签的情况:

    1 Autolt 需要去调用其生成的.au3或.exe文件.----操作繁琐不易理解,不推荐
2 SendKeys第三方库(目前只支持到2.7版本)----不支持3.x版本的python,不推荐
    3 Python pywin32库,识别对话框句柄,进而操作 ------pip install pywin32
3.1 winspy识别控件,下载解压即可
3.2 找到控件
3.3 操作控件

 

 

 

 

绝对路径 一层一层找,从Edit开始向上一级一级找到最外层#32770
找到输入框 #32770 --> ComboBoxEx32 --> ComboBox --> Edit
找到打开按钮 #32770 --> Button

下面直接上代码:
 1 from time import sleep
 2 import win32con
 3 import win32gui
 4 
 5 
 6 def upload(file_path, driver = 'Chrome'):
 7     # 谷歌浏览器
 8     if driver == 'Chrome':
 9         title = '打开'
10     dialog = win32gui.FindWindow('#32770', title)
11     ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)
12     ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)
13     Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)
14     Button = win32gui.FindWindow('Button', '打开(&O)')
15     # 输入文件路径
16     win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, file_path)
17     # 点击打开按钮
18     win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, Button)
19     sleep(3)
20     
21     
22 if __name__ == '__main__':
23     file = r'demo.txt'
24     upload(file)

 

 
 
posted @ 2021-01-07 17:39  小幸运||  阅读(572)  评论(0)    收藏  举报