python selenium web UI自动化测试文件图片上传
在自动化测试中,经常可以遇到上传文件或者图片的情况,其实上传文件的方式有很多种,今天记录两个比较简单也比较通用的上传文件的方式。
方法一、
如果该页面HTML源码中,可以找到 type=file 的input元素,那么上传起来就很简单。(注意要用开发者工具查找input,因为它在页面上可能被隐藏)
我们可以直接通过find_elemnt找到元素,然后通过send_keys()方法直接完成文件上传。
driver.find_element(By.XPATH,'//*[@type="file"]').send_keys('文件的本地路径')
方法二、
对于在该页面页面上找不到,或者第一种方法上传无效的时候,那么可以使用这一种方法(这种方法只使用于windows,家贫,无从至Mac以用。),原理就是模拟系统的键盘操作,完成图片上传。因为浏览器打开的文件选择框是系统的,不受浏览器控制,所以selenium的ActionChains没有用。
1. 首先安装 :pip install pyperclip、pip install pywin32、 pip install pynput 安装可能有些慢,可以找国内的镜像安装。
2. 将文件地址复制到系统的剪切板上。
pyperclip.copy('文件路径')
3. 选择元素,并点击。
driver.find_element(By.XPATH, '//*[@value="点击上传"]').click()
4. 完成点击操作后,会弹出系统的文件选择框,此时光标焦点在文件名的输入框内,我们只需要让系统模拟按下Ctrl+V按键,然后再模拟按下Enter键,就OK了
1 # 实例化键盘对象 2 keyboard = Controller() 3 # 模拟键盘按下Ctrl键,value就相当于+号,表示后面还有按键 4 keyboard.press(Key.ctrl.value) 5 # 模拟键盘按下v键 6 keyboard.press('v') 7 # 此时文件名的输入框已经完成了粘贴操作,我们需要释放掉ctrl键和v键 8 keyboard.release(Key.ctrl.value) 9 keyboard.release('v') 10 # 模拟按下Enter键后释放Enter键,就大功告成了! 11 keyboard.press(Key.enter) 12 keyboard.release(Key.enter)
5. 注意!如果发现没有复制在系统框上需要加入time.sleep()让线程睡眠,原因是系统框还未打开,就已经按键就已经被release掉了