Sikuli:for loop / if else语句无法正常工作

时间:2014-08-04 14:56:42

标签: python for-loop sikuli

我在Sikuli中有以下代码可以复制和粘贴任务。当caption.png不存在时,我希望它执行“if not exists”内的操作,但有时即使它不存在,它仍然试图找到它并返回一个错误,上面写着“找不到标题”。 PNG”。

     for idx in range(1, 77):
         if not exists("caption.png"):
              click("1406907972716.png")
              type(Key.PAGE_DOWN)        
              print "skip" + str(idx)
         else: 
              click("caption.png")
              type(Key.F2)
              type("a", KeyModifier.CTRL)
              type("c", KeyModifier.CTRL)
              click("CLICKBOX-4.PNG")
              click("BOX2-4.PNG")
              type("a", KeyModifier.CTRL)
              type(Key.DELETE)
              type("v", KeyModifier.CTRL)
              type(str(idx))
              type(Key.HOME)
              for i in range(25):
                  type(Key.DELETE)
              click("1406907972716.png")
              type(Key.PAGE_DOWN)

我尝试了以下内容并且它有效,但其他方法无法正常工作:有时它会随机跳转一个idx。无法弄清楚原因:

    for idx in range(1, 77):
        if not exists("caption.png"):
            click("1406907972716.png")
            type(Key.PAGE_DOWN)        
            print "skip" + str(idx)
        else: 
            if exists("caption.png"):
                click("caption.png")
                type(Key.F2)
                type("a", KeyModifier.CTRL)
                type("c", KeyModifier.CTRL)
                click("CLICKBOX-4.PNG")
                click("BOX2-4.PNG")
                type("a", KeyModifier.CTRL)
                type(Key.DELETE)
                type("v", KeyModifier.CTRL)
                type(str(idx))
                type(Key.HOME)
                for i in range(25):
                    type(Key.DELETE)
                click("1406907972716.png")
                type(Key.PAGE_DOWN)

1 个答案:

答案 0 :(得分:0)

你是否想在sikuli-IDE中这样做?问题在于并不总是提供良好的追溯。

在你的第二个例子中,你似乎完全跳过一个索引,因为找不到标题所以没有任何执行,它会跳转到下一个迭代。这是在没有输出的情况下跳过迭代,因为所有代码都在if块中,它重新检查已经确定为已存在的东西。

我认为第一部分的问题是你没有找到匹配,然后在click()电话失败(并且追溯并没有最终帮助)。 exists()返回匹配项,并设置getLastMatch()的值。您可以尝试使用exists()返回的匹配设置局部变量,也可以使用getLastMatch().click()设置else子句中的点击以查找找到的区域(可能是您的" caption.png")

您也可以尝试在exists()行中指定等待时间。

最后,您可以尝试将每个图像设置为图案,并使用相似性将结果削减为一个匹配。

如果没有屏幕截图或有关屏幕上的内容以及屏幕上可能有多少图像的信息,很难给出确定的答案。我暂时无法发表评论,但如果您能提供更多信息,我可以编辑此答案以包含更具体的答案。