zoukankan      html  css  js  c++  java
  • 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 <wbr>Webdriver2.0 <wbr>处理upload <wbr>file <wbr>- <wbr>充补

    所以:如果你想在做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里观察到情况。

    Selenium <wbr>Webdriver2.0 <wbr>处理upload <wbr>file <wbr>- <wbr>充补
    来源:http://blog.sina.com.cn/s/blog_539a70d30101ajsg.html

  • 相关阅读:
    Struts 学习之03Controller(控制器 上)
    解决.netFrameWork1.1中事件丢失
    python中的迭代器(iterable)和迭代对象(iterator), type和isinstance
    如何在快速启动栏添加桌面
    使用WebService构建的C/S代码结构示例
    .NET Framework 中的常见命名空间
    多重委托简单示例一
    匿名方法示例之计算器(委托作为参数和返回值)
    委托与事件示例
    批处理文件入门
  • 原文地址:https://www.cnblogs.com/zoeya/p/5086511.html
Copyright © 2011-2022 走看看