【问题标题】:Selenium TestNG: How can I run selenium tests from a compiled jar using TestNG?Selenium TestNG:如何使用 TestNG 从已编译的 jar 中运行 selenium 测试?
【发布时间】:2017-04-13 19:19:27
【问题描述】:

我们通常使用 TestNG xml 运行程序来触发 Selenium 测试。 示例 XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="P1_jobSeeker" parallel="classes" preserve-order="true" thread-count="1">
  <test name="P1_jobSeeker-1">
    <classes>
      <class name="pamr.testCases.jobSeeker.PAMRAutoJS12Part1"/>
      <class name="pamr.testCases.jobSeeker.PAMRAutoJS12Part2"/>
      <class name="pamr.testCases.jobSeeker.PAMRAutoJS12Part3"/>
    </classes>
  </test>
</suite>

现在我想在没有源文件的情况下在 IDE 之外执行此操作,只需从已编译的 jar 文件中运行所有内容。

我找到了 this SO 帖子,并正在尝试来自 TestNG 站点的 this 解决方案。

我已经创建了我的主类并指定了要运行的类。

import java.util.ArrayList;
import java.util.List;

import org.testng.TestNG;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;

public class Main {
    public static void main(String[] args) {
        XmlSuite suite = new XmlSuite();
        suite.setName("P1_jobSeeker");

        XmlTest test = new XmlTest(suite);
        test.setName("P1_jobSeeker-1");
        List<XmlClass> classes = new ArrayList<XmlClass>();
        classes.add(new XmlClass("pamr.testCases.jobSeeker.PAMRAutoJS12Part1"));
        classes.add(new XmlClass("pamr.testCases.jobSeeker.PAMRAutoJS12Part2"));
        classes.add(new XmlClass("pamr.testCases.jobSeeker.PAMRAutoJS12Part3"));
        test.setXmlClasses(classes);

        List<XmlSuite> suites = new ArrayList<XmlSuite>();
        suites.add(suite);
        TestNG tng = new TestNG();
        tng.setXmlSuites(suites);
        tng.run();
    }
}

在将项目导出到 jar 之前,我尝试运行 main,但在这一行得到 java.lang.ClassNotFoundExceptionXmlSuite suite = new XmlSuite();

完整的控制台堆栈:

Exception in thread "main" java.lang.NoClassDefFoundError: org/testng/xml/XmlSuite
    at Main.main(Main.java:11)
Caused by: java.lang.ClassNotFoundException: org.testng.xml.XmlSuite
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more
ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [util.c:840]

可能值得注意的是,我的项目是一个 Maven 项目,因此主文件夹和测试文件夹是分开的。

提前致谢!

【问题讨论】:

    标签: java maven selenium testng


    【解决方案1】:

    我有一个类似的要求,我必须将测试作为 testng jar 运行,而不是通过 maven 测试阶段。记录的步骤here

    HTH

    【讨论】:

    • 接受这个答案。谢谢!
    【解决方案2】:

    以下检查点可能会解决您的问题:

    1. 确保您没有丢失任何与 TestNG 相关的 JAR 文件并将它们添加为可执行 jar
    2. 线程“main”java.lang.NoClassDefFoundError 中的异常:表示在类路径中找不到您尝试运行的类。检查目标/类一次。
    3. 为每个类使用@Test 注解

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多