Selenium自动化过程中如何操作Flash动画

发表于:2017-4-07 11:03

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:不再有的年月    来源:51Testing软件测试网采编

分享:
  二、右键点击工程选择Build Path下的子菜单项Add Libraies...添加我们选择的jre
  选择我们JRE System library-next->Workspace default JRE(jire6)点击Finish。
  3.考虑运行的兼容性(不同版本的jdk与jre配合需要此配置,相同版本的不需要),右击该工程选择菜单项Project->Properties。在弹出框中做一下配置:
  如何添加外部包?
  选中该工程右键点击该工程选择Build Path->Add  External Archives...后导入本地目录下的sikuli-script.jar即可
  上面我们从sikuli角度来操作flash。总结下这种解决方案遇到的坑和注意点。
  1.32系统上sikuli的环境搭建是问题不大的,除了sikuli ide的运行环境需要配置成jre6。64位系统上有点坑。上文中我也较详细的说明了ide的配置以及如何在eclipse中运行sikuli脚本,我相信你肯定能运行起来。
  2.注意点:sikuli对我们截图的匹配查找是在我们当前可视范围内的。这句话怎么理解呢?比如上文中我在桌面上截了一个firefox快捷图标的图片,当运行到点击这个快捷图标时,突然弹出了一段小广告挡住了这个快捷图标,那么我们的sikuli是找不到该图片的。我的解决办法是在运行sikuli脚本之前,最好先运行下AutoIt的一个小脚本,就是上文中我们频繁使用到的WinActivate($hWnd)函数,可以确保某个窗口控件是可视的。
  说到这来java部分也就这样了,但是本篇还没有结束,因为我们还没有讲python中如何使用sikuli-script.jar这个包!
  sikuli-script.jar是java下的包,python使用java的包最先想到的就是jpython。但是就为了操作个flash把python解析器设置为jpython我认为没人能接受。那么有一种神器可以连接python与java还能保证你的运行环境是cpython的,那这个包就是jpype。
  对于32位系统,安装这个是最简单的你可以下载jpype.exe程序直接安装。jpype.exe暂时是没有64位,我们选择安装包安装。路径为:https://pypi.python.org/pypi/JPype1。我们下载后运行python setup.py install。发现可能是有问题的,原因是在windows平台上无法安装python c extension的扩展包,我们下载专用的编译器Microsoft Visual C++ Compiler for Python 2.7就好了下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=44266。
  对于jpype的使用也是非常简单的,对于32位系统操作sikuli-script.jar这个包太简单就几行代码:
  #coding=utf-8
  import jpype
  jvmPath = jpype.getDefaultJVMPath()
  jpype.startJVM(jvmPath,"-ea",r"-Djava.class.path=D:\\tutorial\\tutorial\spiders\sikuli-script.jar")#jvmPath为jvm.dll的路径可以人为指定并指定外部包的加载路径
  JDClass =jpype.JClass("org.sikuli.script.Screen")
  s=JDClass()
  imgpath = "D:/img/"
  s.wait(imgpath + "firfox.png", 5)
  s.doubleClick(imgpath + "firfox.png");
  jpype.shutdownJVM()
  这段代码与我们上文的java代码意义是一样。为什么说对于32位是没有问题的,难道64位python解析器无法这样用吗?
  首先,并不是说64位解析器无法通过jpype来启动一个虚拟机,但是问题是我们只能启动一个64位的jvm。但是我们上文说了sikuli-script.jar这个包无法在64位的jre中运行的,我们尝试通过手动给出32位jre下面jvm.dll的路径来启用JVM进而运行sikuli-script.jar这个包。我的尝试代码:
  #coding=utf-8
  import jpype
  jpype.startJVM(r"C:\Program Files (x86)\Java\jre6\bin\client\jvm.dll","-ea",r"-Djava.class.path=D:\\tutorial\\tutorial\spiders\sikuli-script.jar")#jvmPath为32位jre的jvm.dll路径
  JDClass =jpype.JClass("org.sikuli.script.Screen")
  s=JDClass()
  imgpath = "D:/img/"
  s.wait(imgpath + "firfox.png", 5)
  s.doubleClick(imgpath + "firfox.png");
  jpype.shutdownJVM()
  发现是无法启动jvm的,原因可能很简单我们在64位的python解析器上运行32位jvm.dll多少有点问题。那么我们在64位上如何使用sikuli呢?没办法我能想到的就只有曲线救国了...对的,就是用python调用控制台来运eclipse里的工程。我的做法如下:
  1.导出该工程为jar包。
  步骤:选择该工程选择菜单的File->Export,选择JAR File,然后一路向西导出到某个路径下,我直接放桌面了。
  2.修改改jar包中的MANIFEST.MF文件。
  步骤一、修改改jar包后缀名为zip。比如将abc.jar变成abc.zip
  步骤二、修改里面的META-INF中的MANIFEST.MF文件,添加Main-Class: com.STest
  步骤三、保存后修改abc.zip为abc.jar
  3.修改完jar包后我们直接编写运行这个jar的dos脚本如下:
  cmd命令:"C:\Program Files (x86)\Java\jre6\\bin\java" -Djava.ext.dirs=C:\lib -jar C:\Users\PF-211X3\Desktop\\abc.jar
  这个简单的说明吧!
  一、C:\Program Files (x86)\Java\jre6\\bin\java是我们32位jre的路径下java命令
  二、-Djava.ext.dirs命令参数如同jpype中的参数-Djava.class.path一样为我们外部引用包,我这里是把sikuli-script.jar这个包放在C盘的lib下的
  三、-jar参数后面跟的是我们刚修改过的jar包
  以上只是个例子,具体路径配置按自己个人情况界定。
  我们发现在个在cmd中是能正常运行的,那么我们如何在python中运行这个我相信,不需要我多说了吧
  import os
  cmd="\"C:\Program Files (x86)\Java\jre6\\bin\java\" -Djava.ext.dirs=C:\lib -jar C:\Users\PF-211X3\Desktop\\abc.jar"
  os.popen(cmd)
  好吧,我们总算通过曲线救国的方式使得python在64系统上用sikuli操作flash。在32位上还是用jpype吧!
  最后我们做个简单的总结吧:
  我们上面使用Autoit与sikuli方法操作flash,2种方法各有特色吧!当然可能还有其他更好更方便的方法操作flash,希望知道的大神们能写出来~~
22/2<12
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号