如何使用selenium中的数据块报告区分通过和失败
我有两个测试方法,我编写了一些代码来验证链接的标题。在一个方法中,我故意通过了一个方法,而在另一个方法中失败了,但在报告中,它只在饼图中给出了通过状态。如何跟踪失败的一个?如何使用selenium中的数据块报告区分通过和失败,selenium,selenium-webdriver,testng,Selenium,Selenium Webdriver,Testng,我有两个测试方法,我编写了一些代码来验证链接的标题。在一个方法中,我故意通过了一个方法,而在另一个方法中失败了,但在报告中,它只在饼图中给出了通过状态。如何跟踪失败的一个? 下面是我的代码: package com.custom.reports; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import
下面是我的代码:
package com.custom.reports;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.Test;
import com.relevantcodes.extentreports.ExtentReports;
import com.relevantcodes.extentreports.LogStatus;
public class CustomReports {
WebDriver driver;
ExtentReports logger;
@Test(priority = 1)
public void verifyTitle() {
System.setProperty("webdriver.firefox.marionette", "C:\\geckodriver.exe");
logger = ExtentReports.get(CustomReports.class);
logger.init("C:\\Users\\siddhesh.kalgaonkar\\Documents\\Reports\\SecondReport.html", true);
logger.startTest("Verify Title Test");
driver = new FirefoxDriver();
driver.manage().window().maximize();
logger.log(LogStatus.INFO, "Browser is up and running..");
driver.get("http://google.com");
logger.log(LogStatus.INFO, "Application is up and running..");
String title = driver.getTitle();
Assert.assertTrue(title.contains("Google"));
logger.log(LogStatus.INFO, "Title is verified..");
logger.endTest();
}
@Test(priority = 2)
public void verifyTitle2() {
String title1 = driver.getTitle();
Assert.assertTrue(title1.contains("Selenium"));
logger.log(LogStatus.INFO, "Title is verified..");
logger.endTest();
}
@AfterSuite
public void afterFailed() {
driver.get("C:\\Users\\siddhesh.kalgaonkar\\Documents\\Reports\\SecondReport.html");
}
}
下面是生成的报告的屏幕截图:如果需要任何其他信息,请告诉我。
提前感谢:)让它在每种方法之后检查结果
@AfterMethod
public void getResult(ITestResult result){
if(result.getStatus()==ITestResult.FAILURE){
// Stuff
}
report.endTest(logger);
}
让它检查每种方法后的结果
@AfterMethod
public void getResult(ITestResult result){
if(result.getStatus()==ITestResult.FAILURE){
// Stuff
}
report.endTest(logger);
}
我相信我们需要为每个@test开始和结束测试(在区段中记录为单独的测试)。在我看到的代码中,测试日志记录只针对verifyTitle()(第一个测试方法)启动和结束,它有三个日志记录信息 因此,报告仅显示一个通过的测试用例(第一个测试方法)和三个信息(第一个测试方法中有三个信息日志) 请尝试为所有测试方法添加开始/结束测试并检查 下面是修改后的代码
public class Stack
{
WebDriver driver = null;
ExtentReports logger = ExtentReports.get(CustomReports.class); //Initinating the logger
logger.init("C:\\Users\\siddhesh.kalgaonkar\\Documents\\Reports\\SecondReport.html", true);
System.setProperty("webdriver.firefox.marionette", "C:\\geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().window().maximize();
@Test(priority = 1)
public void verifyTitle()
{
logger.startTest("Verify Title Test");//Starting the test logger
logger.log(LogStatus.INFO, "Browser is up and running..");
driver.get("http://google.com");
logger.log(LogStatus.INFO, "Application is up and running..");
String title = driver.getTitle();
Assert.assertTrue(title.contains("Google")); //This will pass
logger.log(LogStatus.INFO, "Title is verified..");
logger.endTest();//Ending the test logger
}
@Test(priority = 2)
public void verifyTitle2()
{
logger.startTest("Verify Failing the test case");//Starting the test logger
String title1 = driver.getTitle();
Assert.assertTrue(title1.contains("Selenium")); //This will fail
logger.log(LogStatus.INFO, "Title is verified..");
logger.endTest();//Ending the test logger
}
@AfterSuite
public void afterFailed()
{
driver.get("C:\\Users\\siddhesh.kalgaonkar\\Documents\\Reports\\SecondReport.html");
}
}
希望这对你有帮助。谢谢。我认为我们需要开始和结束每个@test的测试(在区段中记录为单独的测试)。在我看到的代码中,测试日志记录只针对verifyTitle()(第一个测试方法)启动和结束,它有三个日志记录信息 因此,报告仅显示一个通过的测试用例(第一个测试方法)和三个信息(第一个测试方法中有三个信息日志) 请尝试为所有测试方法添加开始/结束测试并检查 下面是修改后的代码
public class Stack
{
WebDriver driver = null;
ExtentReports logger = ExtentReports.get(CustomReports.class); //Initinating the logger
logger.init("C:\\Users\\siddhesh.kalgaonkar\\Documents\\Reports\\SecondReport.html", true);
System.setProperty("webdriver.firefox.marionette", "C:\\geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().window().maximize();
@Test(priority = 1)
public void verifyTitle()
{
logger.startTest("Verify Title Test");//Starting the test logger
logger.log(LogStatus.INFO, "Browser is up and running..");
driver.get("http://google.com");
logger.log(LogStatus.INFO, "Application is up and running..");
String title = driver.getTitle();
Assert.assertTrue(title.contains("Google")); //This will pass
logger.log(LogStatus.INFO, "Title is verified..");
logger.endTest();//Ending the test logger
}
@Test(priority = 2)
public void verifyTitle2()
{
logger.startTest("Verify Failing the test case");//Starting the test logger
String title1 = driver.getTitle();
Assert.assertTrue(title1.contains("Selenium")); //This will fail
logger.log(LogStatus.INFO, "Title is verified..");
logger.endTest();//Ending the test logger
}
@AfterSuite
public void afterFailed()
{
driver.get("C:\\Users\\siddhesh.kalgaonkar\\Documents\\Reports\\SecondReport.html");
}
}
希望这对你有帮助。谢谢。我想说,你的问题与硒更相关。我们使用Junit,因此是注释而不是答案。在我们的一个项目中,我们添加了一个
@Rule
,并且成功地覆盖了受保护的无效(描述){},@Override-protected-void失败(Throwable e,Description-Description){}
。好的@EnriqueMedina。你知道我如何在TestNG中实现它吗?有人帮忙吗please@SiddheshKalgaonkar此问题是否已得到回答,或者您仍在等待回答?否,尚未回答。我的意思是,我还没有找到我想要的解决方案。仍然开放。如果可以,请帮助我@Dev:(我想说,您的问题与测试更相关,因为它是Selenium。我们与Junit合作,因此是一个注释而不是答案。在我们的一个项目中,我们添加了一个@规则,并成功地覆盖了受保护的无效(描述){}
和@覆盖受保护的无效失败(可丢弃的e,描述){}
。好的@EnriqueMedina。你知道我如何在TestNG中实现它吗?有人帮忙吗please@SiddheshKalgaonkar这个问题是否已得到回答,或者您仍在等待回答?不,尚未得到回答。我的意思是,我还没有找到我要寻找的解决方案。仍然开放。如果可以,请帮助我@Dev:(是的,我也编辑了一个,但我还是更新了我的代码。请看,我们需要开始和结束每个测试的范围测试记录器。如果我们在方法1开始测试并在方法2中结束它,那么它将同时考虑方法1和方法2作为一个单独的测试。是否为After suite启动了任何测试记录器。在当前情况下,我相信您在饼图中得到了4个信息谢谢@santhosh。这次我得到了您,我编辑了我的代码,现在它在控制台中显示已通过并失败,但在报告中它没有显示失败的结果。失败不会显示在报告中,因为您失败了After suiteTE……范围将只考虑报告生成中的@测试。所以我需要在这里做什么?是的,我编辑了一个,但仍然一样。我已经更新了我的代码。请看,我们需要开始和结束每个测试的程度测试记录器。如果我们在方法1开始测试并在方法2中结束它,那么它将同时考虑方法1和方法2。单一测试。我还可以看到您在After Suite中的测试用例失败了…但是我们没有为After Suite启动任何测试记录器。在当前情况下,我相信您在饼图中得到了4个信息谢谢@santhosh。这次我得到了您,我编辑了我的代码,现在它在控制台中显示通过并失败,但在报告中没有显示NG是失败的一个。失败是不会在报告中显示的,因为你已经失败了……范围将只考虑报告生成中的@测试。所以我需要在这里做些什么?你能给我更清楚的说明如何编辑这个代码吗?这将对我的代码有很大帮助,而且没有发现变量。你在哪里找到的?我写了我的代码一个Lon。在BeforeTest中,它将创建一个report report=new ExtentReports(“PATH”);在测试中,它将启动它logger=report.startTest(“Test”);因此在AfterMethod中(每次测试之后),它将从Test.result.getStatus()中的测试中提取ITestResult应该是ITestResult的一种形式。RESULTTYPElogger只是ExtentReports的对象。你能修改你的代码并详细编写它吗?因为那样会很有帮助。你能更清楚地告诉我如何编辑此代码吗?这会很有帮助,而且我的代码中没有报表变量。你在哪里找到的?我写了很长一段时间的代码在BeforeTest中,它将创建一个report report=new ExtentReports(“PATH”);在测试中,它将启动logger=report.startTest(“Test”);因此在AfterMethod中(每次测试之后),它将从Test.result.getStatus()中的测试中提取ITestResult应该是ITestResult的一种形式。RESULTTYPElogger仅是ExtentReports的对象。您能否修改代码并详细编写它,因为这样做确实会有所帮助