[1.0.1] Jython With: setAutoWaitTimeout ignored - fixed in 1.1.0
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
SikuliX |
Fix Committed
|
Critical
|
RaiMan |
Bug Description
Version 1.0.1
I have found that when using the with keyword with a region, it does not always apply to the statements beneath.
For example, in the following code
def dispSchemeListR
match = findLog(
if(match):
x = match.getX()
y = match.getY()
else:
exit(0)
reg = Region(x,y,483,217)
rDispSchemeList = Region(
rDispScheme
return rDispSchemeList
-------
rDispSchemeList = dispSchemeListR
#the wait delay of .5 seconds is not applied to the the while loop
with rDispSchemeList:
while not exists(
try:
break
except FindFailed:
#however, in the following example, it is and the whole block runs much faster
while not rDispSchemeList
try:
break
except FindFailed:
description: | updated |
Changed in sikuli: | |
status: | New → In Progress |
importance: | Undecided → Medium |
assignee: | nobody → RaiMan (raimund-hocke) |
milestone: | none → 1.2.0 |
summary: |
- The With keyword is not reliable + [1.0.1] Jython With: setAutoWaitTimeout ignored - fixed in 1.1.0 |
Changed in sikuli: | |
status: | In Progress → Fix Committed |
importance: | Medium → Critical |
milestone: | 1.2.0 → 1.1.0 |
confirmed: bug in 1.0.1
fixed in 1.1.0:
--- testscript: Timeout( 1) Timeout( )
reg = Region(0,0,100,100)
reg.setAutoWait
print "reg.TO:", reg.getAutoWait
with reg: out() Pattern( "some_not_ visible. png").exact( )):
print "TO:", getAutoWaitTime
start = time.time()
i = 0
while not exists(
print time.time() - start
start = time.time()
i += 1
if i > 1: break
--- prints
reg.TO: 0.5
TO: 0.5
0.667000055313
0.669000148773
--- BTW:
I do not really see an advantage using "with" for just saving some repeated usage of some_region. and having an additional indent level.
In my opinion the explicit usage of the dotted version with the prefixed region makes things much clearer and you then know throughout the script, that an undotted usage like click() addresses the screen.
--- One more thing:
In 1.1.0 there is an alternative for with:
use(some_region)
click() # is processed against some_region
…
use()
click() # now again uses SCREEN
I added this to support switching between screens in a multi monitor environment including remote screens.
But it can as well be used with a region and saves the additional indent.