Selenium 上传文件失败,解决办法一
昨个改程序遇到一个问题,UI上面有需要上传文件的地方。但是我不知道怎么让Selenium完成
点击上传文件按钮->在弹出的文件选择窗口中选择路径和文件,点确定。
要知道弹出窗口属于window的范畴,Selenium只能处理Web page.
Jeremy原先的代码用的是Selenium RC中的
type “filepath+filename”方法。可不知咋搞的反正运行到这里是进行不下去了。
正好借这个机会来研究一下在Webdriver里怎么做。
我自己写了个网页,里面就一句
我先是用Selenium IDE录制了一下, 得到的结果就是:把选择文件的操作变成了一句话type
"path+name"。
RC中的type在Webdriver里对应的应该是webelement.sendkeys ,于是运行了一下真的管用。
不用担心怎么处理弹出窗口的事儿,根本就是跳过了这一步嘛,多省心。
看来之前是我想太多了。
-----------------------------------------------------------------------------------------
上周我测的产品出了新版本,上传文件这块的UI代码改动了一下。
用sendkeys这招竟然过不去,抛出了异常:
org.openqa.selenium.ElementNotVisibleException:
Element is not currently visible and so may not be interacted
with
就是说这个input还在,就是不可见,所以不能sendKeys了。
办法只有一个,就是用javascript把这个input给弄成可见的!
把这句document.findElementById('123').style.visibility='visible';放在selenium
中执行,可是上传文件框还是没出来。我的javascript和css都比较菜,对于显示、隐藏页面元素就只会这一招。正当无奈之际,发现firebug
里html下面,input
这一行是灰的。这应该说明它是隐藏的,可是改哪儿才能管用呢?
我选中了灰的这一行,右边style里显示出了css样式 display:none
百度了一下display都有什么值,有none, inline,
block...,我把none改成了block,页面上出现了又大又丑的
所以:如果你想在做selenium webdriver 2.0自动化的时候遇到了界面里有“上传文件”的需求,input
type='file'
加了样式被“美化”没了,直接sendkey不行的时候,在sendkeys之前,用javascript把它给弄出来:
JavascriptExecutor
j= (JavascriptExecutor)driver;
j.executeScript("document.findElementById('123').style.display='block';
");
然后再WebElement.sendKeys ("c:\abc.txt");
就OK了!这样虽然不太优雅,但也是没有办法中的办法。必竟自动化代码不能卡在这里过不去。文件上传不上去,之后的一系列验证工作都做不了。同理的还有下
拉菜单中的二级菜单,有时候一闪就没,也可以把visiblility:hidden改成visible,同时设置好left和top值,让它显示出来。
就能继续了。
附上我为了解决这个问题做的网页(为了节省登录产品的时间,我单独做了一个网页来模拟这个问题)
和在firebug里观察到情况。
来源:http://blog.sina.com.cn/s/blog_539a70d30101ajsg.html
Selenium 上传文件失败,解决办法一的更多相关文章
- php_admin_value open_basedir 引起的上传文件失败解决方法
为了安全,我们通常会在虚拟主机设置中,加入这一行php_admin_value open_basedir "/usr/local/apache/htdocs/www"但这会导致mo ...
- hadoop上传文件失败解决办法
hadoop上传文件到web端hdfs显示hadoop could only be replicated to 0 nodes instead of 1解决办法 错误状态:在hadoop-2.7.2目 ...
- 使用Xshell的rz命令上传文件失败的解决方法
使用Xshell的rz命令上传文件失败的解决方法 第一种:在home目录下rz上传文件失败,如下: 原因:当前用户不具备权限解决:用 sudo rz 上传即可成功 第二种:对于文件大的rz上传失败的话 ...
- Java+Selenium 上传文件,点击选择“浏览文件”按钮,报错invalid argument
Java+Selenium 上传文件,点击选择"浏览文件"按钮,报错invalid argument 解决代码: Actions action=new Actions(driver ...
- Nginx上传文件失败
公司用Nginx做反向代理,出现了上传文件失败的问题,通过查看错误日志,发现是上传文件太大的缘故. 通过查找资料,才知道nginx默认最大上传文件时1M.这就需要修改配置文件,将上传文件大小进行修改. ...
- hadoop fs -put上传文件失败,WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: master:8020
hadoop fs -put上传文件失败 报错信息:(test文件夹是已经成功建好的) [root@master ~]# hadoop fs -put test1.txt /test // :: WA ...
- Chrome不能在网易网盘中上传文件的解决办法
Chrome不能在网易网盘中上传文件的解决办法1. 安装 Adobe Flash Player PPAPI,设置flash插件 chrome://settings/content/flash,许可[* ...
- SecureCRT rz 上传文件失败问题
在把Windows上的文件传至Linux端时用到SecureCRT,一般小文件都没有问题,文件太大时则出现了上传后的文件只有几K大小,当然大于2个G的是不可能传的上去的了.对于几百M到1G多的大文件要 ...
- java前后分离使用fetch上传文件失败500
这次不是写什么技术要点,仅仅是记录一下 最近遇到的一个问题 背景 使用fetch向java后台上传文件时,前端调试报错500,后端的报错为multipart 无法解析,翻译过来大概是这个意思. 由于本 ...
随机推荐
- delphi假死线程堵塞解决办法
Delphi的高效不多说... 俗话说:真正的程序员用C语言,聪明的程序员用Delphi,一点都不假,和C++比它比C++更简单,更容易上手,功能丝毫不逊色C++,比起VB,毫无疑问比VB好多了,重要 ...
- HDU1548:A strange lift(Dijkstra或BFS)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 题意:电梯每层有一个数,例如第n层有个数k, 那么这一层只能上k层或下k层,但是不能低于一层或高 ...
- Struts2文件的上传
一.单文件的上传 表单的enctype属性: application/x-www-form-urlencoded:默认的编码方式. multipart/form-data:会以二进制的方式处理表单数 ...
- MongoDB安装环境搭建
Mongodb的默认端口号27017 _id是全局唯一值,不要去给这个列赋值,默认是唯一的,如果赋值,列入有两列的_id:2,则会报冲突不能插入 [root@HE4 ~]# tar xvf mongo ...
- HTML5 简介、HTML5 浏览器支持
HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定. HTML5的设计目的是为了在移动设备上支持多媒体. HTML5 简单易学. 什么是 HTML5? HTML5 ...
- HTML 表单和输入
HTML 表单 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中输入内容,比如:文本域(textarea).下拉列表.单选框(radio-buttons).复选框(checkboxes)等等 ...
- 第一部分 代码组织概念,集成开发环境(IDE)
代码组织概念 主要是代码文件,项目和解决方案. 解决方案(.sln)包含多个项目(.csproj),一个项目又包含多个文件(.cs). 集成开发环境(IDE): 由编辑.编译.调试,以及用户图形界面, ...
- 负载均衡软件LVS分析三(配置)
LVS集群有DR.TUN.NAT三种配置模式,可以对www服务.FTP服务.MAIL服务等做负载均衡,下面通过搭建www服务的负载均衡实例,讲述基于DR模式的LVS集群配置. 一. Director ...
- loadrunner:从数据库中取值进行参数化
下面我们介绍用数据库中的用户名来参数化登陆用户名. 框选住登陆名,点鼠标右键,弹出对话框,选择"替换为新参数"弹出对话框,此时参数名输入:name,参数类型选择File,如图 点& ...
- 在Oracle中数据库、表空间、表之间的关系
在oracle中,表空间是存储概念上的,建立表空间需要有对应的数据文件,数据文件建立好之后直接会把一定的磁盘空间分配给它,这样可以对数据库的存储空间进行有效的管理.然后在建表的时候指定对应的表空间,该 ...