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

Nic*_*k L 5 python java jcomponent

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

    if Component.isEnabled():
        #do something
    else:
        #do something
Run Code Online (Sandbox Code Playgroud)

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

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

Fem*_*ich 2

我发现一些代码可以在代码中引发超时异常,作为另一个 Stackoverflow 问题的答案:如果 socket.setdefaulttimeout() 不起作用,我该怎么办?,但是它仅适用于链接中所述的 linux 机器。

具体来说:

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
Run Code Online (Sandbox Code Playgroud)

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