Python WebDriver 文件上传

昨天写了Web 文件下载的ui自动化,下载之后,今天就要写web 文件上传的功能了。

当然从折腾了俩小时才上传成功。下面写一下自己操作的步骤

首先网上说的有很多方法

如 input 标签的最好做了,直接定位到元素,然后再sendKeys("value")即可

<input id="file_name" class="text-1 w255" type="text" readonly="" value="" data-file=""/>

奈何研发的同学做成了 readonly  属性的input ,好了学了一点,这种属性的input就没办法 使用 sendkeys了。

只能换其他方法了,

使用 下面  webdriver for python模拟键盘操作

            #下面的方式没有成功
            #ActionChains(self.driver).send_keys(releaseFile).perform()
            #Ctrl + a
            # ActionChains(self.driver).key_down(Keys.CONTROL).send_keys(‘a‘).key_up(Keys.CONTROL).perform()
            # self.driver.implicitly_wait(5)
            # ActionChains(self.driver).key_down(Keys.CONTROL).send_keys(‘c‘).key_up(Keys.CONTROL).perform()
            # self.driver.implicitly_wait(5)
            # ActionChains(self.driver).key_down(Keys.CONTROL).send_keys(‘v‘).key_up(Keys.CONTROL).perform()
            # time.sleep(2)
            # ActionChains(self.driver).key_down(Keys.ENTER).perform()
            #self.driver.find_element_by_xpath(".//*[@id=‘file_name‘]").send_keys(releaseFile)

发现鼠标实际操作的还是页面,而不是弹出的文件选择框,所以这种方式还是不行。

最后参考

Python selenium文件上传方法汇总

http://www.jb51.net/article/92678.htm

使用了 SendKeys,因为其他方法有的需要安装其他程序

首先要安装SendKeys库,可以用pip安装

pip install SendKeys

安装的过程遇到如下问题

此时需要到 http://aka.ms/vcpython27  下载

https://www.microsoft.com/en-us/download/details.aspx?id=44266

然后执行安装 sendkeys即可成功。

代码如下

#-*-coding:utf-8-*-
#Time:2017/7/1-15:47
#Author:YangYangJun

#-*-coding:utf-8-*-import SendKeys

#点击上传 下载附件
            time.sleep(2)
            self.driver.find_element_by_xpath(".//*[@id=‘down_bar_code_template‘]").click()
            self.driver.implicitly_wait(5)
            #releaseFile_Path = os.path.join(os.getcwd(),‘test_data‘)
            releaseFile = r‘C:\PySpace\CMS\UiTest\test_data‘ + ‘\UI_Release01.xlsx‘
            time.sleep(2)
            self.driver.implicitly_wait(5)
            self.driver.find_element_by_css_selector(".webuploader-pick").click()
            time.sleep(2)
            #将路径输入
            SendKeys.SendKeys(releaseFile)
            time.sleep(2)
            #确定路径输入
            SendKeys.SendKeys("{ENTER}")
            time.sleep(2)
            #确定打开按钮
            SendKeys.SendKeys("{ENTER}")
            time.sleep(2)
            self.driver.implicitly_wait(5)
            #点击上传
            self.driver.find_element_by_xpath(".//*[@id=‘file_upload_btn‘]").click()
            time.sleep(6)
            #提示信息, 上传成功
            successTest = u"上传商品成功!"
            get_reInfo = self.driver.find_element_by_xpath(".//*[@id=‘step_05‘]/ul/li[1]").text
            if successTest == get_reInfo:
                print u"上传成功!"
                #点击查看商品
                self.driver.find_element_by_xpath(".//*[@id=‘view_goods‘]").click()
                drugList = [‘阿奇霉素片‘]
                #调用验证及删除函数
                self.get_Verify(drugList)
            else:
                print u"上传失败!"
        else:
            print u"进入卖家中心失败"

效果如下图

第一个 模拟回车是为了确认输入的文件路径,第二个回车是为了确认点击打开按钮。

至此文件的上传功能就已经完成了。

网上说这种方式有些不稳定,有时间的话可以学习一下其他方法。

时间: 2024-06-15 09:24:20

Python WebDriver 文件上传的相关文章

Python WebDriver 文件上传(二)

今天补充一种文件上传的方法 主要是因为工作中使用SendKeys方法不稳定,具体方法见: Python WebDriver 文件上传(一) 这种方法直接通过命令行执行脚本时没有问题,可以成功上传,但是如果通过saltstack 远程控制执行时,SendKeys就定位不到窗口了. 所以采用这种新的方式来实现文件上传功能,并完美的解决了这个问题. 具体操作步骤如下: 1.下载工具 AutoIt及使用 AutoIt目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Window

Python Selenium 文件上传(二)

今天补充一种文件上传的方法 主要是因为工作中使用SendKeys方法不稳定,具体方法见: Python Selenium 文件上传(一) 这种方法直接通过命令行执行脚本时没有问题,可以成功上传,但是如果通过saltstack 远程控制执行时,SendKeys就定位不到窗口了. 所以采用这种新的方式来实现文件上传功能,并完美的解决了这个问题. 具体操作步骤如下: 1.下载工具 AutoIt及使用 AutoIt目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows

Python Selenium 文件上传(一)

昨天写了Web 文件下载的ui自动化,下载之后,今天就要写web 文件上传的功能了. 当然从折腾了俩小时才上传成功.下面写一下自己操作的步骤 首先网上说的有很多方法 如 input 标签的最好做了,直接定位到元素,然后再sendKeys("value")即可 <input id="file_name" class="text-1 w255" type="text" readonly="" value=

python+selenium文件上传

1.input标签类元素文件上传 先定位到文件上传元素id,再使用方法send_keys(文件路径) 2.非input标签 备注:非input标签的文件上传,就不适用于此方法了,需要借助autoit工具或者SendKeys第三方库.

django+python大文件上传

大文件上传服务一.前端[webuploader](http://fex.baidu.com/webuploader/ ''webuploader'')二.后端django 2.0.0这里只贴出核心的代码:前端的: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--引

python服务器文件上传下载+GUI【tkinter】

大概就是一个通过应用程序来和服务器打交道的这么一个,小东西 1.GUI 用的是tkinter 1 # -*- coding: UTF-8 -*- 2 from tkinter import * 3 import tkinter.filedialog 4 import requests 5 6 7 def Upload(): 8 print('upload') 9 selectFileName = tkinter.filedialog.askopenfilename(title='选择文件')#选

简易远程文件上传

后台搭建 开心太早 另类脚本 部署 客户端 源码 核心 测试 命令清单 执行 结果 总结 一直以来,Python的requests库都没能正式的接触到.今天这么一试,才发现原来是这么的强大.感情之前的urllib, urllib2都没这么的智能.于是思量着做了个小工具, 配合PHP写了一个命令行下的文件上传小工具. 后台搭建 开心太早 由于最后会在命令行里面使用,所以用不着什么花哨的界面(其实是写不出来,╭(╯^╰)╮). 大致的对比了一下,觉得还是前后端一致的好,然后就尝试着使用Python写

python使用webdriver处理上传文件(使用AutoIt)

一.前言 在使用python+webdriver做web自动化时,遇到上传本地文件时,无法通过webdriver进行处理.这是需要借助于第三方工具来解决此问题.下面就将介绍这个工具(AutoIt)的使用方法. 二.AutoIt的使用 2.1.AutoIt的下载与安装 下载地址:https://www.autoitscript.com/site 下载后,直接点击exe文件进行安装,这里我就不鸡婆了. 2.2.AutoIt的使用 安装后,在电脑所有程序中会与AutoIt v3文件夹,点开,里面会有A

selenium+python自动化77-autoit文件上传【转载】

前言 关于非input文件上传,点上传按钮后,这个弹出的windows的控件了,已经跳出三界之外了,不属于selenium的管辖范围(selenium不是万能的,只能操作web上元素).autoit工具处理windows的控件窗口是专业的,所以这个需借助AutoIt来解决了. 一.环境准备 1.可以autoit官网上下载,安装 http://www.autoitscript.com/site/ 2.下载到本地后傻瓜式安装,安装完之后在应用程序找到这个Autoit v3 3.AutoIt里面几个菜