加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

selenium部分功能(上传文件、swf插件)无法自动化时可使用的方

发布时间:2020-12-15 19:55:34 所属栏目:百科 来源:网络整理
导读:selenium是一个相当方便的东西,但是有些功能它也并不能完成,比如上传文件,swf插件的点击操作,和各种不在web中需要在Windows进行相关的操作。 我再录制selenium脚本的时候碰到的第一个问题就是上传文件。 1、一般来说,上传文件的HTML代码都是使用input t

selenium是一个相当方便的东西,但是有些功能它也并不能完成,比如上传文件,swf插件的点击操作,和各种不在web中需要在Windows进行相关的操作。

我再录制selenium脚本的时候碰到的第一个问题就是上传文件。

1、一般来说,上传文件的HTML代码都是使用<input type='file'>标签完成的,而这种的上传文件比较好操作,可使用sendKeys方法完成。

如:

[html]? view plain ?copy
?

在CODE上查看代码片

派生到我的代码片

  1. <input?id='uploadfile'?type='file'>上传文件</input>??
可使用selenium webDriver:
[java]? copy
?

派生到我的代码片

    driver.findElement(By.id("uploadfile")).sendKeys("C:testfile.zip");??

2、但是如果上传文件不是使用<input>标签完成的,就不能使用以上的方法了,baidu了很久也没有其他类似sendkeys的方法可以实现。

如:swf插件

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]? copy
    ?

    派生到我的代码片

      ControlFocus?("文件上传","","Edit1");??
    1. WinWait("CLSAA[#32770]",5);??
    2. ControlSetText('文件上传','','Edit1','E:seleniumFILEuploadfile.zip');??
    3. ControlClick?('文件上传','Button1');??
    保存后编译成EXE文件:uploadfile.exe
    然后在selenium webDriver中使用代码:

    copy
    ? Runtime.getRuntime().exec("E:seleniumFILEuploadfile.exe");??

    3、而使用click方法点击这个对象也会在Junit报错且前台无任何反应,这个时候就可以使用第三个我一不小心找到的工具——sikuli!!!

    Junit执行报错:

    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会报错:

    copy
    ? [error]?RunTimeINIT:??***?terminating:?libs?to?export?not?found?on?above?classpath:?/sikulixlibs/windows/libs64??

    之前一直不明白为什么会报错,后来才知道需要执行jar包

    打开cmd,cd到jar包的目录文件中,然后执行

    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中写代码:

    copy
    ? Screen?s=new?Screen();??
  • ????s.click("E:seleniumFILEchoosefile.png");??
  • ????s.type("E:seleniumFILEinputfilename.png","E:seleniumFILEuploadfile.zip");??
  • ????s.click("E:seleniumFILEopenfile.png");??

  • 记得导入包:import org.sikuli.script.Screen;

    就可以执行啦

    更多sikuli的命令:

    http://www.testwo.com/article/299

    http://doc.sikuli.org/tutorials/helloworld/helloworld-mac.html

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读