我使用 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 手动运行 testng 测试时,或使用 mvn clean test(Surefire 插件),它们运行完美。但是在尝试作为 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>
最佳答案
您提到您可以通过 maven surefire 插件从 eclipse 中运行测试,并且您不能仅在执行 main 方法时运行它。
这只会发生在你类 LaunchTests
驻留在 src/main/java
并且你的套件 xml 文件 testng.xml
是指src/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
。 - 您引用here,使用类似
maven jar plugin
的东西来创建测试类的jar。 .
关于java - 尝试从主方法运行 TestNG 时无法在类路径中找到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43094008/