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"进入卖家中心失败"
效果如下图

第一个 模拟回车是为了确认输入的文件路径,第二个回车是为了确认点击打开按钮。
至此文件的上传功能就已经完成了。
网上说这种方式有些不稳定,有时间的话可以学习一下其他方法。
Python WebDriver 文件上传(一)的更多相关文章
- Python WebDriver 文件上传(二)
今天补充一种文件上传的方法 主要是因为工作中使用SendKeys方法不稳定,具体方法见: Python WebDriver 文件上传(一) 这种方法直接通过命令行执行脚本时没有问题,可以成功上传,但是 ...
- Python Selenium 文件上传之Autoit
今天补充一种文件上传的方法 主要是因为工作中使用SendKeys方法不稳定,具体方法见: Python Selenium 文件上传之SendKeys 这种方法直接通过命令行执行脚本时没有问题,可以成功 ...
- Python Selenium 文件上传之SendKeys
昨天写了Web 文件下载的ui自动化,下载之后,今天就要写web 文件上传的功能了. 当然从折腾了俩小时才上传成功.下面写一下自己操作的步骤 首先网上说的有很多方法 如 input 标签的最好做了,直 ...
- Selenium2+python自动化-文件上传
前言 文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单. 一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决:另外一种非 ...
- selenium+Python(文件上传)
文件上传操作也比较常见功能之一,上传功能没有用到新有方法或函数,上传过程一般要打开一个本地窗口,从窗口选择本地文件添加.所以,一般会卡在如何操作本地窗口添加上传文件只要定位上传按钮,通send_key ...
- Python 之文件上传
基于form表单提交 # 需要指定form-data,不能直接拼键值对 可以指定name照片存在位置 views.py from django.shortcuts import render,redi ...
- Python Django文件上传
文件保存本地 view视图 def update(request): if request.method =='GET': return render(request,'update.html') e ...
- python day32--struct,文件上传下载
一.struct模块 可以把要发送的数据长度转换成固定长度的字节 struct.pack('i',数据长度) struct.unpack('i',数据长度) 二.上传下载文件作业 server imp ...
- python服务器文件上传下载+GUI【tkinter】
大概就是一个通过应用程序来和服务器打交道的这么一个,小东西 1.GUI 用的是tkinter # -*- coding: UTF-8 -*- from tkinter import * import ...
随机推荐
- C++ 数据的封装 初始封装
C++ 数据封装 所有的 C++ 程序都有以下两个基本要素: 程序语句(代码):这是程序中执行动作的部分,它们被称为函数. 程序数据:数据是程序的信息,会受到程序函数的影响. 封装是面向对象编程中的把 ...
- ps -ef 输出具体含义
ps -ef 输出具体含义 UID PID PPID C STIME TTY TIME CMD 各相关信息的意义: UID 程序被该 UID 所拥有 PID 就是这 ...
- F5 源地址保持
Virtusl Server: Web Portal 建议选择成Source_Addr(源地址保持).因为Web Portal提供WEB服务给用户访问,压力比较大,而源地址保持的方式处理速度比Cook ...
- 这个移动通讯中 DB 、DBm 、瓦的基本知识的问题:
1.对于无线工程师来说更常用分贝dBm这个单位,dBm单位表示相对于1毫瓦的分贝数,dBm和W之间的关系是:dBm=10*lg(mW)1w的功率,换算成dBm就是10×lg1000=30dBm.2w是 ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #6 使用localmodconfig缩短编译时间
HACK #6 使用localmodconfig缩短编译时间 本节介绍使用make localmodconfig生成精简的.config文件,缩短内核编译时间的方法.为了能够应对各种各样的环境,发布版 ...
- android自动化之MonkeyRunner测试环境配置(一)
Android自动化测试之MonkeyRunner 一.Android自动化测试之环境搭建 1.1 Android-sdk介绍 ¢ SDK(Software development kit)软件开发 ...
- 深度解析Java中的那把锁
锁的本质 我们先来讨论锁的出现是为了解决什么问题,锁要保证的事情其实很好理解,同一件事(一个代码块)在同一时刻只能由一个人(线程)操作. 这里所说的锁为排他锁,暂不考虑读写锁的情况 我们在这里打个比方 ...
- SQL 基础命令和函数
[数据操作] SELECT --从数据库表中检索数据行和列 INSERT --向数据库表添加新数据行 DELETE --从数据库表中删除数据行 UPDATE --更新数据库表中的数据 [数据定义] C ...
- maven 编译解决jdk 版本问题
1.在父工程中pom 添加版本限制: <plugins> <plugin> <groupId>org.apache.maven.plugins</groupI ...
- c++类对象 指针区别
class Test{ public: int a; Test(){ a = ; } }; int main1() { Test* t1 = new Test(); t1->a = ; Test ...