我正在使用 Marathon(Java 桌面应用程序测试工具)来自动化回归测试。 Marathon 使用 Jython,因此我可以使用 Java 库和 Python 库。当我的脚本填写某些字段时,会根据我在先前字段中输入的值显示(或不显示)各种字段。由于显而易见的原因,我需要跳过不存在的字段。当字段被禁用但仍然存在时,这很好,因为我可以使用
if Component.isEnabled():
#do something
else:
#do something
问题是当组件不存在时。在 Java 中有什么方法可以测试组件是否存在?例如,Component.exists()
可以满足我的需求,但组件类中没有这样的方法。
我更愿意使用 if Component.exists():
语句来解决我的问题,但我可以使用 try, except block 来解决它。但是,这会导致脚本的主要执行时间问题。在抛出异常之前,它会尝试查找组件约 2 或 3 分钟。我能看到解决此问题的唯一方法是是否有某种声明,如 try for x seconds
并在找不到组件时继续。有什么方法可以限制您尝试任何给定语句的时间吗?
最佳答案
我发现一些代码可以在您的代码中抛出超时异常,作为对另一个 Stackoverflow 问题的回答:What should I do if socket.setdefaulttimeout() is not working? ,但是它仅适用于链接中所述的 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 秒则继续...
关于java - 尝试 - 除了在 Python 中给定的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22537335/