如何处理 StackTraceElement 异常

How to handle StackTraceElement exception

提问人:Elgun Quliyev 提问时间:9/1/2023 最后编辑:Krishnan MahadevanElgun Quliyev 更新时间:9/2/2023 访问量:51

问:

我收到 UI:clickNewPurchase() 中的异常:[Ljava.lang.StackTraceElement;@52e6b75异常。
但问题是它能够导航下一页。您可以在下面找到代码。如何避免出现此异常,以及如何确定我到底在哪里遇到此问题以及导致此问题的原因?有什么帮助吗?

private void clickNewPurchase() throws Throwable {
    try {
        List<WebElement> listOfbuttons = createElements(newPurchase);
        for (WebElement element : listOfbuttons) {
            String value = element.getAttribute("value");
            if (value.equals("New Purchase") || value.equals("RePurchase")) {
                JavascriptExecutor executor = (JavascriptExecutor)driver.get();
                executor.executeScript("arguments[0].click();", element);
                baseClass.logInfo("Clicked on New Purchase / RePurchase button on Start a Purchase page");
                waitforVisibilityOfElement(currentPage);
                break;
            }else if (value.equals("Retrieve")) {
                masterData.get().put("IncompletePurchase", "True");
                JavascriptExecutor executor = (JavascriptExecutor)driver.get();
                executor.executeScript("arguments[0].click();", element);
                baseClass.logInfo("Clicked on Retrieve button on Start a Purchase page");
                waitforVisibilityOfElement(currentPage);
                break;
            }
        }
    } catch (Exception e) {
        softAssertFail("Exception in clickNewQuote(): " + Arrays.toString(e.getStackTrace()), ValidationType.UI);
        e.printStackTrace();
    }
}

java.lang.AssertionError: The following asserts failed:
<br> <b>>></b> UI : Exception in clickNewPurchase(): [Ljava.lang.StackTraceElement;@3bea26bc
at org.testng.asserts.SoftAssert.assertAll(SoftAssert.java:43)
at tests.P2Test.p2Test(P2Test.java:167)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)

P2测试线 167

try {
    if (sam.getSoftAssert() != null)
        sam.getSoftAssert().assertAll();
} catch (Exception e) {
    Assert.fail("Problem in Soft assert: " + e.getCause());
}
Java 数组 异常

评论

0赞 Elgun Quliyev 9/1/2023
当我甚至移动 e.printStackTrace() 时;到 前面 softassertFail 仍然收到相同的异常。
0赞 Elgun Quliyev 9/2/2023
如果我将 getStackTrace 替换为 getMessage 怎么办?
0赞 Elgun Quliyev 9/2/2023
P2Test 行 167 只做 assertAll
0赞 Stephen C 9/2/2023
为什么要在非测试用例代码中调用 TestNG 方法 ()?这似乎是完全错误的。此外,在生产代码中和和是一个非常糟糕的主意。softAssertFailthrows Throwablecatch Exceptione.printStackTrace()
0赞 Stephen C 9/2/2023
最后是“如何处理 StackTraceElement 异常”。 - 这不是一个例外,它无法处理。并且也不会抛出例外。你的问题没有任何意义。你应该解释一下......用清晰的英语...您的代码尝试做什么,以及它实际做什么。什么是“这个问题”。softAssertError

答:

0赞 Eric 9/2/2023 #1

你在问几个问题——

  1. 从标题 - 如何处理堆栈跟踪元素 - 我会说你没有 - 只是让异常冒泡,除非有一些逻辑可以在异常发生时回退到。
  2. “但问题是它能够导航下一页”——我阅读的方式是您的用户没有意识到问题。那是因为你正在处理异常,没有什么可抛出的(即假设没有抛出异常)softAssertFail
  3. “我怎样才能避免得到这个异常”,我们真的无法分辨 - 你的异常的根本原因都被它掩盖了 - 我想不出任何很好的理由这样做 - 这背后的意图是什么?Arrays.toString(e.getStackTrace())
  4. 我有点困惑的地方是你问题的更大背景:听起来你是把它作为单元测试用例的一部分?但你也提到了用户导航。

我认为,如果您退后一步并且不处理异常(即删除异常),然后从那里开始,您可能会更好地了解正在发生的事情。try..catch