【问题标题】:TestNG: Getting java.lang.ClassCastException when the test case fails in Extent reportTestNG:当测试用例在范围报告中失败时获取 java.lang.ClassCastException
【发布时间】:2018-08-08 23:46:04
【问题描述】:

Extent 报告中测试用例失败时获取 java.lang.ClassCastException。 我有一个 TestListener 类,它在一个包中实现了 onpass、onfailure、onskipp 方法声明,并且在一个包中有 Test 类,并且 Webdriver 在第三个包的基类下声明,这样做是为了更好的可读性。

现在,每当测试用例失败时,控制就会转到 onfailure,我们已经实现了截图功能,这就是我的代码失败的地方。

onfailure方法-

 public void onTestFailure(ITestResult iTestResult) {
    System.out.println("I am in onTestFailure method " +  getTestMethodName(iTestResult) + " failed");

    //Get driver from BaseTest and assign to local webdriver variable.
    Object testClass = iTestResult.getInstance();

    WebDriver webDriver = ((BaseClass) testClass).getDriver();

    //Take base64Screenshot screenshot.
    String base64Screenshot = "data:image/png;base64,"+((TakesScreenshot)webDriver).
          getScreenshotAs(OutputType.BASE64);


    //Extentreports log and screenshot operations for failed tests.
    ExtentTestManager.getTest().log(LogStatus.FAIL,"Test case failed",
           ExtentTestManager.getTest().addBase64ScreenShot(base64Screenshot));
    //ExtentTestManager.getTest().log(LogStatus.FAIL, "Test case failed as:"+iTestResult.getThrowable());
}

基类:

 public WebDriver getDriver()
 {
if (driver == null)
{
 System.setProperty("webdriver path here"); 
  driver= new ChromeDriver();
  return driver;
}
else
{
  return driver;
}
}

错误日志-

java.lang.ClassCastException: VWAutomationTest.TestVWLoginPage cannot be cast to Utility.BaseClass
at Listeners.TestListener.onTestFailure(TestListener.java:77)
at org.testng.internal.TestListenerHelper.runTestListeners(TestListenerHelper.java:67)
at org.testng.internal.Invoker.runTestListeners(Invoker.java:1388)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1041)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
at org.testng.SuiteRunner.run(SuiteRunner.java:364)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
at org.testng.TestNG.runSuites(TestNG.java:1049)
at org.testng.TestNG.run(TestNG.java:1017)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

【问题讨论】:

  • 您发布的代码似乎对解决您的问题毫无帮助。 testClass 是否应该是 VWAutomationTest.TestVWLoginPage? (错误说它在那里传递),如果是这样 - 它是 BaseClass 的子类吗?这就是失败的演员所指向的。
  • VWAutomationTest 是包,我有我的测试类,其中我有我的测试,Baseclass 是我的驱动程序初始化的类,如附加代码所示,它位于另一个名为Util,我希望这会有所帮助,
  • 你在扩展基类吗?如果是这样,则将代码更改为 WebDriver webDriver = getDriver();试试这个
  • 这可以工作,但不会给出当前实例的屏幕截图,并且屏幕截图不会捕获失败的确切屏幕。对象 testClass = iTestResult.getInstance(); WebDriver webDriver = ((BaseClass) testClass).getDriver();

标签: java selenium extentreports selenium-extent-report


【解决方案1】:

我想出了答案,

我犯的错误是我没有在我的测试类和 Testlistener 以及 VWAutomationTest.TestVWLoginpage 中扩展基类,我正在调用基类的对象,因此我得到了错误。 为了使其正常工作,我只是扩展了基类,即

public class TestVWLoginPage extends Utility.BaseClass 

其他一切都保持不变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 2013-06-25
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多