Java 在不停止程序的情况下从junit测试捕获异常和错误?

Java 在不停止程序的情况下从junit测试捕获异常和错误?,java,testing,selenium,junit,Java,Testing,Selenium,Junit,我正在使用junit和selenium测试一个web应用程序,我有一个正在运行的测试套件。有时,当网页未能在浏览器中正确加载时,测试将不会因为实际应用程序的故障而失败。为了解决这个问题,我希望捕获任何第一次出现的错误,并再次运行测试,以确保问题确实存在于应用程序中。 我试过下面的代码 try{ ts.runTest(ts.testAt(testNum), a); } catch (Error er){ ts.runTest(ts.testAt(te

我正在使用junit和selenium测试一个web应用程序,我有一个正在运行的测试套件。有时,当网页未能在浏览器中正确加载时,测试将不会因为实际应用程序的故障而失败。为了解决这个问题,我希望捕获任何第一次出现的错误,并再次运行测试,以确保问题确实存在于应用程序中。 我试过下面的代码

try{
        ts.runTest(ts.testAt(testNum), a);
    }
    catch (Error er){
        ts.runTest(ts.testAt(testNum),  a);
    }
    catch (Exception e){
        ts.runTest(ts.testAt(testNum),  a);
    }
我也试过这个

ts.runTest(ts.testAt(testNum),  a);
if (!a.wasSuccessful()){
            ts.runTest(ts.testAt(testNum), a);
            if (!a.wasSuccessful()){
                fail();
                System.out.println("Test "+testNum+" failed");
            }
        }

但在这两种测试中,程序在第一次遇到错误时就完全停止测试。我需要能够在失败的情况下多次运行这些测试。

我认为处理此问题的最简单方法是在开始执行测试之前检查您的页面是否已加载。我不确定你的测试导航是如何工作的。但对我来说,我们用的是这样的东西

public SomePage ClickUpdate()
    {
        Driver.FindElement(By.Id("MyId")).Click();
        //taking page objects in return
        return new SomePage (Driver);
    }
在SomePage()对象内部使用唯一的选择器,在构造函数内部等待该选择器存在并将其包装在try-catch中

try
{
    var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(5));
    wait.Until(ExpectedConditions.ElementExists(By.Id("Your Id")));
}
catch (YourException)
{
    Driver.Navigate().Refresh();
    // Or you can perform another click to allow the page to load
    var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(5));
    wait.Until(ExpectedConditions.ElementExists(By.Id("Your Id")));
}

我的是C。希望这有帮助

您可以使用JUnit@规则。寻找灵感