selenium是一个相当方便的东西,但是有些功能它也并不能完成,比如上传文件,swf插件的点击操作,和各种不在web中需要在Windows进行相关的操作。
我再录制selenium脚本的时候碰到的第一个问题就是上传文件。
1、一般来说,上传文件的HTML代码都是使用<input type='file'>标签完成的,而这种的上传文件比较好操作,可使用sendKeys方法完成。
如:
可使用selenium webDriver:
2、但是如果上传文件不是使用<input>标签完成的,就不能使用以上的方法了,baidu了很久也没有其他类似sendkeys的方法可以实现。
如:swf插件
以上这种代码就无法使用sendkeys的方法实现上传文件
我第二次采用的方法就是使用autoIT工具。
autoIT是一个可以用来捕捉Windows操作然后编写代码生成一个EXE文件的工具,只不过这个工具需要在打开上传文件窗口后才能使用,而我的上传文件代码无法使用click等其他方式打开上传文件窗口,所以后来也废弃不用了。
以下是autoIT的代码,具体使用方法网上可baidu:
保存后编译成EXE文件:uploadfile.exe
然后在selenium webDriver中使用代码:
3、而使用click方法点击这个对象也会在Junit报错且前台无任何反应,这个时候就可以使用第三个我一不小心找到的工具——sikuli!!!
Junit执行报错:
注:据说会报错是因为chrome版本问题,但是没有研究过
在网上各种找的时候,在以下这位好心人的评论里看到了这个名字,sikuli,抱着试一试的心情我baidu了一下,真的可以用,虽然不知道你是谁,但是我感谢你呀~
http://www.oschina.net/question/1992633_2144550
sikuli是一种靠对比图片来定位的工具,无论是web页面、Windows窗口,只要是显示在屏幕上的东西它都能靠图片来定位,但是如果在屏幕上有差不多的地方,可能就会定位失败啦,但是我需要定位的地方都很有特点,所以没有失败过。
首先,下载sikuli:https://launchpad.net/sikuli/+download
进入网页后找到最新的setup.jar就可以,我是sikulixsetup-1.1.0.jar
也可以下载source包,在eclipse中使用查看class方法:https://github.com/sikuli/sikuli/releases
得到sikulixsetup-1.1.0.jar后可导入eclipse build path中使用,但是其实并没有可以使用,这种时候执行Junit会报错:
之前一直不明白为什么会报错,后来才知道需要执行jar包
打开cmd,cd到jar包的目录文件中,然后执行
之后会打开让你选择的窗口,直接选择第二种,java方式(eclipse),然后点击setup now,之后会弹出一个窗口,具体是神马我忘记了,但是我选择了YES也没有错。
执行完成后会有一个say hi的窗口,然后在同目录下会出现一个jar包:sikulixapi.jar,就此安装完成,就可以正常使用了。
首先截取需要的图片:
choosefile.png:选择文件的按钮图片
inputfilename.png:上传文件窗口的输入框图片
openfile.png:上传文件窗口的open按钮图片
保存到你期望的位置
在selenium webDriver中写代码:
记得导入包:import org.sikuli.script.Screen;
就可以执行啦
更多sikuli的命令:
http://www.testwo.com/article/299
http://doc.sikuli.org/tutorials/helloworld/helloworld-mac.html