Chinaunix首页 | 论坛 | 博客
  • 博客访问: 129604
  • 博文数量: 89
  • 博客积分: 930
  • 博客等级: 准尉
  • 技术积分: 820
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-22 19:03
文章分类

全部博文(89)

文章存档

2022年(1)

2015年(6)

2014年(29)

2013年(15)

2012年(38)

我的朋友

分类:

2012-09-28 17:09:09

对于一般的上传附件

driver.findElement(By.xpath("//input[@type='file']"))).sendKeys("C:\\testContent.pdf");  

//这个比较好理解,先定位,然后把文件的路径放入输入内容。

ABiz的附件比较特殊,是通过flash控件进行附件上传,Webdriver没有现成的方法。

研究了下附件的上传过程:

flash控件的附件上传与普通的附件上传实现方式不一样:

1、普通的附件上传,都是将附件路径作为一个值放入form表单,然后在提交的时候将这个值提交给服务器

2Abiz的附件上传是首先把附件上传到系统数据库当中,然后由数据库返回一个imgID给浏览器,修改或新增某个隐藏的input标签,给图片参数赋值,等待提交表单的操作。

解决方案:可以伪造实现过程,直接在表单中插入/修改某个代表图片信息的input标签,然后提交,操作可以用JS来实现。

注册第二步,上传公司图片功能:

1、未上传图片

2、已上传图片


 

Java代码

  1. String js1 = "var new_uploadIconArea = document.getElementById(\'"uploadIconArea\"); new_uploadIconArea.setAttribute(\"style\", \"display:block\");";
  2. String js2 = "var new_input = document.getElementById(\'"comTempPhotoId\"); new_input.setAttribute(\"value\", \"6789\") ;";
  3. ((JavascriptExecutor) driver).executeScript(JS1);
  4. ((JavascriptExecutor) driver).executeScript(JS2);

刚开始只执行了JS2,但是脚本总是执行失败,查看页面元素发现,id=comTempPhotoId的元素的父元素的style在有图片的时候值是空。

对于Webdriver来说,sytle=displaynone的标签是无法定位的,所以只有再加上JS1,才能实现修改value值的目的。

添加实名信息表单中上传图片功能:

 

 

1、未上传图片

 

 

2、已上传图片


 

JAVA代码

  1. String js1 = " var new_tmpAuthPic = document.getElementsByName(\"tmpAuthPic\")[0]; new_tmpAuthPic.setAttribute(\"value\", \"16811\");";

因为无论是否上传图片,对该标签的父元素没有任何影响,所以不需要像处理注册一样先调整父标签的属性让Webdriver可读

本来以为这样过不了JS校验,但是最后发现开发的JS就是用value值是否为空进行判断的。


阅读(5464) | 评论(0) | 转发(0) |
0

上一篇:WebGoat:Concurrency

下一篇:没有了

给主人留下些什么吧!~~