Ne peut pas trouver la classe dans le classpath lors de l'exécution de TestNG de la méthode main
Je lance mon Sélénium Testng des tests à l'aide de Maven, mais je suis en train de créer un exécutable pots, afin que les autres membres de l'équipe peuvent tout simplement exécuter une automatisation de la suite à partir de leur ordinateur de bureau avec une configuration minimale.
J'ai donc ajouté un principal "runner" la méthode pour créer un fichier exécutable 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();
}
}
Ma meilleure supposition est que quelque chose doit être ajouté à la POM.xml?
Lors de l'exécution de la testng tests manuellement à partir d'eclipse, ou avec mvn clean test (plugin Surefire), ils fonctionnent parfaitement. Mais j'ai cette erreur lorsque vous essayez d'exécuter un programme 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>
- Pourriez-vous partager votre
testng.xml
? Et qu'est-ce que la commande java-vous courir? - En plus du commentaire ci-dessus, avez-vous essayé d'exécuter vos tests IDE directement à partir de testng.xml?
- Collé mon testng xml dans le poste principal. Et oui, les tests s'exécutent correctement lors de l'exécution directement à partir de l'IDE, et également lors de l'exécution via la ligne de commande avec maven infaillible.
- Si votre problème est que vous n'êtes pas en mesure de créer un exécutable jar à l'aide de maven droit?
- Pourriez-vous partager votre pom.xml fichier?
Vous devez vous connecter pour publier un commentaire.
Vous avez mentionné que vous êtes en mesure d'exécuter les tests à partir d'eclipse via maven plugin surefire et vous n'êtes pas en mesure d'exécuter uniquement lors de l'exécution de votre méthode principale.
Cela ne peut se produire lorsque vous classe
LaunchTests
réside danssrc/main/java
et votre suite fichier xmltestng.xml
est en se référant à des cours au sein desrc/test/java
. Des classes Java danssrc/main/java
n ' avez pas de visibilité dans les classes java qui résident au sein desrc/test/java
. Ce qui explique pourquoi TestNG lève l'exceptionCannot find class in classpath
Et si votre
LaunchTests
se déplace danssrc/test/java
alors, par défaut, il ne sera pas inclus dans le super jar exécutable jar) que vous êtes la construction parce que les classes de test sont omis.Donc, si vous voulez vraiment être en mesure de faire cela, vous avez deux options
src/test/java
ensrc/main/java
, puis de travailler avec elle (plugin Surefire de configuration dans votre pom fichier peut avoir besoin de quelques ajustements pour laisser savoir que vos sources de test n'est passrc/test/java
maissrc/main/java
.maven jar plugin
pour créer un pot de classes de test en se référant à ici.Oui, vous devez ajouter de la plugins dans pom.xml pour créer un exécutable jar .
Aller à votre Projet =>Clic Droit => Exécuter en tant Qu' => Maven build... (qui a 3 points de fuite) =>Dans les Buts écrire installation propre
Il va créer deux pots dans le dossier cible.
Le pot qui a de fuite jar-with-dependencies.jar est le runnable jar.
Endroit où votre chrome pilote et accédez à l'emplacement du pot et de l'exécuter , il serait de travailler.
J'ai juste réglé pour l'un de nos ingénieurs. Il avait la dernière mise à jour plugin testng, mais nous avons résolu le problème en mettant à jour son chemin de création d'un testng 6.11 fichier jar (il avait 6.9.6 avant).