尝试 - 在Python中除了给定的时间

时间:2014-03-20 15:15:27

标签: java python jcomponent

我正在使用Marathon(Java桌面应用程序测试工具)来自动化回归测试。 Marathon使用Jython,因此我可以使用Java库和Python库。当我的脚本填写某些字段时,会根据我在之前字段中输入的值显示(或不显示)各个字段。由于显而易见的原因,我需要跳过那些不存在的字段。当字段被禁用但仍在那里时,这很好,因为我可以使用

    if Component.isEnabled():
        #do something
    else:
        #do something

问题在于组件不存在。在Java中,有没有办法测试组件的存在?例如,Component.exists()符合我的需要,但组件类中没有这样的方法。

我更愿意使用if Component.exists():语句来解决我的问题,但我可以使用try来解决它,除了块。但是,这会导致脚本的主要执行时间问题。它会在抛出异常之前尝试查找组件约2或3分钟。我可以看到这个问题的唯一方法是,如果有某种语句如try for x seconds,如果找不到组件则继续。有没有办法限制你尝试任何给定陈述的时间?

2 个答案:

答案 0 :(得分:0)

我找到了一些代码,可以在代码中抛出一个超时异常作为另一个Stackoverflow问题的答案:What should I do if socket.setdefaulttimeout() is not working?,但它只适用于linux-machines,如链接中所述。

具体地:

import signal, time

class Timeout():
  """Timeout class using ALARM signal"""
  class Timeout(Exception): pass

  def __init__(self, sec):
    self.sec = sec

  def __enter__(self):
    signal.signal(signal.SIGALRM, self.raise_timeout)
    signal.alarm(self.sec)

  def __exit__(self, *args):
    signal.alarm(0) # disable alarm

  def raise_timeout(self, *args):
    raise Timeout.Timeout()

# Run block of code with timeouts
try:
  with Timeout(60):
    #do something

except Timeout.Timeout:
  #do something else

这将尝试"做某事"持续60秒,如果执行超过60秒则继续......

答案 1 :(得分:0)

这是您问题的解决方案:

import signal
def time_out(self):
    def signal_handler(signum, frame):
        raise Exception("Timed out!")

    signal.signal(signal.SIGALRM, signal_handler)
    signal.alarm(3)  
    all_games = []
    try:
        while True:
            #do what you want to do

    except Exception as msg:
        print msg

3是功能超时的时间

最好的问候,Shlomy