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掉了

 

posted @ 2021-06-17 16:45  WhiteTester  阅读(2095)  评论(0编辑  收藏  举报