如何保存Sikuli执行结果

上一篇 / 下一篇  2010-05-12 14:58:43 / 个人分类:Sikuli

目前在进行基于ANDROID手机平台的软件进行测试,原来以为没有可以自动化的工具,后来公司的CTO推荐了一款软件Sikuli(http://sikuli.org/index.shtml),这款软件可以借助ANDROID模拟器来完成自动化的测试.

1. 具体的使用步骤请参见: http://sikuli.org/documentation.shtml
2. 使用SIKULI的一些技巧请参见:引用自http://foolab.spaces.live.com/blog/cns!AF96E3E01D4605AA!222.entry

一些特别注意事项

  1. 为了提高有效性 你应该尽量使用find进行处理
      在使用find时可以使用setAutoWaitTimeout进行超时设置,之后根据返回结果
      进行错误处理
  2. 在选取图像时应该尽量包含能够更容易区分其它相似区域的图像部分
     
  3. 为了进一步提高查找精确性可以先查找某个大的区域,在查找其子区域如:
      item = find(img).inside().find(img)
  4. 为了进行选择查找,可以使用图像集合操作 如:
      set=[img1,img2,…]
      for item in set:
       if find(item):
        break
  5. 可以使用jython支持的大部分库,记得在最前面添加导入,如使用操作xml
      from xml.dom import minidom
      xmldoc = minidom.parse(filename)
  6. 测试时为了中断后续操作记住使用 Ctrl + Shift + C
  7. 在使用Key 类成员时记得使用”+”连接,不要混淆KEY_ALT…等使用”,”分割
      不然将导致程序中断
  8. 在window下可以使用Sikuli-IDE.bat name.skl 命令行方式运行脚本
  9. 保存目录下存在很多不使用的png文件等所有设计完成可以使用另存其它文件名,这样将只保存有效的文件。
  10. 在window 下采用  type(Key.F4,KEY_ALT) 关键当前窗口是个不错的选择
  11. 你可以首先查找特定醒目项,之后根据信息构造新的Match对象,偏移一定距离定位新的位置 如:
     item = find(img)
     click(Match(item.getX(),item.getY(),10,20,1.0))

3. 我们一直使用SIKULI IDE 来执行测试, 使用IDE执行测试的弊端是测试结果没有办法保存下来,下次执行就会把上次的执行结果覆盖掉, 如何将测试的结果保存下来呢?
事前准备: SIKULI IDE安装好.
(1)方案一:在测试脚本中加入print语句来导出except
参见:https://answers.launchpad.net/sikuli/+question/107729

In the IDE:
you can use print to get some information:

print find(img) # gives some info on the match object

or more general
m = find(img); print find.region # save match in m and print it using the last match saved in find.region

you can say:

print "checkpoint charly: ", m # prints a text and the match

.... many possibilities, that can be extended, by all the things that can be done with python.

When saving the script. as an .skl (executable) running it from commandline, your prints will go to sysout that can be piped to a file to save the run.


(2)方案二:使用PYTHON的UNITTEST来运行测试,并将结果保存下来.
参见:https://answers.launchpad.net/sikuli/+question/100436

Running tests using Python's unittest

The following method works on Mac and Windows.

1) Write a real unit test using PyUnit.

import sys
import unittest
setAutoWaitTimeout(5000)

class MyTests(unittest.TestCase):
   def setUp(self):
      switchApp("/Applications/Safari.app")
      # @todo: do similar for IE on Windows

   def tearDown(self):
      pass

   def testNewTab(self):
      type("t", KEY_META)
      type("https://answers.launchpad.net/sikuli/+question/99979\n")
      m = find("sikuli-logo.png")
      assert(m is not None and m.getScore() > 0.9)

suite = unittest.TestLoader().loadTestsFromTestCase(MyTests)
unittest.TextTestRunner(verbosity=2).run(suite)

2) Save your unit test as a Python script. in a folder with a matching name and .sikuli suffix (e.g., mytest.sikuli/mytest.py).

3) Download the cross-platform, command line tool version of Sikuli fromhttp://groups.csail.mit.edu/uid/sikuli/download.shtml.(目前这个地址没有下载command line tool的链接了,你可以从我的附件中下载)

4) Extract the contents of the command line tool zip.

On Windows:

4) Download the Windows IDE version of Sikuli.

5) Extract the Lib/ folder from the sikuli-ide-full.jar.

6) Move the Lib/ folder into the same directory as the sikuli-script.jar from the command line tool version of Sikuli.

7) Execute your test script. like so (assuming cygwin):

export PATH=$PATH:./win32
java -Dpython.path=Lib/ -jar sikuli-script.jar mytest.sikuli 2> test-output.log

8) The test-output.log contains the results of the unit test run while stdout shows the sikuli logging info.

On Mac:

4) Download the Mac IDE version of Sikuli.

5) Extract the Lib/ folder from the Sikuli.app/Contents/Resources/Java/sikuli-script.jar.

6) Move the Lib/ folder into the same directory as the sikuli-script.jar from the command line tool version of Sikuli.

7) Execute your test script. like so:

java -d32 -Dpython.path=Lib/ -jar sikuli-script.jar mytest.sikuli 2> test-output.log

8) The test-output.log contains the results of the unit test run while stdout shows the sikuli logging info.


 但上述的方法我始终没有运行成功,因为系统总是报以下错误:
java.io.IOException: Unable to find library META-INF/lib/VDictProxy.dll on classpath
    at com.wapmx.nativeutils.jniloader.DefaultJniExtractor.extractResource(DefaultJniExtractor.java:95)
    at com.wapmx.nativeutils.jniloader.DefaultJniExtractor.extractJni(DefaultJniExtractor.java:81)
    at com.wapmx.nativeutils.jniloader.NativeLoader.loadLibrary(NativeLoader.java:43)
    at edu.mit.csail.uid.VDictProxy.<clinit>(VDictProxy.java:18)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.python.core.SyspathJavaLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.python.core.Py.findClassEx(Unknown Source)
    at org.python.core.SysPackageManager.findClass(Unknown Source)
    at org.python.core.PackageManager.findClass(Unknown Source)
    at org.python.core.SysPackageManager.findClass(Unknown Source)
    at org.python.core.PyJavaPackage.__findattr__(Unknown Source)
    at org.python.core.imp.importFromAs(Unknown Source)
    at org.python.core.imp.importFrom(Unknown Source)
    at python.edu.mit.csail.uid.Sikuli$py.f$0(D:\Testtools\sikuli\sikuli-script\sikuli-script.jar\Lib/python/edu/mit/csail/uid/Sikuli.py:11)
    at python.edu.mit.csail.uid.Sikuli$py.call_function(D:\Testtools\sikuli\sikuli-script\sikuli-script.jar\Lib/python/edu/mit/csail/uid/Sikuli.py)
    at org.python.core.PyTableCode.call(Unknown Source)
    at org.python.core.PyCode.call(Unknown Source)
    at org.python.core.imp.createFromCode(Unknown Source)
    at org.python.core.imp.createFromSource(Unknown Source)
    at org.python.core.ZipFileImporter$ZipFileLoader.load_module(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.python.core.PyReflectedFunction.__call__(Unknown Source)
    at org.python.core.PyMethod.__call__(Unknown Source)
    at org.python.core.PyObject.__call__(Unknown Source)
    at org.python.core.imp.loadFromLoader(Unknown Source)
    at org.python.core.imp.find_module(Unknown Source)
    at org.python.core.PyModule.impAttr(Unknown Source)
    at org.python.core.imp.import_next(Unknown Source)
    at org.python.core.imp.import_logic(Unknown Source)
    at org.python.core.imp.import_name(Unknown Source)
    at org.python.core.imp.importName(Unknown Source)
    at org.python.core.ImportFunction.load(Unknown Source)
    at org.python.core.ImportFunction.__call__(Unknown Source)
    at org.python.core.PyObject.__call__(Unknown Source)
    at org.python.core.__builtin__.__import__(Unknown Source)
    at org.python.core.imp.importAll(Unknown Source)
    at org.python.pycode._pyx0.f$0(<string>:1)
    at org.python.pycode._pyx0.call_function(<string>)
    at org.python.core.PyTableCode.call(Unknown Source)
    at org.python.core.PyCode.call(Unknown Source)
    at org.python.core.Py.runCode(Unknown Source)
    at org.python.core.Py.exec(Unknown Source)
    at org.python.util.PythonInterpreter.exec(Unknown Source)
    at edu.mit.csail.uid.ScriptRunner.runPython(ScriptRunner.java:29)
    at edu.mit.csail.uid.SikuliScript.main(SikuliScript.java:754)
java.io.IOException: Unable to find library META-INF/lib/ScreenMatchProxy.dll on classpath
    at com.wapmx.nativeutils.jniloader.DefaultJniExtractor.extractResource(DefaultJniExtractor.java:95)
    at com.wapmx.nativeutils.jniloader.DefaultJniExtractor.extractJni(DefaultJniExtractor.java:81)
    at com.wapmx.nativeutils.jniloader.NativeLoader.loadLibrary(NativeLoader.java:43)
    at edu.mit.csail.uid.ScreenMatchProxy.<clinit>(ScreenMatchProxy.java:11)
    at edu.mit.csail.uid.SikuliScript.<init>(SikuliScript.java:105)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.python.core.PyReflectedConstructor.__call__(Unknown Source)
    at org.python.core.PyJavaInstance.__init__(Unknown Source)
    at org.python.core.PyJavaClass.__call__(Unknown Source)
    at org.python.core.PyObject.__call__(Unknown Source)
    at python.edu.mit.csail.uid.Sikuli$py.f$0(D:\Testtools\sikuli\sikuli-script\sikuli-script.jar\Lib/python/edu/mit/csail/uid/Sikuli.py:15)
    at python.edu.mit.csail.uid.Sikuli$py.call_function(D:\Testtools\sikuli\sikuli-script\sikuli-script.jar\Lib/python/edu/mit/csail/uid/Sikuli.py)
    at org.python.core.PyTableCode.call(Unknown Source)
    at org.python.core.PyCode.call(Unknown Source)
    at org.python.core.imp.createFromCode(Unknown Source)
    at org.python.core.imp.createFromSource(Unknown Source)
    at org.python.core.ZipFileImporter$ZipFileLoader.load_module(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.python.core.PyReflectedFunction.__call__(Unknown Source)
    at org.python.core.PyMethod.__call__(Unknown Source)
    at org.python.core.PyObject.__call__(Unknown Source)
    at org.python.core.imp.loadFromLoader(Unknown Source)
    at org.python.core.imp.find_module(Unknown Source)
    at org.python.core.PyModule.impAttr(Unknown Source)
    at org.python.core.imp.import_next(Unknown Source)
    at org.python.core.imp.import_logic(Unknown Source)
    at org.python.core.imp.import_name(Unknown Source)
    at org.python.core.imp.importName(Unknown Source)
    at org.python.core.ImportFunction.load(Unknown Source)
    at org.python.core.ImportFunction.__call__(Unknown Source)
    at org.python.core.PyObject.__call__(Unknown Source)
    at org.python.core.__builtin__.__import__(Unknown Source)
    at org.python.core.imp.importAll(Unknown Source)
    at org.python.pycode._pyx0.f$0(<string>:1)
    at org.python.pycode._pyx0.call_function(<string>)
    at org.python.core.PyTableCode.call(Unknown Source)
    at org.python.core.PyCode.call(Unknown Source)
    at org.python.core.Py.runCode(Unknown Source)
    at org.python.core.Py.exec(Unknown Source)
    at org.python.util.PythonInterpreter.exec(Unknown Source)
    at edu.mit.csail.uid.ScriptRunner.runPython(ScriptRunner.java:29)
    at edu.mit.csail.uid.SikuliScript.main(SikuliScript.java:754)
java.io.IOException: Unable to find library META-INF/lib/Win32Util.dll on classpath
    at com.wapmx.nativeutils.jniloader.DefaultJniExtractor.extractResource(DefaultJniExtractor.java:95)
    at com.wapmx.nativeutils.jniloader.DefaultJniExtractor.extractJni(DefaultJniExtractor.java:81)
    at com.wapmx.nativeutils.jniloader.NativeLoader.loadLibrary(NativeLoader.java:43)
    at edu.mit.csail.uid.Win32Util.<clinit>(Win32Util.java:10)
    at edu.mit.csail.uid.SikuliScript.<init>(SikuliScript.java:111)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.python.core.PyReflectedConstructor.__call__(Unknown Source)
    at org.python.core.PyJavaInstance.__init__(Unknown Source)
    at org.python.core.PyJavaClass.__call__(Unknown Source)
    at org.python.core.PyObject.__call__(Unknown Source)
    at python.edu.mit.csail.uid.Sikuli$py.f$0(D:\Testtools\sikuli\sikuli-script\sikuli-script.jar\Lib/python/edu/mit/csail/uid/Sikuli.py:15)
    at python.edu.mit.csail.uid.Sikuli$py.call_function(D:\Testtools\sikuli\sikuli-script\sikuli-script.jar\Lib/python/edu/mit/csail/uid/Sikuli.py)
    at org.python.core.PyTableCode.call(Unknown Source)
    at org.python.core.PyCode.call(Unknown Source)
    at org.python.core.imp.createFromCode(Unknown Source)
    at org.python.core.imp.createFromSource(Unknown Source)
    at org.python.core.ZipFileImporter$ZipFileLoader.load_module(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.python.core.PyReflectedFunction.__call__(Unknown Source)
    at org.python.core.PyMethod.__call__(Unknown Source)
    at org.python.core.PyObject.__call__(Unknown Source)
    at org.python.core.imp.loadFromLoader(Unknown Source)
    at org.python.core.imp.find_module(Unknown Source)
    at org.python.core.PyModule.impAttr(Unknown Source)
    at org.python.core.imp.import_next(Unknown Source)
    at org.python.core.imp.import_logic(Unknown Source)
    at org.python.core.imp.import_name(Unknown Source)
    at org.python.core.imp.importName(Unknown Source)
    at org.python.core.ImportFunction.load(Unknown Source)
    at org.python.core.ImportFunction.__call__(Unknown Source)
    at org.python.core.PyObject.__call__(Unknown Source)
    at org.python.core.__builtin__.__import__(Unknown Source)
    at org.python.core.imp.importAll(Unknown Source)
    at org.python.pycode._pyx0.f$0(<string>:1)
    at org.python.pycode._pyx0.call_function(<string>)
    at org.python.core.PyTableCode.call(Unknown Source)
    at org.python.core.PyCode.call(Unknown Source)
    at org.python.core.Py.runCode(Unknown Source)
    at org.python.core.Py.exec(Unknown Source)
    at org.python.util.PythonInterpreter.exec(Unknown Source)
    at edu.mit.csail.uid.ScriptRunner.runPython(ScriptRunner.java:29)
    at edu.mit.csail.uid.SikuliScript.main(SikuliScript.java:754)
test_01_emailVal (main.callspark736) ... ERROR
test_02_emailVal2 (main.callspark736) ... ERROR
test_03_emailVal3 (main.callspark736) ... ERROR
test_04_emailVal4 (main.callspark736) ... ERROR
test_05_passwordVal (main.callspark736) ... ERROR
test_06_passwordVal2 (main.callspark736) ... ERROR
test_07_loginSuc (main.callspark736) ... ERROR
test_08_loginFail (main.callspark736) ... ERROR
test_09_loginFail2 (main.callspark736) ... ERROR
test_10_duplication (main.callspark736) ... ERROR
test_11_location (main.callspark736) ... ERROR
test_12_about (main.callspark736) ... ERROR
test_13_back (main.callspark736) ... ERROR
test_14_LoginSearch (main.callspark736) ... ERROR
test_15_AnoSearch (main.callspark736) ... ERROR
test_16_profileLinked (main.callspark736) ... ERROR
test_17_profileEdit (main.callspark736) ... ERROR
test_18_searchIcon (main.callspark736) ... ERROR
test_19_errorMes1 (main.callspark736) ... ERROR

======================================================================
ERROR: test_01_emailVal (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "e:\project\callspark\callspark736.sikuli\callspark736.py", line 19, in setUp
    wait("callicon.png")
  File "D:\Testtools\sikuli\sikuli-script\sikuli-script.jar\Lib/python/edu/mit/csail/uid/Sikuli.py", line 293, in wait
java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: edu.mit.csail.uid.ScreenMatchProxy.screenMatch(Ljava/lang/String;Ljava/lang/String;DI)[Ledu/mit/csail/uid/Match;

......
----------------------------------------------------------------------
Ran 19 tests in 10.969s

FAILED (errors=19)

 查了一下原因,是因为在COMMAND LINE TOOL中的sikuli-script.jar包/META-INF/lib文件夹中缺少了
3个dll(
VDictProxy.dll,Win32Util.dll,ScreenMatchProxy.dll)文件.
 尝试将
sikuli-script.jar解压,然后将缺少的三个DLL文件拷贝到META-INF/lib文件夹中,然后重新生成sikuli-script.jar包, 然后再次按上述步骤来执行脚本,结果报找不到SIKULI-SCRIPT类错误.
 后续待研究..

(3)方案三:使用command line命令来运行脚本.
  • 首先用SIKULI IDE 打开脚本,然后按以下格式进行调整

import unittest
setBundlePath("full path to your saved youNameIt.sikuli") # tells the Sikuli functions where to find the pictures(此处应特别注意,如果你不给出路径,在执行的过程中SIKULI会从临时文件夹中找图片,在执行过程中会报出无法LOAD图片的错误(can't lode file ***.png))
class MyTests(unittest.TestCase):
   def setUp(self):
      switchApp("Safari")
      # on Windows: e.g. switchApp("google"), to switch to a running Chrome Browser

   def tearDown(self):
      pass

   def testNewTab(self):
      type("t", KEY_CMD) # Win: KEY_CTRL (KEY_META. gives Error)
      paste("https://answers.launchpad.net/sikuli/+question/100436") # this question ;-)
      type(Key.ENTER) # no errors with Key class in .skl
      m = find(<image>) # the captured Sikuli logo
      assert(m is not None and m.getScore() > 0.9)

suite = unittest.

TestLoader().loadTestsFromTestCase(MyTests)#注意MyTests需要替换成自己脚本的类名
unittest.TextTestRunner(verbosity=2).run(suite)

  • 然后单击FILE-EXPORT Executable 命令导出.skl格式的文件.
  • 打开命令行窗口,并定位到SIKULI IDE的安装目录,然后执行以下命令来运行脚本和输出结果

D:\Testtools\sikuli\sikuli-script> Sikuli-IDE.bat E:\MyTests.skl 2> E:\test-outlog.txt
  • 等整个测试执行完毕后,你可以从log文件中看到以下信息

test_01_emailVal (main.callspark736) ... ERROR
test_02_emailVal2 (main.callspark736) ... ERROR
test_03_emailVal3 (main.callspark736) ... ERROR
test_04_emailVal4 (main.callspark736) ... ERROR
test_05_passwordVal (main.callspark736) ... ERROR
test_06_passwordVal2 (main.callspark736) ... ERROR
test_07_loginSuc (main.callspark736) ... ERROR
test_08_loginFail (main.callspark736) ... ERROR
test_09_loginFail2 (main.callspark736) ... ERROR
test_10_duplication (main.callspark736) ... ERROR
test_11_location (main.callspark736) ... ok
test_12_about (main.callspark736) ... ERROR
test_13_back (main.callspark736) ... ERROR
test_14_LoginSearch (main.callspark736) ... ERROR
test_15_AnoSearch (main.callspark736) ... ERROR
test_16_profileLinked (main.callspark736) ... ERROR
test_17_profileEdit (main.callspark736) ... ERROR
test_18_searchIcon (main.callspark736) ... ERROR
test_19_errorMes1 (main.callspark736) ... ERROR

======================================================================
ERROR: test_01_emailVal (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 41, in test_01_emailVal
    assertExist(Pattern("email.png").similar(0.80))
NameError: assertExist

======================================================================
ERROR: test_02_emailVal2 (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 58, in test_02_emailVal2
    assertExist(Pattern("email.png").similar(0.80))
NameError: assertExist

======================================================================
ERROR: test_03_emailVal3 (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 77, in test_03_emailVal3
    assertExist(Pattern("email.png").similar(0.80))
NameError: assertExist

======================================================================
ERROR: test_04_emailVal4 (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 100, in test_04_emailVal4
    assertExist(Pattern("email.png").similar(0.80))
NameError: assertExist

======================================================================
ERROR: test_05_passwordVal (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 117, in test_05_passwordVal
    assertExist("passwordnotmatch.png")
NameError: assertExist

======================================================================
ERROR: test_06_passwordVal2 (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 134, in test_06_passwordVal2
    assertExist("passwordatleast6.png")
NameError: assertExist

======================================================================
ERROR: test_07_loginSuc (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 153, in test_07_loginSuc
    assertExist("logoutpal.png")
NameError: assertExist

======================================================================
ERROR: test_08_loginFail (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 162, in test_08_loginFail
    if find("emailnoword.png").inside().find("black.png"):
AttributeError: 'NoneType' object has no attribute 'inside'

======================================================================
ERROR: test_09_loginFail2 (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 182, in test_09_loginFail2
    if find("emailnoword.png").inside().find("black.png"):
AttributeError: 'NoneType' object has no attribute 'inside'

======================================================================
ERROR: test_10_duplication (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 210, in test_10_duplication
    assertExist("sameuser.png")
NameError: assertExist

======================================================================
ERROR: test_12_about (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 232, in test_12_about
    assertExist("aboutpal.png")
NameError: assertExist

======================================================================
ERROR: test_13_back (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 246, in test_13_back
    assertExist("searchtext.png")
NameError: assertExist

======================================================================
ERROR: test_14_LoginSearch (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 256, in test_14_LoginSearch
    if find("emailnoword.png").inside().find("black.png"):
AttributeError: 'NoneType' object has no attribute 'inside'

======================================================================
ERROR: test_15_AnoSearch (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 282, in test_15_AnoSearch
    assertExist("bing.png")
NameError: assertExist

======================================================================
ERROR: test_16_profileLinked (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 293, in test_16_profileLinked
    if find("emailnoword.png").inside().find("black.png"):
AttributeError: 'NoneType' object has no attribute 'inside'

======================================================================
ERROR: test_17_profileEdit (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 323, in test_17_profileEdit
    if find("emailnoword.png").inside().find("black.png"):
AttributeError: 'NoneType' object has no attribute 'inside'

======================================================================
ERROR: test_18_searchIcon (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 353, in test_18_searchIcon
    assertExist("searchtext.png")
NameError: assertExist

======================================================================
ERROR: test_19_errorMes1 (main.callspark736)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Program Files\Sikuli\sikuli-ide-full.jar\Lib/unittest.py", line 213, in __call__
  File "F:\temp\tmp-1723462100.sikuli\callspark737.sikuli\callspark737.py", line 363, in test_19_errorMes1
    assertExist("nosearcherr.png")
NameError: assertExist

----------------------------------------------------------------------
Ran 19 tests in 864.156s

FAILED (errors=18)


TAG: Android Output test Sikuli Test result output

 

评分:0

我来说两句

Open Toolbar