【问题标题】:TestNG try/catch not working properlyTestNG try/catch 无法正常工作
【发布时间】:2014-11-13 08:53:45
【问题描述】:

我正在开发一个以前有人构建的测试自动化框架。该框架从 excel 文件中读取测试数据,并使用 Selenium webdriver 来控制浏览器并执行测试。

我通过添加一个从 CSV 文件读取数据的 TestNG 类来向该框架添加功能。当前框架中的一些函数使用 try/catch。所以当我从 TestNG 类中调用这些函数时,TestNG 总是会说测试通过了,无论如何。

例如,这是来自当前框架;

    if (enterValueInBox.length() >= 1) {
        try {
            browserActions.typeValueInTextBox(myDriver, enterValueInBox);
        } catch (Exception e) {
            System.out.println("enterValueInBox failed");
        }
    }

此 if 语句位于函数内部。不管这个函数是否有效,它总是会在 TestNG 中通过。例如,即使 Selenium 找不到元素。

我该如何解决这个问题?我必须更改 try/catch 吗?

编辑:来自同一函数的另一个示例。该函数基本上由几个 if 语句组成,就像我在这里展示的两个一样。它们都具有相同的签名,因此内部带有 try/catch 的 if 语句。另外值得一提的是,我调用的函数/类不是 TestNG 类。所以我建立了一个TestNG类,并调用了一个非TestNG类->方法。

   if (backSpaceInTextBox.length() > 1) {
        try {
            wa.handleSeleneseCommand(myDriver, Properties.TIME_TO_WAIT,
                    "niet gelukt");
            browserActions.doBackSpaceInTextBox(myDriver,
                    backSpaceInTextBox);
        } catch (Exception e) {
            System.out.println("Could not do backspace");
        }
    }

【问题讨论】:

  • 您能从您的测试中添加更多代码吗?
  • 您的 catch 子句实际上只是在吞噬异常。它向控制台打印一条消息并继续正常执行。您需要以某种方式处理异常,或者在您的方法签名中声明抛出错误
  • @ToYonos 我试图小心处理代码,因为它是内部的。但是你想看什么样的代码?请参阅上面的编辑^

标签: java selenium try-catch testng


【解决方案1】:

您的测试正在通过,因为测试功能已完成

  • 没有任何断言失败
  • 测试方法没有抛出异常

在你的情况下,你应该做一个

  • 根本不捕获异常。声明测试方法以抛出这些异常
  • 捕获异常并失败测试 (Assert.fail)

【讨论】:

    【解决方案2】:

    试试这个:

    if (enterValueInBox.length() >= 1)
    {
        try
        {
            browserActions.typeValueInTextBox(myDriver, enterValueInBox);
        }
        catch (Exception e)
        {
            Assert.fail("EnterValueInBox failed", e);
        }
    }
    

    当抛出异常时,您的测试将失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 2013-04-15
      • 2018-01-02
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多