欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何在Python中轻松操作Sikuli:入门与实践指南

最编程 2024-02-23 21:15:17
...

Sikuli是目前用来做自动化测试的一个很好的工具,笔者这段时间由于工作需要,研究了一下这方面的东西,写出来和大家分享。

Sikuli可以结合Python的unittest框架来进行测试,具体地,就是在sikuli工程中直接嵌入Pythonunittest的代码即可。因为本质上Sikuli工程中可以插入任何可以在Jython上运行的Python代码。

但是需要注意两个地方:

1.运行unittest脚本的时候,不能使用默认的方式,应该使用下面的代码来运行:

unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(YOUR_TEST_CLASS))

否则,unittest框架默认会在执行完所有case后退出程序,会导致sikuli报错。

2.考虑关闭Sikuli的输出。否则当输出太多时,会把一些unittest的测试结果给刷掉,另外Sikuli的输入太多,大部分是没用的信息。笔者暂时没有找到关闭输出的方法,不过有另外一个方式,Sikuli在执行时提供一个命令,可以配置Sikuli的log输出文件。这样可以让Sikuli把自己的log输出到单独的文件中,这样在命令行中运行Sikuli脚本的时候,只会看到unittest的输出,不会看到Sikuli的输出了。

下面是一个Sikulidemo,不能直接运行,只是一个示例。sikuli_browser是笔者自己写的一个用来测试浏览器Python类,该类继承了unittest.TestCase,具体代码就不给出来了。

importrandom

importunittest

importos

importsikuli_browser

classTestSequenceFunctions(sikuli_browser.BrowserTest):

def__init__(self,*args,**kwargs):

super(TestSequenceFunctions,self).__init__(*args,**kwargs)

self.obj_close_window="common/obj_close_window.png"

self.obj_start="common/obj_start.png"

self.obj_start_browser="common/obj_start_browser.png"

self.obj_task_browser="common/obj_task_browser.png"

self.obj_task_close_window="common/obj_task_close_window.png"

self.obj_task_close_all_windows="common/obj_task_close_all_windows.png"

self.obj_new_tab="common/obj_new_tab.png"

self.obj_addr="common/obj_addr.png"

self.obj_menu="common/obj_menu.png"

self.obj_home="common/obj_home.png"

self.obj_min="common/obj_min.png"

self.obj_restore="common/obj_restore.png"

self.obj_favorite="common/obj_favorite.png"

self.obj_refresh="common/obj_refresh.png"

defsetUp(self):

self.close_browser()

hover(Location(,))

self.open_browser()

ifself.exists(".png",2):

self.click(".png")

sleep(1)

deftearDown(self):

hover(Location(,))

def(self):

pass

def(self):

pass

def(self):

pass

click(".png")

unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions))