Sikuli:for循环/if else语句不正常
我在Sikuli里有一段代码,用来执行复制和粘贴的任务。我希望当caption.png这个文件不存在的时候,能执行“if not exists”里面的操作。但是有时候即使这个文件确实不存在,它还是会去找,结果报错说“找不到caption.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)
我试了下面的代码,它是有效的,但还有其他地方不太正常:有时候它会随机跳过一个索引。我搞不清楚为什么会这样。
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
你是在sikuli-IDE里尝试做这个吗?这里的问题是,有时候它不会提供很好的错误追踪信息。
在你的第二个例子中,你似乎完全跳过了一个索引,可能是因为没有找到标题,所以什么都没执行,直接跳到下一个循环。这就导致了这个循环没有输出,因为所有的代码都在一个条件判断里,而这个判断是用来重新检查已经确定存在的东西。
我觉得第一个部分的问题是你没有找到匹配项,然后在调用click()
时失败了(而错误追踪信息也没什么帮助)。exists()
会返回一个匹配项,同时也会为getLastMatch()
设置值。你可以尝试用exists()
返回的匹配项设置一个局部变量,或者在else语句中使用getLastMatch().click()
来点击找到的区域(大概就是你的“caption.png”)。
你也可以尝试在exists()
这一行指定一个等待时间。
最后,你可以尝试把每个图片设置为一个模式,并使用相似度来缩小结果到一个单一的匹配项。
没有截图或关于屏幕上显示内容的信息,很难给出明确的答案,也不知道屏幕上可能有多少个相同的图片。我现在不能评论,但如果你能提供更多信息,我可以修改这个回答,给出更具体的解答。