将我的 selenium TestNG 框架扩展到 Cucumber 后,监听器出现错误
Getting error in listeners after extending my selenium TestNG framework to Cucumber
Q1) 我在 Selenium-TestNG 中有一个现有框架以及监听器 class。我使用 TestNG 的 @AfterTest 注释关闭浏览器:
@AfterTest
public void teardown()
{
driver.quit();
}
当我 运行 作为没有黄瓜功能文件的普通旧 Selenium TestNG 时,Listeners class 的 onTestSuccess 方法工作得很好:
public void onTestSuccess(ITestResult result)
{
test.log(Status.PASS, "Test case Passed");
try
{
String path = takeScreenshot(driver, "Pass/" + result.getInstanceName() + "/" + result.getMethod().getMethodName());
test.addScreenCaptureFromPath(path, result.getMethod().getMethodName());
}
catch (Exception e)
{
log.fatal("Exception in onTestSuccess Method of Listeners class");
log.fatal(e.getMessage() +" : " + e.getStackTrace());
System.out.println("Exception " + e.getMessage());
System.out.println("Exception " + e.getStackTrace());
}
}
当Test通过后,先调用Listenersclass的onTestSuccess()方法,再调用teardown()方法。所以一切都很顺利。
现在我在黄瓜中使用这个特征文件:
Feature: Logout feature
Background:
Given User is on Salesforce login page
@SmokeTest @Low @PositiveTest @Logout
Scenario: Logout of application
Given "RMUser" has logged into Salesforce application
When User clicks on logout button
Then Users is logged-out from the application
并使用@After 钩子关闭浏览器:
@After
public void teardown() {
driver.quit();
}
现在,当我 运行 这个功能文件作为 TestNG 时,首先调用 Hooks 文件中的拆卸方法,然后调用 Listeners class 的 onTestSuccess() 方法,因此我得到错误“Exception Session ID is null. Using WebDriver after calling quit()?" 在我尝试使用驱动程序变量的行:
String path = takeScreenshot(driver, "Pass/" + result.getInstanceName() + "/" + result.getMethod().getMethodName());
如果在调用@After 钩子之前先调用 Listeners class 的 onTestSuccess() 方法,则可以解决此问题。
寻求一些解决方法或想法来解决 Cucumber 中的这个问题。
Q2) 当 运行ing 作为普通的 Selenimm-TestNG 时,Extent Reports 在报告中给出了正确的 TestName 但是当 运行ning 作为 TestNG Cuccumber 框架时,Extent 报告只显示所有测试名称作为“运行场景”。
如何让 ExtentReport 给出正确的特征文件场景名称而不仅仅是“运行Scenario”
我通过删除 driver.quit(); 解决了 TestNG 侦听器 class 异常;来自 Hooks class 文件并将其放入 Listeners class:
的 onTestStart 和 onTestFailure 方法中
public void onTestSuccess(ITestResult result)
{
test.log(Status.PASS, "Test case Passed");
try
{
String path = takeScreenshot(driver, "Pass/" + result.getInstanceName() + "/" + result.getMethod().getMethodName());
test.addScreenCaptureFromPath(path, result.getMethod().getMethodName());
}
catch (Exception e)
{
log.fatal("Exception in onTestSuccess Method of Listeners class");
log.fatal(e.getMessage() +" : " + e.getStackTrace());
System.out.println("Exception " + e.getMessage());
System.out.println("Exception " + e.getStackTrace());
}
driver.quit();
}
public void onTestFailure(ITestResult result) {
test.log(Status.FAIL, "Test case Failed");
test.fail(result.getThrowable());
try
{
String path = takeScreenshot(driver, "Fail/" + result.getInstanceName() + "/" + result.getMethod().getMethodName());
test.addScreenCaptureFromPath(path, result.getMethod().getMethodName());
}
catch(Exception e)
{
log.fatal("Exception in onTestFailure Method of Listeners class");
log.fatal(e.getMessage() +" : " + e.getStackTrace());
System.out.println("Exception " + e.getMessage());
System.out.println("Exception " + e.getStackTrace());
}
driver.quit();
}
由于测试用例将通过或失败,因此控制将始终在 onTestSuccess 或 onTestFailure 方法中进行,这将在测试用例执行完成后退出驱动程序。
Q1) 我在 Selenium-TestNG 中有一个现有框架以及监听器 class。我使用 TestNG 的 @AfterTest 注释关闭浏览器:
@AfterTest
public void teardown()
{
driver.quit();
}
当我 运行 作为没有黄瓜功能文件的普通旧 Selenium TestNG 时,Listeners class 的 onTestSuccess 方法工作得很好:
public void onTestSuccess(ITestResult result)
{
test.log(Status.PASS, "Test case Passed");
try
{
String path = takeScreenshot(driver, "Pass/" + result.getInstanceName() + "/" + result.getMethod().getMethodName());
test.addScreenCaptureFromPath(path, result.getMethod().getMethodName());
}
catch (Exception e)
{
log.fatal("Exception in onTestSuccess Method of Listeners class");
log.fatal(e.getMessage() +" : " + e.getStackTrace());
System.out.println("Exception " + e.getMessage());
System.out.println("Exception " + e.getStackTrace());
}
}
当Test通过后,先调用Listenersclass的onTestSuccess()方法,再调用teardown()方法。所以一切都很顺利。
现在我在黄瓜中使用这个特征文件:
Feature: Logout feature
Background:
Given User is on Salesforce login page
@SmokeTest @Low @PositiveTest @Logout
Scenario: Logout of application
Given "RMUser" has logged into Salesforce application
When User clicks on logout button
Then Users is logged-out from the application
并使用@After 钩子关闭浏览器:
@After
public void teardown() {
driver.quit();
}
现在,当我 运行 这个功能文件作为 TestNG 时,首先调用 Hooks 文件中的拆卸方法,然后调用 Listeners class 的 onTestSuccess() 方法,因此我得到错误“Exception Session ID is null. Using WebDriver after calling quit()?" 在我尝试使用驱动程序变量的行:
String path = takeScreenshot(driver, "Pass/" + result.getInstanceName() + "/" + result.getMethod().getMethodName());
如果在调用@After 钩子之前先调用 Listeners class 的 onTestSuccess() 方法,则可以解决此问题。
寻求一些解决方法或想法来解决 Cucumber 中的这个问题。
Q2) 当 运行ing 作为普通的 Selenimm-TestNG 时,Extent Reports 在报告中给出了正确的 TestName 但是当 运行ning 作为 TestNG Cuccumber 框架时,Extent 报告只显示所有测试名称作为“运行场景”。
如何让 ExtentReport 给出正确的特征文件场景名称而不仅仅是“运行Scenario”
我通过删除 driver.quit(); 解决了 TestNG 侦听器 class 异常;来自 Hooks class 文件并将其放入 Listeners class:
的 onTestStart 和 onTestFailure 方法中public void onTestSuccess(ITestResult result)
{
test.log(Status.PASS, "Test case Passed");
try
{
String path = takeScreenshot(driver, "Pass/" + result.getInstanceName() + "/" + result.getMethod().getMethodName());
test.addScreenCaptureFromPath(path, result.getMethod().getMethodName());
}
catch (Exception e)
{
log.fatal("Exception in onTestSuccess Method of Listeners class");
log.fatal(e.getMessage() +" : " + e.getStackTrace());
System.out.println("Exception " + e.getMessage());
System.out.println("Exception " + e.getStackTrace());
}
driver.quit();
}
public void onTestFailure(ITestResult result) {
test.log(Status.FAIL, "Test case Failed");
test.fail(result.getThrowable());
try
{
String path = takeScreenshot(driver, "Fail/" + result.getInstanceName() + "/" + result.getMethod().getMethodName());
test.addScreenCaptureFromPath(path, result.getMethod().getMethodName());
}
catch(Exception e)
{
log.fatal("Exception in onTestFailure Method of Listeners class");
log.fatal(e.getMessage() +" : " + e.getStackTrace());
System.out.println("Exception " + e.getMessage());
System.out.println("Exception " + e.getStackTrace());
}
driver.quit();
}
由于测试用例将通过或失败,因此控制将始终在 onTestSuccess 或 onTestFailure 方法中进行,这将在测试用例执行完成后退出驱动程序。