Sikuli/Python中的循环问题

Sikuli/Python中的循环问题,python,sikuli,Python,Sikuli,不知道我哪里出了问题: mm = list(r.findAll(rButton))# find all rButtons on main screen print len(mm) #check how many are detected for x in range(0,len(mm)): r.click(mm[x]) if(not r.exists(rButtonDisabled)): print "this is a test" r.wait(

不知道我哪里出了问题:

mm = list(r.findAll(rButton))# find all rButtons on main screen
print len(mm) #check how many are detected
for x in range(0,len(mm)):
    r.click(mm[x])
    if(not r.exists(rButtonDisabled)):
        print "this is a test"
        r.wait(BeginTask,FOREVER)
        r.click(BeginTask)
        r.wait(rButton,FOREVER)
    else: click(Cancel)
有两个屏幕。让我们称之为主屏幕和屏幕2。在主屏幕上有相同的按钮,rButton。我想找到所有可见的RB按钮,然后开始单击它们。理想情况下,我想让它点击第一个RB按钮,然后进入第二屏,如果第二屏上的按钮被禁用,点击取消,这会将我们移回主屏,然后转到主屏上的第二个RB按钮,再次进入第二屏。根据主屏幕上的RB按钮,屏幕2上的按钮可以被禁用或启用


我的代码没有达到这个效果。我不确定哪里出错。

我不确定您是如何定义区域“r”的,但默认情况下,Sikuli不会在操作系统固有的屏幕之外进行搜索。您需要首先让sikuli找到另一个屏幕,然后定义该屏幕的边界

正如现在所显示的,无论您打算在哪个屏幕上搜索区域“r”。。。您应该分别定义这两个屏幕,否则Sikuli将不知道如何切换屏幕以查找所需的按钮。例如,您可以使用Screen类定义哪个屏幕是哪个屏幕--

numScreens=getNumberScreens()
r=SCREEN#在所有大写字母中,这是操作系统固有的整个屏幕的保留字
#也可以使用r=屏幕(0)
如果numScreens>0,请确保第二个屏幕由sikuli计数
r2=屏幕(1).getBounds()
否则:引发相应的错误
#这是您的代码,对多个监视器进行了一些调整
#在主屏幕上
mm=列表(r.findAll(rButton))#在主屏幕上查找所有rButton
打印长度(mm)#检查检测到多少
对于范围(0,len(mm))内的x:
r、 单击(毫米[x])
#在辅助屏幕上
如果(不存在r2)(rButtonDisabled)):
打印“这是一个测试”
r2.等待(开始,永远)
r2.单击(开始任务)
#返回主屏幕
r、 等待(巴顿,永远)
#单击辅助屏幕上的取消按钮

其他:r2。点击(取消)#你能告诉我们你的代码有多远吗?它在哪里断裂?您得到的错误是什么?
numScreens = getNumberScreens()
r = SCREEN #in all caps, this is the reserve word for the whole screen native to the OS
    #can also use r = Screen(0)
if numScreens > 0 #make sure second screen was counted by sikuli
    r2 = Screen(1).getBounds() 
else: raise the appropriate error

#Here's your code with some adjustments for multiple monitors
#on main screen
mm = list(r.findAll(rButton))# find all rButtons on main screen
print len(mm) #check how many are detected
for x in range(0,len(mm)):
    r.click(mm[x])
    #on secondary screen
    if(not r2.exists(rButtonDisabled)):
        print "this is a test"
        r2.wait(BeginTask,FOREVER)
        r2.click(BeginTask)
        #back to main screen
        r.wait(rButton,FOREVER)
    #click the cancel button on secondary screen
    else: r2.click(Cancel) # <-- the defining region was missing here in your original code