昨个改程序遇到一个问题,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.htmljavascript