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

标签 java python jcomponent

我正在使用 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/

相关文章:

java - 编译Hadoop WordCount教程-hadoop 2.6.3

python while 和 if 与条件对

python - PySpark 解压文件 : Which is a good approach for unzipping files and storing the csv files into a Delta Table?

java - 是什么压倒了我的首选尺寸? (J面板)

java - 使用JPanel时JFrame为空

java - 类设计 : Threading inside class or outside

java - 使用 GridBagLayout 时组件重叠

python - 匹配同一对象的两个不同图像

java - 将我的所有 JComponent 转换为 AWT 组件是否值得?

java - 使用java的简单多线程服务器聊天