2017-03-29 9 views
0

Mavenを使用してSelenium Testngテストを実行しますが、実行可能なjarファイルを作成しようとしています。セットアップ。メインメソッドからTestNGを実行しようとしたときにクラスパス内にクラスが見つからない

したがって、実行可能な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) 

Testng.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> 
+0

あなたの 'testng.xml'を共有できますか?あなたが実行するjavaコマンドは何ですか? – juherr

+0

上記のコメントに加えて、testng.xmlから直接IDEでテストを実行しようとしましたか? – Mikhail

+0

私のtestng xmlをメインポストに貼り付けました。そして、はい、IDEから直接実行するときや、コマンドライン経由でmaven surefireを実行しているときにも、テストは正常に実行されます。 – dsidler

答えて

0

はい、あなたは実行可能なjarファイルを作成するのpom.xmlに余分プラグインを追加する必要があります。あなたのプロジェクト(3個の末尾のドットを持っている)=>右クリック=> Run As(実行)=> Mavenのビルド... =へ

<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>StackOverFlow</groupId> 
    <artifactId>StackOverFlow</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <build> 
     <sourceDirectory>src</sourceDirectory> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.5.1</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <archive> 
         <manifest> 
          <mainClass>com.stack.JarCreation.Main</mainClass> 
         </manifest> 
        </archive> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>attached</goal> 
         </goals> 
         <phase>package</phase> 
         <configuration> 
          <descriptorRefs> 
           <descriptorRef>jar-with-dependencies</descriptorRef> 
          </descriptorRefs> 
          <archive> 
           <manifest> 
            <mainClass>com.stack.JarCreation.Main</mainClass> 
           </manifest> 
          </archive> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>org.seleniumhq.selenium</groupId> 
      <artifactId>selenium-java</artifactId> 
      <version>3.3.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.testng</groupId> 
      <artifactId>testng</artifactId> 
      <version>6.9.13.6</version> 
     </dependency> 
    </dependencies> 
</project> 

移動]> [目標でがきれい

をインストール書き込みこれは、2つを作成します。ターゲットフォルダ内のjarファイル。

jar-dependencies.jarが実行可能なjarです。

クロームドライバがある場所に置き、ジャーの場所に移動して実行しても動作します。

1

あなたはmaven surefireプラグインを介してeclipseからテストを実行でき、mainメソッドの実行時にのみ実行できると述べました。

これは、クラスLaunchTestssrc/main/javaにあり、suite xmlファイルtestng.xmlsrc/test/javaのクラスを参照している場合にのみ発生します。 src/main/java内のJavaクラスdonotは、src/test/java内にあるJavaクラスの可視性を持っています。 TestNGのは例外Cannot find class in classpath

とテストクラスが省略されているため、デフォルトで、それはあなたが構築しているユーバージャー(実行可能なjarファイル)に含まれて文句を言わないsrc/test/javaにあなたのLaunchTests移動した場合にスロー理由は説明しています。

あなたが本当にこれを実行できるようにしたいのであれば、次の2つのオプション

  1. を持っているが(あなたのポンポンファイル内シュアプラグイン設定が必要になることがありsrc/main/javasrc/test/javaから、すべてのテストクラスを移動して、それに取り組みますテストソースがsrc/test/javaではなく、src/main/javaであることを知らせるいくつかの調整があります
  2. maven jar pluginのようなものを使用して、hereを参照してテストクラスのjarファイルを作成します。
0

私はただ私たちのエンジニアの1人にこの問題を解決しました。彼は最新のtestngプラグインにアップデートしましたが、私たちはtestng 6.11 jarファイル(以前は6.9.6だった)にビルドパスを更新することで問題を解決しました。

関連する問題