selenium部分功能(上传文件、swf插件)无法自动化时可使用的方法
2017-05-08 09:19
751 查看
selenium是一个相当方便的东西,但是有些功能它也并不能完成,比如上传文件,swf插件的点击操作,和各种不在web中需要在Windows进行相关的操作。
我再录制selenium脚本的时候碰到的第一个问题就是上传文件。
1、一般来说,上传文件的HTML代码都是使用<input type='file'>标签完成的,而这种的上传文件比较好操作,可使用sendKeys方法完成。
如:
[html] view
plain copy
<input id='uploadfile' type='file'>上传文件</input>
可使用selenium webDriver:
[java] view
plain copy
driver.findElement(By.id("uploadfile")).sendKeys("C:\\testfile.zip");
2、但是如果上传文件不是使用<input>标签完成的,就不能使用以上的方法了,baidu了很久也没有其他类似sendkeys的方法可以实现。
如:swf插件
[html] view
plain copy
<object id="SWFUpload_0" type="application/x-shockwave-flash" data="/xxx/xxx/xxx.swf?xxx"
width="120" height="30" class="swfupload" style="position: absolute; z-index: 1;">
以上这种代码就无法使用sendkeys的方法实现上传文件
我第二次采用的方法就是使用autoIT工具。
autoIT是一个可以用来捕捉Windows操作然后编写代码生成一个EXE文件的工具,只不过这个工具需要在打开上传文件窗口后才能使用,而我的上传文件代码无法使用click等其他方式打开上传文件窗口,所以后来也废弃不用了。
以下是autoIT的代码,具体使用方法网上可baidu:
[plain] view
plain copy
ControlFocus ("文件上传","","Edit1");
WinWait("CLSAA[#32770]","",5);
ControlSetText('文件上传','','Edit1','E:\selenium\FILE\uploadfile.zip');
ControlClick ('文件上传','','Button1');
保存后编译成EXE文件:uploadfile.exe
然后在selenium webDriver中使用代码:
[java] view
plain copy
Runtime.getRuntime().exec("E:\\selenium\\FILE\\uploadfile.exe");
3、而使用click方法点击这个对象也会在Junit报错且前台无任何反应,这个时候就可以使用第三个我一不小心找到的工具——sikuli!!!
Junit执行报错:
[java] view
plain copy
org.openqa.selenium.WebDriverException: Returned value cannot be converted to WebElement: {}
Build info: version: '2.43.0', revision: '597b76b', time: '2016-07-28 20:52:14'
System info: host: 'XXX', ip: 'XX.XX.XX.XX', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_21'
Driver info: driver.version: RemoteWebDriver
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:359)
at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:393)
at org.openqa.selenium.By$ById.findElement(By.java:214)...
注:据说会报错是因为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会报错:
[java] view
plain copy
[error] RunTimeINIT: *** terminating: libs to export not found on above classpath: /sikulixlibs/windows/libs64
之前一直不明白为什么会报错,后来才知道需要执行jar包
打开cmd,cd到jar包的目录文件中,然后执行
[plain] view
plain copy
java -jar sikulixsetup-1.1.0.jar
之后会打开让你选择的窗口,直接选择第二种,java方式(eclipse),然后点击setup now,之后会弹出一个窗口,具体是神马我忘记了,但是我选择了YES也没有错。
执行完成后会有一个say hi的窗口,然后在同目录下会出现一个jar包:sikulixapi.jar,就此安装完成,就可以正常使用了。
首先截取需要的图片:
choosefile.png:选择文件的按钮图片
inputfilename.png:上传文件窗口的输入框图片
openfile.png:上传文件窗口的open按钮图片
保存到你期望的位置
在selenium webDriver中写代码:
[java] view
plain copy
Screen s=new Screen();
s.click("E:\\selenium\\FILE\\choosefile.png");
s.type("E:\\selenium\\FILE\\inputfilename.png","E:\\selenium\\FILE\\uploadfile.zip");
s.click("E:\\selenium\\FILE\\openfile.png");
记得导入包:import org.sikuli.script.Screen;
就可以执行啦
更多sikuli的命令:
http://www.testwo.com/article/299
http://doc.sikuli.org/tutorials/helloworld/helloworld-mac.html
我再录制selenium脚本的时候碰到的第一个问题就是上传文件。
1、一般来说,上传文件的HTML代码都是使用<input type='file'>标签完成的,而这种的上传文件比较好操作,可使用sendKeys方法完成。
如:
[html] view
plain copy
<input id='uploadfile' type='file'>上传文件</input>
可使用selenium webDriver:
[java] view
plain copy
driver.findElement(By.id("uploadfile")).sendKeys("C:\\testfile.zip");
2、但是如果上传文件不是使用<input>标签完成的,就不能使用以上的方法了,baidu了很久也没有其他类似sendkeys的方法可以实现。
如:swf插件
[html] view
plain copy
<object id="SWFUpload_0" type="application/x-shockwave-flash" data="/xxx/xxx/xxx.swf?xxx"
width="120" height="30" class="swfupload" style="position: absolute; z-index: 1;">
以上这种代码就无法使用sendkeys的方法实现上传文件
我第二次采用的方法就是使用autoIT工具。
autoIT是一个可以用来捕捉Windows操作然后编写代码生成一个EXE文件的工具,只不过这个工具需要在打开上传文件窗口后才能使用,而我的上传文件代码无法使用click等其他方式打开上传文件窗口,所以后来也废弃不用了。
以下是autoIT的代码,具体使用方法网上可baidu:
[plain] view
plain copy
ControlFocus ("文件上传","","Edit1");
WinWait("CLSAA[#32770]","",5);
ControlSetText('文件上传','','Edit1','E:\selenium\FILE\uploadfile.zip');
ControlClick ('文件上传','','Button1');
保存后编译成EXE文件:uploadfile.exe
然后在selenium webDriver中使用代码:
[java] view
plain copy
Runtime.getRuntime().exec("E:\\selenium\\FILE\\uploadfile.exe");
3、而使用click方法点击这个对象也会在Junit报错且前台无任何反应,这个时候就可以使用第三个我一不小心找到的工具——sikuli!!!
Junit执行报错:
[java] view
plain copy
org.openqa.selenium.WebDriverException: Returned value cannot be converted to WebElement: {}
Build info: version: '2.43.0', revision: '597b76b', time: '2016-07-28 20:52:14'
System info: host: 'XXX', ip: 'XX.XX.XX.XX', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_21'
Driver info: driver.version: RemoteWebDriver
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:359)
at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:393)
at org.openqa.selenium.By$ById.findElement(By.java:214)...
注:据说会报错是因为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会报错:
[java] view
plain copy
[error] RunTimeINIT: *** terminating: libs to export not found on above classpath: /sikulixlibs/windows/libs64
之前一直不明白为什么会报错,后来才知道需要执行jar包
打开cmd,cd到jar包的目录文件中,然后执行
[plain] view
plain copy
java -jar sikulixsetup-1.1.0.jar
之后会打开让你选择的窗口,直接选择第二种,java方式(eclipse),然后点击setup now,之后会弹出一个窗口,具体是神马我忘记了,但是我选择了YES也没有错。
执行完成后会有一个say hi的窗口,然后在同目录下会出现一个jar包:sikulixapi.jar,就此安装完成,就可以正常使用了。
首先截取需要的图片:
choosefile.png:选择文件的按钮图片
inputfilename.png:上传文件窗口的输入框图片
openfile.png:上传文件窗口的open按钮图片
保存到你期望的位置
在selenium webDriver中写代码:
[java] view
plain copy
Screen s=new Screen();
s.click("E:\\selenium\\FILE\\choosefile.png");
s.type("E:\\selenium\\FILE\\inputfilename.png","E:\\selenium\\FILE\\uploadfile.zip");
s.click("E:\\selenium\\FILE\\openfile.png");
记得导入包:import org.sikuli.script.Screen;
就可以执行啦
更多sikuli的命令:
http://www.testwo.com/article/299
http://doc.sikuli.org/tutorials/helloworld/helloworld-mac.html
相关文章推荐
- selenium部分功能(上传文件、swf插件)无法自动化时可使用的方法
- SpringMVC 使用uploadify插件上传文件,post方法无法直接获取参数问题
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
- jquery 实现ajax 上传文件的功能(使用插件 ajaxfileupload)
- ASP.NET 使用js插件出现上传较大文件失败的解决方法(ajaxfileupload.js第一弹)
- ASP.NET 使用ajaxfileupload.js插件出现上传较大文件失败的解决方法(ajaxfileupload.js第一弹)
- ASP.NET 使用ajaxupload.js插件出现上传较大文件失败的解决方法
- jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
- jQuery不使用插件及swf实现无刷新文件上传
- 使用PUT方法上传文件无法工作原因分析
- uploadify上传组件点击uploadify.swf,无法弹出文件选择框的原因及解决方法
- Java中使用WebUploader插件上传大文件单文件和多文件的方法小结
- FCKeditor的常用配置方法和无法使用上传功能的解决!
- 解决windows7下使用IIS配置的PHP无法上传文件的方法
- 使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能。并且在界面上有radio 的选择内容也要上传
- 使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能。并且在界面上有radio 的选择内容也要上传
- 使用MyEclipse无法上传文件到Hadoop HDFS的原因与解决方法
- GitHub基础学习-使用eclipse的EGit插件向GitHub上传项目文件的方法
- J2EE中的文件上传插件使用方法