try/catch 中的 AssertTrue

AssertTrue in try/catch

请问我到底做错了什么。

我查了又查,都没有用。 我也检查了以前的代码,但我没有收到错误,所以我的代码工作正常,只是某处有轻微错误。

代码 运行 正常,assertTrue 表现符合预期,但是当我将其放入 try/catch 时,我只在catch 块,即使找到了文本。

我相信如果 assertTrue 找到了文本,它应该转到 try 块中的下一行代码并通过测试,而不是 catch 块。不要误会我的意思,我没有得到任何错误,只是它打印出了错误的信息。

下面的代码包括在控制台中打印出消息。

public boolean verifyTextPresent(String value) throws Exception {

    Thread.sleep(5000);     
    try{
        boolean txtFound = driver.getPageSource().contains(value);
        log.log(value + " : text Found, .......continue");
        return txtFound;        
    }catch(Exception e)
    {
        log.log(value + " :NOT Found, check element again ot Contact developer.");
        return false;
    }   
}

public static void verifySignOutBtn() throws Exception
{
    log.header("VERIFY IF SIGN_OUT EXIST AND CLICKABLE.........");

    callMethod.myAccountPageNative(CONSTANTElements.SIGN_IN_LINK);
    Thread.sleep(2000);     

    log.header("LOCATE SIGN_OUT BTN, AND CLICK ......");
    callMethod.elementPresent_Click(By.cssSelector(CONSTANTElements.SIGN_OUT_BTN));
    Thread.sleep(4000);         

    log.header("VERIFY SIGN_OUT NAVIGATES TO HOME PAGE WHEN CLICKED......");        
    try{        
        Assert.assertTrue(callMethod.verifyTextPresent("SIGN IN"), "SIGN IN");          
        log.log("User Successfully Signed Out.......");
        log.log("Test Passed!...");
        //callMethod.close();
    }
    catch(Throwable e)
    {
        log.log("User NOT Successfully Signed Out.... Contact developer.");
        log.log("Test Failed!...");
        //callMethod.close();
    }
    callMethod.close();
}

}

Msg in console:
SIGN IN : text Found, .......continue
User NOT Successfully Signed Out.... Contact developer.
Test Failed!...

令人困惑的部分是为什么它打印出 catch 块而不是 try 块中的下一行?

唯一可能的解释是 verifyTextPresent(String value) returns false(您实际上从未检查过 boolean txtFound 的值)并且 assertTrue 失败(抛出一个AssertionError 这在你的 catch 块中没有得到很好的处理)。要找出答案,请替换此

log.log(value + " : text Found, .......continue");

例如这一行

log.log(value + " : text Found, ......." + txtFound);

或者只在 catch 块中打印堆栈跟踪。

不应该反过来吗?

Assert.assertTrue("Message if it is false", callMethod.verifyTextPresent("SIGN IN"));