Selenium之文件上传

文件上传自动化:从研发角度来看,目前实现文件上传的几种方式:

                       ① 利用<input type="file"/>标签实现的,鼻尖是传统的上传方式。

                       ② 利用js+flash或Ajax等插件进行上传。

selenium也有两种方式去实现自动化测试:

     【<input标签>】一种

          ①send_keys() 自动化上传

           实现方法:只要有input标签,一般都可以通过对这个按钮进行定位再传路径。如driver.find_element_by_name('upload').send_keys('D:\filename.txt')

     代码实现如下:

           import  time

           from  selenium  import  webdriver

           driver = webdriver.Chrome() 

           driver.implicitly_wait(10)

           driver.get('http://www.sahitest.com/demo/php/fileUpload.htm')

           # 定位 “选择文件”按钮

           upload = driver.find_element_by_id('file')

           upload.send_keys('C:\test1.txt')

           # print(pload.get_attribute('value'))

           time.sleep(3)

           driver.find_element_by_xpath('//input[3]').click()

           # driver.quit()

     【非input型上传】三种

           ① selenium + autolt实现文件上传

                通过Autolt插件去结合selenium一起来实现文件的自动上传。

           ② win32gui

               注意:需要安装  pywin32-2 18.win-amd64-py2.7  exe

                          需要安装pypiwin32

           ③ 最方便的Sendkeys   前提是:需要先安装Sendkeys库    pip  install  Sendkeys

                                                 注意:浏览器用Chrome,可能会回不支持,最好用火狐浏览器

       第二种 -- 代码实现如下:

           import  time

           from selenium import webdriver

           import  win32gui

           import  win32con

           driver = webdriver.Chrome()

           driver.implicitly_wait(10)

           driver.get('http://sahitest.com/demo/php/fileUpload.htm')

           upload = driver.find_element_by_id('file')

           upload.click()

           time.sleep(1)

           # win32gui

           dialog = win32gui.FindWindow('#32770', '文件上传')  # 对话框

           ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)

           ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)

           Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)  # 上面三句依次寻找对象,直到找到输入框Edit对象的句柄

           button = win32gui.FindWindowEx(dialog, 0, 'Button', None)  # 确定按钮Button

           win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, 'C:\test1.txt')   #  往输入输入绝对地址

           win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 按button

           print(upload.get_attribute('value'))

           time.sleep(5)

           driver.quit()

       第三种 -- 代码实现如下:

           from selenium import webdriver

           import win32gui

           import win32con

           import time

           dr = webdriver.Firefox()

           dr.get('http://sahitest.com/demo/php/fileUpload.htm')

           upload = dr.find_element_by_id('file')

           upload.click()

           time.sleep(1)

           # SendKeys

           SendKeys.SendKeys("C:\test1.txt")   #   发送文件地址

           SendKeys.SendKeys("{ENTER}")    # 发送回车键

           print(upload.get_attribute('value'))

           dr.quit()

原文地址:https://www.cnblogs.com/peipei-Study/p/11971451.html