接前文。
http://pydev.org/manual_101_interpreter.html
eclipse里面安装了pydev后,还有配置要做
1.jython只能import在它的Lib文件夹下的API,所以要解压sikuli-script.jar,然后把sikuli这个文件夹考到jython的Lib文件夹下面,如下图(这一步可以省略)
2. 在eclipse里面,打开window->preference->Pydev->interpreter jython,用右上角的Add来加一个,把jython的jar包加进去,如图
3.再在Forced Buildins tab新建一个sikuli(同1可省略)
4.在jython/lib下面可以看到sikuli的文件
把sikuli-java.jar加到proverties->external libs
然后创建sikuliwarapper,
在脚本的开始加入以下两句,不再调用sikui.Sikuli module
注意images文件夹的位置
importorg.sikuli.basics.SikuliXforJython
from sikuli import *
编译。。。。执行calc.py 文件
5.由于sikuli的log的可读性比较差,所以要做进一步的改进。做这个改进,需要以下的东西:
- a wrapper for the Sikuli functions and classes
- a custom Robot Logger class
全局的sikuli函数,比方说click(), exists(), find()等,实际上是Screen 类使用hack迁移到全局等级。使用如下代码:
10 # =============================================== # 11 # Overwritten sikuli methods # 12 # =============================================== # 13 14 # function for calling native sikuli methods 15 def sikuli_method(name, *args, **kwargs): 16 return sys.modules['sikuli.Sikuli'].__dict__[name](*args, **kwargs) 17 18 # overwritten Screen.exists method 19 def exists(target, timeout=None): 20 addFoundImage(getFilename(target)) 21 return sikuli_method('exists', target, timeout) 22在这里,sikuli_method()是call native Sikuli全局函数。
Exists()是一个重写的例子。
更简单的是Sikuli的类。只要import Sikuli的类,换一个名字,比方说SikuliRegion,如下:
from sikuli.Sikuli import Region as SikuliRegion 23 # =============================================== # 24 # Overwritten sikuli classes # 25 # =============================================== # 26 27 # overwriten Sikuli Region class 28 class Region(SikuliRegion, BaseLogger): 29 30 def click(self, target, modifiers=0): 31 try: 32 return SikuliRegion.click(self, target, modifiers) 33 except FindFailed, e: 34 self.log.html_img("Find Filed", "images/" + getFilename(target)) 35 self.log.screenshot(msg="Region", region=(self.getX(), self.getY(), self.getW(), self.getH())) 36 raise e 37 def exists(self, target, timeout=None): 38 img = getFilename(target) 39 reg = (self.getX(), self.getY(), self.getW(), self.getH()) 40 addFoundImage(img, reg) 41 return SikuliRegion.exists(self, target, timeout)这样就重写了Sikuli的methond。
这个Sikuli wrapper模块是为了收集更多的关于图像的信息,关于哪个图片被搜索,在哪个区域。这个信息被Robot Logger使用。
是一个从Python logging 模块标准的logger类继承的,下面就是添加的部分。
以robot framework的形式来输出信息:"*INFO* Message text"
passed和failed的测试用例的信息
获得需要的regsion的图片,把它们加到Robog的日志。
logger.py
https://github.com/imikemo/Sikuli-and-Robot-Framework-Integration/blob/master/calctest/CalcLib/logger.py