Meilleure façon d'ajouter de PhantomJS binaire à un projet maven?
J'ai essayé d'utiliser le phantomjs-maven-plugin à installer phantomjs binaire. Je voulais courir mes tests sur un Tomcat7 serveur c'est pourquoi j'ai besoin de configurer binaire automatiquement.
Voici mon pom.xml
<properties>
<ghostdriver.version>1.2.0</ghostdriver.version>
<phantomjs.version>1.9.7</phantomjs.version>
<phantomjs-maven-plugin.version>0.7</phantomjs-maven-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
<dependency>
<groupId>com.github.detro</groupId>
<artifactId>phantomjsdriver</artifactId>
<version>${ghostdriver.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<!-- if your container implements Servlet API older than 3.0, use "jersey-container-servlet-core" -->
<artifactId>jersey-container-servlet</artifactId>
<version>2.21</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.21</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.21</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>com.github.klieber</groupId>
<artifactId>phantomjs-maven-plugin</artifactId>
<version>${phantomjs-maven-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>install</goal>
</goals>
</execution>
</executions>
<configuration>
<version>1.9.7</version>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<systemPropertyVariables>
<phantomjs.binary>${phantomjs.binary}</phantomjs.binary>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
Et puis ici, c'est la façon dont je suis l'initialisation de la webdriver ....il suffit de regarder le constructeur et passez à la fonction main() en bas
public class FindTrains {
private WebDriver driver;
//private WebDriverWait wait;
JavascriptExecutor js;
String baseURL = "http://www.indianrail.gov.in/inet_Srcdest.html";
public FindTrains(){
driver = new PhantomJSDriver();
//((HtmlUnitDriver)driver).setJavascriptEnabled(true);
//wait = new WebDriverWait(driver, 2);
js = (JavascriptExecutor) driver;
}
public void getTrains(String src, String dest){
driver.get(baseURL);
WebElement elemSrc = driver.findElement(By.xpath(xpathSrc));
setAttributeValue(elemSrc, src.toUpperCase());
WebElement elemDest = driver.findElement(By.xpath(xpathDest));
setAttributeValue(elemDest, dest.toUpperCase());
WebElement elemGetDetails = driver.findElement(By.xpath("//*[@id='formId']/table/tbody/tr/td/table/tbody/tr[2]/td[2]/table/tbody/tr/td/table/tbody/tr[16]/td[2]/input[1]"));
elemGetDetails.click();
System.out.println(driver.getCurrentUrl()+ " "+ driver.getTitle());
}
public void setAttributeValue(WebElement elem, String value){
String scriptSetAttrValue = "arguments[0].setAttribute(arguments[1],arguments[2]);";
js.executeScript(scriptSetAttrValue, elem, "value", value);
}
public static void main(String [] args){
System.out.println(System.getProperty("phantomjs.binary"));
new FindTrains().getTrains("nad", "ndls");
}
}
Donc, le problème est que je suis incapable de vérifier que mes si le binaire a été installé ou pas ....et même si c'était le cas, pourquoi ne main() prints null for system.property("phantomjs.binary")
J'ai fourni mon complet pom.xml de code java et... merci de m'aider à voir ce que je suis
fais de mal
Edit:
Dans la fonction main (), j'invoque FindTrains
par la création d'un objet de FindTrains
et de l'appel de getTrains()
sur cet objet. mais depuis le driver
n'est pas configuré en raison du manque d'binaire ....la première ligne de main()
imprime null
.
- C'est vraiment pas clair. Comment est
FindTrains
invoquée? Aussi, s'il vous plaît poster un mininal exemple de reproduire le problème de sorte qu'il est plus facile pour les gens à reproduire le problème et de le résoudre.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser WebDriverManager. Il suffit d'ajouter la dépendance suivant:
Et puis, dans votre code appel à:
WebDriverManager télécharge la dernière version de la PhantomJS binaire pour être utilisé avec Selenium WebDriver.
La raison que le système de propriété n'est pas définie est parce que vous êtes à l'aide de la
maven-surefire-plugin
pour le régler. C'est le plugin qui s'exécute tous vos JUnit tests lors de la maven phase de test. De sorte que toute JUnit tests de surefire exécute aura le système de la propriété disponible. Cependant, il semble que vous exécutez unemain()
méthode d'une classe, et non pas un JUnit à tous alors, bien sûr, le système de la propriété n'est pas là.Je suis vraiment confus au sujet de ce que vous êtes en train de faire/s'attendait à trouver. Est ce test a couru dans le cadre de votre processus de build maven? Qu'est ce que le phantomjs-maven-plugin est construit, il n'est pas construit pour l'incorporation de phantomjs dans une application Java.