2017-03-29 2 views
0

auszuführen Ich benutze meine Selenium Testng Tests mit Maven, aber ich versuche, ausführbare Jars zu erstellen, damit andere Teammitglieder einfach eine Automatisierungssuite von ihrem Desktop aus ausführen können Konfiguration.Klasse kann nicht im Klassenpfad gefunden werden, wenn ich versuche, TestNG mit der Hauptmethode

Also habe ich eine Haupt "Runner" -Methode hinzugefügt, um eine ausführbare Jar zu erstellen.

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(); 

} 

}

Meine beste Vermutung ist, dass etwas in die pom.xml hinzugefügt werden muss?

Wenn die Testtests manuell von Eclipse oder mit dem mvn clean Test (Surefire Plugin) ausgeführt werden, laufen sie einwandfrei. Aber ich bekomme diesen Fehler, wenn ich versuche, als Java-Programm zu laufen.

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

Können Sie Ihre 'testng.xml' teilen? Und was ist der Java-Befehl, den Sie ausführen? – juherr

+0

Haben Sie neben dem obigen Kommentar auch versucht, Ihre Tests direkt aus der Datei testng.xml in der IDE auszuführen? – Mikhail

+0

Ich habe mein Testng xml in den Hauptpost eingefügt. Und ja, die Tests laufen gut, wenn sie direkt von der IDE ausgeführt werden, und auch wenn sie über die Befehlszeile mit Maven todsichere laufen. – dsidler

Antwort

0

Ja, müssen Sie zusätzliche Plugins hinzufügen in pom.xml ein lauffähiges Glas zu schaffen.

<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> 

zu Ihrem Projekt = Go> Rechtsklick => Run As => Maven bauen ... In Tore => (die 3 nachlauf Punkte hat) Schreib sauber

Es installieren zwei erstellen Gläser im Zielordner.

Das JAR, das jar-with-dependencies.jar hat, ist das ausführbare JAR.

Platzieren Sie es, wo Ihr Chrome-Treiber ist und gehen Sie zum Speicherort von jar und führen Sie es aus, es würde funktionieren.

1

Sie haben erwähnt, dass Sie die Tests innerhalb von Eclipse über das Maven-Surefire-Plugin ausführen können, und Sie können es nur ausführen, wenn Sie Ihre Hauptmethode ausführen.

Dies kann nur geschehen, wenn Sie Klasse LaunchTests residiert in src/main/java und Ihrer Suite XML-Datei testng.xml bezieht sich auf Klassen innerhalb src/test/java. Java-Klassen innerhalb von src/main/java haben keinen Einblick in Java-Klassen, die innerhalb von src/test/java liegen. Das erklärt, warum TestNG die Ausnahme Cannot find class in classpath

wirft Und wenn Ihr LaunchTests bewegt sich in src/test/java dann standardmäßig wird es nicht in der uber jar (ausführbare jar) enthalten sein, die Sie bauen, weil Testklassen entfallen.

Also, wenn Sie wirklich wollen in der Lage sein zu tun, haben Sie zwei Möglichkeiten

  1. Verschieben Sie alle Ihre Testklassen von src/test/java in src/main/java und dann mit ihm (todsichere Plugin-Konfiguration in Ihrem pom-Datei arbeiten müssen einige zwickt es wissen zu lassen, dass Ihre Testquellen nicht src/test/java ist aber src/main/java.
  2. Sie Gebrauch von so etwas wie maven jar plugin machen unter Bezugnahme auf here ein Glas Testklassen zu erstellen.
0

Ich habe dies gerade für einen unserer Ingenieure gelöst. Er hatte das neueste Testng-Plugin aktualisiert, aber wir lösten das Problem, indem wir auch seinen Build-Pfad auf eine Test-6.11-Jar-Datei aktualisierten (er hatte vorher 6.9.6).

Verwandte Themen