Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用selenium中的数据块报告区分通过和失败_Selenium_Selenium Webdriver_Testng - Fatal编程技术网

如何使用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的对象。您能否修改代码并详细编写它,因为这样做确实会有所帮助