Selenium and AssertTrue() connection



我在Eclipse/Java中使用Selenium,我有一个像这样的Try/Catch:

            try {
        assertTrue(selenium.isTextPresent("You Are Now Logged xxxOut"));
        System.out.println("You Are Now Logged Out is present on the web page");
        }
        catch (Throwable e) {
        System.out.println("You Are Now Logged Out is NOT present on the web page");
        }           

我想我错过了硒与此强制故障(xxxOut)的连接,因为如何让硒将其报告为失败?我的 TestNG 报告我的脚本运行正常而没有失败,但如果我查看控制台,我看到"您现在已注销未出现在网页上",所以我确实失败了(预期的文本不存在)。

谢谢。。。

既然你已经发现了失败,测试就通过了。 如果要记录自定义消息但仍将其报告为失败,则应再次抛出它。 在系统输出后添加抛出 e,该案例将被报告为失败。

如果您不想记录自定义消息,则根本不要捕获它。

首先,try/catch 块是必要的吗?如果测试中的方法都不太可能引发异常,则最好保持测试简单

assertTrue(selenium.isTextPresent("You Are Now Logged xxxOut"));

如果失败消息不需要输出到任何特定的输出流,但你想要保留自定义消息

String failureMsg = "You Are Now Logged Out is NOT present on the web page";
assertTrue(selenium.isTextPresent("You Are Now Logged xxxOut"), failureMsg);
String successMsg = "You Are Now Logged Out is present on the web page";
System.out.println(successMsg);

如果日志记录在测试中绝对必要

try {
    assertTrue(selenium.isTextPresent("You Are Now Logged xxxOut"));
    System.out.println("You Are Now Logged Out is present on the web page");
} catch (Throwable e) {
    String failureMsg = "You Are Now Logged Out is NOT present on the web page";
    fail(failureMsg, e)
    System.out.println(failureMsg);
}

作为风格问题,我更喜欢第一种选择。除非有非常令人信服的理由将代码包装在 Try/Catch 中,否则我建议不要这样做,因为:

  1. 根据提供的代码段,这不是必需的;assertTrue() 调用将抛出一个 AssertionError,这将完全失败测试,并且有一个重载版本允许自定义消息
  2. 捕获
  3. 所有可抛出的实例将捕获断言错误实例并导致您重新抛出它(不必要的),或调用 fail()(冗余,它只是抛出一个新的断言错误)
  4. 重新引发 AssertionError 以外的异常将导致测试失败,并显示错误条件而不是失败条件,这表示测试以您意想不到的方式失败,这通常被认为是更严重的错误

此外,通常不建议捕获可抛出的实例。

最新更新