← Back to team overview

sikuli-driver team mailing list archive

[Bug 1381945] Re: The With keyword is not reliable

 

confirmed: bug in 1.0.1

fixed in 1.1.0:

--- testscript:
reg = Region(0,0,100,100)
reg.setAutoWaitTimeout(1)
print "reg.TO:", reg.getAutoWaitTimeout()

with reg:
  print "TO:", getAutoWaitTimeout()
  start = time.time()
  i = 0
  while not exists(Pattern("some_not_visible.png").exact()):
    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.


** Changed in: sikuli
       Status: New => In Progress

** Changed in: sikuli
   Importance: Undecided => Medium

** Changed in: sikuli
     Assignee: (unassigned) => RaiMan (raimund-hocke)

** Changed in: sikuli
    Milestone: None => 1.2.0

** Summary changed:

- 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

** Changed in: sikuli
   Importance: Medium => Critical

** Changed in: sikuli
    Milestone: 1.2.0 => 1.1.0

-- 
You received this bug notification because you are a member of Sikuli
Drivers, which is subscribed to Sikuli.
https://bugs.launchpad.net/bugs/1381945

Title:
  [1.0.1] Jython With: setAutoWaitTimeout ignored - fixed in 1.1.0

Status in Sikuli:
  Fix Committed

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 dispSchemeListRegion(sTestId,iDelay):
      match = findLog(sTestId,pDispScreenTitleBar)

      if(match):
          x = match.getX()
          y = match.getY()
      else:
          exit(0)
      reg = Region(x,y,483,217)
      rDispSchemeList = Region(reg.offset(463,429))

      rDispSchemeList.setAutoWaitTimeout(iDelay)
      return rDispSchemeList

  -----------------------------------------------------------------------------
  rDispSchemeList = dispSchemeListRegion(sTestId,0.5)

  #the wait delay of .5 seconds is not applied to the the while loop

  with rDispSchemeList:
      while not exists(pDispSchemeScrollBarBottom):
           try:
               rDispSchemeList.click(pImage)
               type(Key.ENTER)
               break
           except FindFailed:
                  type(Key.DOWN)

  #however, in the following example, it is and the whole block runs
  much faster

  while not rDispSchemeList.exists(pDispSchemeScrollBarBottom):
      try:
          rDispSchemeList.click(pImage)
          type(Key.ENTER)
          break
      except FindFailed:
          type(Key.DOWN)

To manage notifications about this bug go to:
https://bugs.launchpad.net/sikuli/+bug/1381945/+subscriptions


References