提问人:Elgun Quliyev 提问时间:9/1/2023 最后编辑:Krishnan MahadevanElgun Quliyev 更新时间:9/2/2023 访问量:51
如何处理 StackTraceElement 异常
How to handle StackTraceElement exception
问:
我收到 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());
}
答:
0赞
Eric
9/2/2023
#1
你在问几个问题——
- 从标题 - 如何处理堆栈跟踪元素 - 我会说你没有 - 只是让异常冒泡,除非有一些逻辑可以在异常发生时回退到。
- “但问题是它能够导航下一页”——我阅读的方式是您的用户没有意识到问题。那是因为你正在处理异常,没有什么可抛出的(即假设没有抛出异常)
softAssertFail
- “我怎样才能避免得到这个异常”,我们真的无法分辨 - 你的异常的根本原因都被它掩盖了 - 我想不出任何很好的理由这样做 - 这背后的意图是什么?
Arrays.toString(e.getStackTrace())
- 我有点困惑的地方是你问题的更大背景:听起来你是把它作为单元测试用例的一部分?但你也提到了用户导航。
我认为,如果您退后一步并且不处理异常(即删除异常),然后从那里开始,您可能会更好地了解正在发生的事情。try..catch
评论
softAssertFail
throws Throwable
catch Exception
e.printStackTrace()
是“如何处理 StackTraceElement 异常”。
- 这不是一个例外,它无法处理。并且也不会抛出例外。你的问题没有任何意义。你应该解释一下......用清晰的英语...您的代码尝试做什么,以及它实际做什么。什么是“这个问题”。softAssertError