Java 如何将睡眠添加到重试TestNG方法中?

Java 如何将睡眠添加到重试TestNG方法中?,java,selenium,exception-handling,testng,thread-sleep,Java,Selenium,Exception Handling,Testng,Thread Sleep,我目前正在实现一种IRetryAnalyzer与IAnnotationTransformer相结合的方法,以便在测试失败时执行重试。我想在重试时添加Thread.sleep()。以下是我目前拥有的: public boolean retry(ITestResult result){ if (retryCount < maxRetryCount) { retryCount++; return true; } return false;

我目前正在实现一种IRetryAnalyzer与IAnnotationTransformer相结合的方法,以便在测试失败时执行重试。我想在重试时添加Thread.sleep()。以下是我目前拥有的:

public boolean retry(ITestResult result){
    if (retryCount < maxRetryCount) {
        retryCount++;
        return true;
    }
    return false;
}
公共布尔重试(ITestResult结果){
if(retryCount
添加Thread.sleep()时,需要为重试方法添加引发的异常:

public boolean retry(ITestResult result) throws Exception{
    if (retryCount < maxRetryCount) {
        retryCount++;
        Thread.sleep(5);
        return true;
    }
    return false;
}
public boolean重试(ITestResult结果)引发异常{
if(retryCount

然而,“Exception”给了我一个错误:“重写的方法不会抛出java.lang.Exception”。不管我做了多少尝试,我似乎都不能在这个重试中添加睡眠。有人知道解决方法吗?

捕获并抑制将抛出的
中断异常

try {
    Thread.sleep(5);
} catch (InterruptedException e) {
    //do nothing
}
这将防止您需要将
throws
子句添加到方法定义中。

线程。sleep(long)
可能引发
InterrupedException
。 您可以将它包含到
try-catch
块中,还可以从方法中删除
抛出异常

public boolean retry(ITestResult result){

    if (retryCount < maxRetryCount) {

        retryCount++;

        try{

            Thread.sleep(5);

        }catch(Exception e){}

        return true;

    }

    return false;
}
公共布尔重试(ITestResult结果){
if(retryCount
在“throws”声明和“try catch”块之间存在差异。区别在于,“try-catch”会吞下异常,“throws”会让它传播。请参阅以下链接:

由于retry是一个被重写的方法,所以有一些关于使用异常处理重写方法的规则

规则是:

一,。如果超类方法未声明异常,则子类重写方法无法声明选中的异常,但可以声明未选中的异常

二,。如果超类方法声明异常,子类重写方法可以声明相同的异常、子类异常或无异常,但不能声明父类异常

因此,根据上述规则声明一个异常,或者用try-catch块包围“Thread.sleep(5000)”,如下所示

try {
        Thread.sleep(5000);
    } catch (Exception e) {
        //do nothing
    }
注意:


<线程>睡眠()实际上将数值视为毫秒,所以使用5000而不是5。

为什么你要在那里睡觉?为什么你想在重播时在任何地方睡5秒?如果你真的需要,你可以把它放在其他地方。@JeffC我正试图解决我的测试套件中关于api和页面加载时间不一致的问题。我知道我可以创建一个等待元素出现然后继续的方法,但我要进入的套件太大了,在我所有1000多个测试中实现这样的方法需要一段时间。测试失败时添加5s睡眠不是解决页面加载时间的方法,等等。我甚至不知道这会有什么帮助。@JeffC如果你有其他方法来提高测试套件的稳定性,我很乐意听到。你解决了实际问题。如果页面加载时间不一致,则直接处理。您添加了允许页面加载时间的等待,等等。谢谢!这很有效。我选择了另一个答案作为被接受的答案,因为它提供了更多的链接,但这是相同的解决方案。谢谢!这很有效。我选择了另一个答案作为被接受的答案,因为它提供了更多的链接,但这是相同的解决方案。正如@J.Jeffreys提到的…这是相同的解决方案。。。我喜欢InterruptedException的精确度。我将避免捕获基本异常。