Selenium Webdriver2.0 处理隐藏元素

来源:互联网 发布:软件投标技术方案 编辑:程序博客网 时间:2024/06/08 10:47
昨个改程序遇到一个问题,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 interactedwith
就是说这个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 <wbr>Webdriver2.0 <wbr>处理upload <wbr>file <wbr>- <wbr>充补

所以:如果你想在做selenium webdriver 2.0自动化的时候遇到了界面里有“上传文件”的需求,inputtype='file'加了样式被“美化”没了,直接sendkey不行的时候,在sendkeys之前,用javascript把它给弄出来:
JavascriptExecutorj= (JavascriptExecutor)driver;
j.executeScript("document.findElementById('123').style.display='block';");
然后再WebElement.sendKeys ("c:\abc.txt");


就OK了!这样虽然不太优雅,但也是没有办法中的办法。必竟自动化代码不能卡在这里过不去。文件上传不上去,之后的一系列验证工作都做不了。同理的还有下拉菜单中的二级菜单,有时候一闪就没,也可以把visiblility:hidden改成visible,同时设置好left和top值,让它显示出来。就能继续了。

附上我为了解决这个问题做的网页(为了节省登录产品的时间,我单独做了一个网页来模拟这个问题)
和在firebug里观察到情况。

Selenium <wbr>Webdriver2.0 <wbr>处理upload <wbr>file <wbr>- <wbr>充补
心里暗叫一声“惭愧”,一直嫌javascript和css麻烦,不愿意碰它们,可终归躲不过只能直面困难了。我爸帮我把多年前的javascript权威指南给带新家去了,以后没事得翻一翻。



自己学习的心得总结:如果使用jquery的话,可以使用如下方法将元素style.display变成"block"的形式

1.jQuery.find('#t:visible')")  其中t是某个元素的ID;

2. jQuery("#t > a).show()  其中其中t是某个元素的ID。show()方法是显示隐藏的匹配元素,该方法是jquery中带的方法

0 0