Java &引用;org.testng.testngeException:org.xml.sax.SAXParseException;“元素类型”;“听众”;必须申报。在处理侦听器时

Java &引用;org.testng.testngeException:org.xml.sax.SAXParseException;“元素类型”;“听众”;必须申报。在处理侦听器时,java,selenium-webdriver,testng,listener,Java,Selenium Webdriver,Testng,Listener,我正在使用TestNG Listener生成数据块报告,然后我得到以下异常 org.testng.testngeException:org.xml.sax.SAXParseException;行号:4;列数:12;元素类型“侦听器”必须为 声明。 使用ITestListener时观察到的问题也是如此。因此,问题可能完全在于听众。请在这方面帮助我 我的测试环境如下所述。 selenium java:版本-3.141.59 testng:版本-6.14.3 Java:version-1.8 我已尝试

我正在使用TestNG Listener生成数据块报告,然后我得到以下异常

org.testng.testngeException:org.xml.sax.SAXParseException;行号:4;列数:12;元素类型“侦听器”必须为 声明。

使用ITestListener时观察到的问题也是如此。因此,问题可能完全在于听众。请在这方面帮助我

我的测试环境如下所述。 selenium java:版本-3.141.59 testng:版本-6.14.3 Java:version-1.8

我已尝试添加com.aventstack的最新或旧版本的ExtentReport依赖项,以及旧的com.relevantcodes版本,如下所示

com.aventstack 扩展端口 4.0.9或3.1.5以及 相关代码 扩展端口 2.41.2或2.41.1

我还尝试在Testng.xml或实现侦听器的类中或两者中提供侦听器信息

一,。Testng.xml文件“/>或 2.在实现Listener@Listeners({.class})的类中直接使用@Listeners注释

请查找下面的代码

POM.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>Framework</groupId>
    <artifactId>Jesus_Practise</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>Jesus_Practise</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.relevantcodes</groupId>
            <artifactId>extentreports</artifactId>
            <version>2.41.1</version>
        </dependency>

        <dependency>
            <groupId>com.aventstack</groupId>
            <artifactId>extentreports</artifactId>
            <version>3.1.5</version>
        </dependency>

    </dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="FreeCRM Test Suite">
<Listeners>
<Listener class-name="com.qa.Listeners.ExtentReporterNG"/>
<Listener class-name="com.qa.Listeners.ITestListen"/>
</Listeners>
    <test thread-count="5" name="FreeCRM Test">
        <classes>
            <class name="com.qa.testcases.LoginPageTest" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

4.0.0
框架
耶稣修行
0.0.1-快照
罐子
耶稣修行
http://maven.apache.org
UTF-8
org.seleniumhq.selenium
硒爪哇
3.141.59
org.testng
testng
6.14.3
编写
相关代码
扩展端口
2.41.1
com.aventstack
扩展端口
3.1.5
testng.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>Framework</groupId>
    <artifactId>Jesus_Practise</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>Jesus_Practise</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.relevantcodes</groupId>
            <artifactId>extentreports</artifactId>
            <version>2.41.1</version>
        </dependency>

        <dependency>
            <groupId>com.aventstack</groupId>
            <artifactId>extentreports</artifactId>
            <version>3.1.5</version>
        </dependency>

    </dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="FreeCRM Test Suite">
<Listeners>
<Listener class-name="com.qa.Listeners.ExtentReporterNG"/>
<Listener class-name="com.qa.Listeners.ITestListen"/>
</Listeners>
    <test thread-count="5" name="FreeCRM Test">
        <classes>
            <class name="com.qa.testcases.LoginPageTest" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

记者

package com.qa.Listeners;

import java.io.File;

import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.testng.IReporter;
import org.testng.IResultMap;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.annotations.Listeners;    
import org.testng.xml.XmlSuite;

import com.relevantcodes.extentreports.ExtentReports;
import com.relevantcodes.extentreports.ExtentTest;
import com.relevantcodes.extentreports.LogStatus;

@Listeners({ExtentReporterNG.class})
public class ExtentReporterNG implements IReporter{

    private ExtentReports extent;

    public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites,
            String outputDirectory) {
        extent = new ExtentReports(outputDirectory + File.separator
                + "Extent.html", true);

        for (ISuite suite : suites) {
            Map<String, ISuiteResult> result = suite.getResults();

            for (ISuiteResult r : result.values()) {
                ITestContext context = r.getTestContext();

                buildTestNodes(context.getPassedTests(), LogStatus.PASS);
                buildTestNodes(context.getFailedTests(), LogStatus.FAIL);
                buildTestNodes(context.getSkippedTests(), LogStatus.SKIP);
            }
        }

        extent.flush();
        extent.close();
    }

    private void buildTestNodes(IResultMap tests, LogStatus status) {
        ExtentTest test;

        if (tests.size() > 0) {
            for (ITestResult result : tests.getAllResults()) {
                test = extent.startTest(result.getMethod().getMethodName());

                test.setStartedTime(getTime(result.getStartMillis()));
                test.setEndedTime(getTime(result.getEndMillis()));

                for (String group : result.getMethod().getGroups())
                    test.assignCategory(group);

                if (result.getThrowable() != null) {
                    test.log(status, result.getThrowable());
                } else {
                    test.log(status, "Test " + status.toString().toLowerCase()
                            + "ed");
                }

                extent.endTest(test);
            }
        }
    }

    private Date getTime(long millis) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(millis);
        return calendar.getTime();
    }

}
package com.qa.Listeners;
导入java.io.File;
导入java.util.Calendar;
导入java.util.Date;
导入java.util.List;
导入java.util.Map;
导入org.testng.IReporter;
导入org.testng.IResultMap;
导入org.testng.ISuite;
导入org.testng.ISuiteResult;
导入org.testng.ITestContext;
导入org.testng.ITestResult;
导入org.testng.annotations.Listeners;
导入org.testng.xml.XmlSuite;
导入com.relevantcodes.extentreports.extentreports;
导入com.relevantcodes.extentreports.extendettest;
导入com.relevantcodes.extentreports.LogStatus;
@侦听器({ExtentReporterNG.class})
公共类ExtentReporterNG实现了IReporter{
私有扩展报告范围;
公共无效生成器报告(列表xmlSuites、列表suites、,
字符串输出目录){
区段=新的ExtentReports(outputDirectory+File.separator
+“Extent.html”,正确);
适用于(ISuite:suites){
Map result=suite.getResults();
对于(ISuiteResult r:result.values()){
ITestContext=r.getTestContext();
buildTestNodes(context.getPassedTests(),LogStatus.PASS);
buildTestNodes(context.getFailedTests(),LogStatus.FAIL);
buildTestNodes(context.getSkippedTests(),LogStatus.SKIP);
}
}
expndure.flush();
extent.close();
}
私有void buildTestNodes(IResultMap测试、日志状态){
延伸试验;
如果(tests.size()>0){
for(ITestResult结果:tests.getAllResults()){
test=extent.startTest(result.getMethod().getMethodName());
test.setStartedTime(getTime(result.getStartMillis());
test.setEndedTime(getTime(result.getEndMillis());
对于(字符串组:result.getMethod().getGroups())
测试类别(组);
if(result.getThrowable()!=null){
test.log(status,result.getThrowable());
}否则{
test.log(状态,“test”+状态.toString().toLowerCase()
+“ed”);
}
范围.结束试验(试验);
}
}
}
私有日期获取时间(长毫秒){
日历=Calendar.getInstance();
日历。设置时间单位为毫秒(毫秒);
返回calendar.getTime();
}
}

问题出在您的套件xml文件中

在套件xml文件中定义侦听器的正确方法是使用标记
。您的套件xml将它们分别定义为
。请修复要在所有小写情况下定义的标记

您的标签以大写字母开头