我使用 Maven 运行我的 Selenium Testng 测试,但我正在尝试创建可执行的 jar,因此其他团队成员可以简单地从他们的桌面运行一个自动化套件,只需最少的设置。
所以我添加了一个主要的“runner”方法来创建一个可执行的 jar。
public class LaunchTests {
public static void main(String[] args) {
TestListenerAdapter tla = new TestListenerAdapter();
TestNG testng = new TestNG();
List<String> suites = new ArrayList();
suites.add("testng.xml");//path to xml..
testng.setTestSuites(suites);
testng.run();
}
}
我最好的猜测是需要向 POM.xml 添加一些东西吗?
当从 eclipse 或使用 mvn clean test(Surefire 插件)手动运行 testng 测试时,它们运行完美。但是在尝试作为 Java 程序运行时出现此错误。
Exception in thread "main" org.testng.TestNGException:
Cannot find class in classpath: package.TestOne
at org.testng.xml.XmlClass.loadClass(XmlClass.java:81)
at org.testng.xml.XmlClass.init(XmlClass.java:73)
at org.testng.xml.XmlClass.<init>(XmlClass.java:59)
at org.testng.xml.TestNGContentHandler.startElement(TestNGContentHandler.java:548)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.emptyElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.testng.xml.XMLParser.parse(XMLParser.java:38)
at org.testng.xml.SuiteXmlParser.parse(SuiteXmlParser.java:16)
at org.testng.xml.SuiteXmlParser.parse(SuiteXmlParser.java:9)
at org.testng.xml.Parser.parse(Parser.java:172)
at org.testng.TestNG.initializeSuitesAndJarFile(TestNG.java:302)
at org.testng.TestNG.run(TestNG.java:991)
at util.LaunchTests.main(LaunchTests.java:17)
测试.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1" parallel="methods" thread-count="1">
<test name="Chrome Adviser Portal" allow-return-values="true"
thread-count="1">
<parameters>
<parameter name="browser" value="chrome" />
<parameter name="loginType" value="adviser" />
</parameters>
<classes>
<class name="adviserPortal.AdviserLogin" />
</classes>
</test>
</suite>
原文由 dsidler 发布,翻译遵循 CC BY-SA 4.0 许可协议
您提到您可以通过 maven surefire 插件从 eclipse 中运行测试,并且您不能仅在执行 main 方法时运行它。
This can only happen when you class
LaunchTests
insrc/main/java
and your suite xml filetestng.xml
is referring to classes withinsrc/test/java
.src/main/java
中的 Java 类对驻留在src/test/java
中的 Java 类没有可见性。这解释了为什么 TestNG 抛出异常Cannot find class in classpath
如果您的
LaunchTests
移动到src/test/java
那么默认情况下它不会包含在您正在构建的 uber jar(可执行 jar)中,因为测试类被省略了。所以如果你真的想做到这一点,你有两种选择
src/test/java
移动到src/main/java
然后使用它(你的 pom 文件中的 Surefire 插件配置可能需要一些调整,让它知道你的测试源不是src/test/java
但src/main/java
。maven jar plugin
之类的东西来创建一个 jar 测试类,参考 这里。