我正在使用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
,如果找不到组件则继续。有没有办法限制你尝试任何给定陈述的时间?
答案 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