我尝试使用phantomjs-maven-plugin安装phantomjs二进制文件。我想在Tomcat7服务器上运行测试,这就是为什么我需要自动配置二进制文件的原因。
这是我的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>
然后这就是我初始化网络驱动程序的方式....只要看一下构造函数,然后跳到底部的main()函数,>
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"); } }
所以问题是我无法验证我的二进制文件是否已安装...。即使安装了,为什么
main() prints null for system.property("phantomjs.binary")
我提供了完整的pom.xml和Java代码...请帮助我看看我是什么做错了
编辑:
在main()函数中,我通过创建FindTrains
对象并在该对象上调用FindTrains
来调用getTrains()
。但是由于缺少二进制文件而未配置driver
,因此main()
的第一行将显示null
。
我尝试使用phantomjs-maven-plugin安装phantomjs二进制文件。我想在Tomcat7服务器上运行测试,这就是为什么我需要自动配置二进制文件的原因。这是我的pom.xml <...>
您可以使用WebDriverManager。只需添加以下依赖项:
未设置系统属性的原因是因为您正在使用maven-surefire-plugin
进行设置。那是在maven测试阶段运行所有JUnit测试的插件。因此,surefire执行的任何JUnit测试都将具有系统属性。但是,听起来您正在运行的是类的main()
方法,而不是JUnit的,因此系统属性当然不存在。