Java Try-在给定的时间内使用Python除外
我正在使用Marathon(Java桌面应用程序测试工具)自动化回归测试。Marathon使用Jython,因此我可以使用Java库和Python库。当我的脚本填写某些字段时,各种字段会根据我在前面字段中输入的值显示(或不显示)。由于明显的原因,我需要跳过不存在的字段。当字段被禁用但仍然存在时,这很好,因为我可以使用Java Try-在给定的时间内使用Python除外,java,python,jcomponent,Java,Python,Jcomponent,我正在使用Marathon(Java桌面应用程序测试工具)自动化回归测试。Marathon使用Jython,因此我可以使用Java库和Python库。当我的脚本填写某些字段时,各种字段会根据我在前面字段中输入的值显示(或不显示)。由于明显的原因,我需要跳过不存在的字段。当字段被禁用但仍然存在时,这很好,因为我可以使用 if Component.isEnabled(): #do something else: #do something 问题是当组
if Component.isEnabled():
#do something
else:
#do something
问题是当组件不存在时。在Java中,是否有任何方法可以测试组件的存在?例如,Component.exists()
可以满足我的需要,但是Component类中没有这样的方法
我更愿意通过使用
if Component.exists():
语句来解决我的问题,但我可以使用try绕过它,除了block。但是,这会导致脚本的主要执行时间问题。在抛出异常之前,它会尝试查找组件约2或3分钟。我能看到这个问题的唯一方法是,如果有类似的语句,请尝试x秒,如果找不到组件,请继续。有没有办法限制您尝试任何给定语句的时间?我发现一些代码在您的代码中抛出超时异常,作为对另一个Stackoverflow问题的回答:,但是它只在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
这将尝试“做点什么”60秒,如果执行时间超过60秒,则继续执行…这是问题的解决方案:
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在Java端,您可以使用FutureTask
和执行器FutureTask
实现了Future
,它有一个带超时的.get()
(如果超时,抛出TimeoutException
),我很感激这个响应,但不幸的是我没有Linux机器。这个例子适用于我所寻找的。然而,似乎我无法捕捉错误名称。例如,如果您捕获如下异常但异常为e:
,并执行打印(e)
,则不会打印任何内容。