您的位置:首页 > 其它

Selenium Webdriver2.0 处理upload file

2013-07-09 16:03 435 查看
昨个改程序遇到一个问题,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里观察到情况。



心里暗叫一声“惭愧”,一直嫌javascript和css麻烦,不愿意碰它们,可终归躲不过只能直面困难了。我爸帮我把多年前的javascript权威指南给带新家去了,以后没事得翻一翻。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: