def stop(event):
popup("Done")
event.region.stopObserver()
pass
wmp = App("C:\\Program Files\\Windows Media Player\\wmplayer")
wmp.open()
wait(2)
click(find(Pattern("play_button.png").exact()))
popup("Started Playing")
wait(3)
onAppear(Pattern("stop_button.png").exact(),stop)
observe(FOREVER)
在上面的代码片段中,我尝试在windows media player中播放一个mp3文件并观察它直到出现停止按钮,在它出现后,它会显示弹出消息“Done”。当我第一次运行此程序时,弹出消息显示一次,当我再次运行它时,它会显示两次弹出消息,第三次显示弹出消息三次。有人可以解释一下为什么会发生这种情况,虽然我在代码片段中只提供了一个popup("Done")
吗?
答案 0 :(得分:3)
我的猜测是,这是IDE中的某种缓存问题: 在执行脚本之后/之前似乎没有重置默认区域,因此每次运行脚本时,都会再次添加onAppear侦听器,这会同时导致多个事件。
这只是猜测,但如果我是对的,你可以使用
来解决这个问题Region screenRegion = Region.create(Screen(0).x, Screen(0).y, Screen(0).w, Screen(0).h)
screenRegion.onAppear(Pattern("stop_button.png").exact(),stop)
screenRegion.observe(FOREVER)
这将创建一个新的Region,每个脚本都运行,而不是将onAppear监听器应用于默认的Region。
答案 1 :(得分:1)
我无法在我的环境中重现这个问题,但根据描述我有2个建议:
OR
答案 2 :(得分:0)
您应该将onAppear侦听器限制为特定区域以提高性能
终止程序时必须停止观察者。 region.stopObserver()
根据Sikuli文档,您应该使用observe(background=True)
代替observe(FOREVER)